|
|||||||
![]() |
|
|
LinkBack (24) | Thread Tools |
|
|
#1
|
|
DriverHeaven Junior Member
Join Date: Sep 2007
Posts: 45
Rep Power: 0 ![]() |
KNOWN ISSUE: 2gb or more RAM
This issue has been solved. Remaining issues are likely buffer issues (See below)
So we don't get more varied threads here, Russ dug up a old post explaining the problem: 3545 released (BETA) - revision 3545b This affects ALL versions of windows. XP x86, however, is less likely. It is not guaranteed to happen, but is very likely with more than 2gb of ram. Problem: "The card's hardware does not recognize addresses above 2 GB (uses a 31 bit (=2GB) DMA mask or something like that), so if Windows happens to create the buffers below that 2 GB barrier than it will work, if not, it will not work." Symptoms: Scratchy sound Clicking/randomness No sound at all (Except from inputs, such as Mic) Solutions: The only known solution is to go down to 2gb. (If you only have scratchy - but all there - sound, increase the length of your buffers. KX tray -> settings -> setup buffers) Existing threads: Windows 7 & 3 Gb RAM No sound on Windows 7 x64 RC1 Massive Distortion/Stuttering CT4780 with Vista SP1 - only makes noise! Mentioned in release threads: x64 driver (Vista x64 and Windows XP x64) - ALPHA - 3546 x64 driver(Vista x64 and Windows XP x64) - beta - 3547 3548 released - BETA - x86 and x64 builds Mentioned in bug threads: x64 - 3546 - bugs and issues If anyone knows of any more relevant posts I can link to, post them. Solutions are what we need, so if you're a programmer, read over Eugene's post and see if you come up with anything. If you've found a workaround, please post it for verification (Once you're sure this is the problem you were experiencing) Other than that, please keep "Yes, this happens to me too", and other posts out of the thread so that it will be easy for E to review. If this could get stickied, it'd be great... Or a Known Issues thread put up. Last edited by Temragon; Sep 24, 2009 at 04:13 PM. Reason: Added buffer note |
|
|
|
|
|
#2 |
|
DriverHeaven Extreme Member
Join Date: Jan 2005
Posts: 4,836
Rep Power: 41 ![]() ![]() ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
Good post, but it is not Windows 7 specific. As Max said in one of the other threads, it is with any OS (but WinXP x86 is more likely to work, due to the way it handles memory).
|
|
|
|
|
|
#3 | |
|
DriverHeaven Junior Member
Join Date: Sep 2007
Posts: 45
Rep Power: 0 ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
Quote:
I gave it the title I did, though, to catch the rushed newbies who only check for things that seem like it is their exact problem. Most of them seem to be using 7, so I put that in with brackets. I figured the other people would read it anyway, since they were more likely to try to find a solution first. Especially if it is stickied. |
|
|
|
|
|
|
#4 |
|
DriverHeaven Junior Member
Join Date: Feb 2004
Posts: 49
Rep Power: 0 ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
just to let you know, win2k3 x86 and 4gb of ram works perfectly with 3545 (too lazy to install the latest just yet) and my audigy 2 plat, haven't noticed any problems in the last month
|
|
|
|
|
|
#5 | |
|
DriverHeaven Junior Member
Join Date: Sep 2007
Posts: 45
Rep Power: 0 ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
Quote:
Like I said, it's confirmed, but doesn't happen all the time- it seems more or less random where it gets established in memory- See E's post. Let's keep it to suggestions or abnormal reports (Say, you get it to work reliably over multiple computers by doing something different) |
|
|
|
|
|
|
#6 |
|
DriverHeaven Junior Member
Join Date: Dec 2007
Posts: 57
Rep Power: 0 ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
Of what I've read by several users it seems Windows 7 is affected the most where you usually get no sound at all and on Vista you get clicks or distortions and tweaking buffer size usually helps.
I'd be more than happy if Windows 7 would be able to get to Vista-compability so tweaking buffer size would help already and you'd be able to hear sound. ![]() In near future many people will be using 4 - 8GB ram and prefer Windows 7 which looks to be the next "XP", that's why I think this is such a critical bug... I know it certainly scares me from upgrading to an upcoming Intel i7 (Lynnfield) CPU and 4GB ram if this incompability strikes me as well. Buying a new sound card isn't really a solution as I prefer an Audigy card + kX drivers over X-Fi or the new ASUS cards... Last edited by RPGWiZaRD; Aug 1, 2009 at 01:57 AM. |
|
|
|
|
|
#7 |
|
DriverHeaven Extreme Member
Join Date: Jan 2005
Posts: 4,836
Rep Power: 41 ![]() ![]() ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
The only related info that I have seen talks about creating your own DMA-channel object instead of using the one created by NewMasterDmaChannel. The custom IDmaChannel implementation can use IDmaChannel::AllocateBuffer which includes a PhysicalAddressConstraint parameter which can be used to place a constraint on the physical address of the buffer. This sounds like what is needed, but maybe it is more complicated than it sounds (or maybe I am looking in the wrong place)... and I am sure E. must have read the same information, so...
|
|
|
|
|
|
#8 |
|
DriverHeaven Senior Member
Join Date: Jan 2004
Location: St. Cloud, MN
Posts: 487
Rep Power: 0 ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
which buffer is causing the problem? if it is the X-Tram, that can be set to 0 kb, perhaps that would change things... probably a different buffer though? Is there any word on the creative drivers; do they have the issue also?
EDIT/idea: I am not very familiar with ASIO4ALL, however could we use this program as an intermediary step for machines with >4gb? so for example, asio4all would be the default audio device and that would then be routed (via asio) into the kx drivers... EDIT2: after looking further into things, ASIO4ALL does not work that way... it appears to do the 'opposite' of what I wanted to do... If we can find an intermediary 'driver' to accept the WMM audio that could output ASIO to the KX card we would be golden
__________________
COMP: Dual Intel PIII 733 Mhz; GeForce 4 Ti 4600; 1.128 Gb RAM; SB0350 (Audigy 2 ZS Platnium) STEREO(I UPGRADED):Crown Audio K1 and K2 amplifiers (4000 watts at .1% THD ), JL 13w7 Subwoofer (6.5 CF) (2) 18" PR's, Klipsch SB-1's, some cement blocks for speaker stands...
Last edited by Chester01; Aug 1, 2009 at 10:44 PM. |
|
|
|
|
|
#9 |
|
DriverHeaven Junior Member
Join Date: Feb 2004
Posts: 49
Rep Power: 0 ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
|
|
|
|
|
|
#10 |
|
DriverHeaven Senior Member
Join Date: Jan 2004
Location: St. Cloud, MN
Posts: 487
Rep Power: 0 ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
I cannot believe I am saying this but I may have to use the creative driver till this gets fixed on one of my computers :/ (just died a little inside)
__________________
COMP: Dual Intel PIII 733 Mhz; GeForce 4 Ti 4600; 1.128 Gb RAM; SB0350 (Audigy 2 ZS Platnium) STEREO(I UPGRADED):Crown Audio K1 and K2 amplifiers (4000 watts at .1% THD ), JL 13w7 Subwoofer (6.5 CF) (2) 18" PR's, Klipsch SB-1's, some cement blocks for speaker stands...
|
|
|
|
|
|
#11 |
|
DriverHeaven Newbie
|
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
Creative is supposedly making/ made new drivers for W7, if those are out you could try and reverse them and see how creative solved the 2GB problem (somebody that has a non-OEM card that will work with official drivers that is). Even daniel_k was having problems with the SB Lives and the 2GB+ issue on his win7 pack but hes certain creative can fix it.
Edit: Creative beta drivers for w7 (Sb Live): Code:
http://forums.creative.com/creativelabs/board/message?board.id=soundblaster&thread.id=141688 Last edited by SithBoxer; Aug 10, 2009 at 06:15 PM. |
|
|
|
|
|
#12 |
|
DriverHeaven Senior Member
Join Date: Jan 2004
Location: St. Cloud, MN
Posts: 487
Rep Power: 0 ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
I have been using the creative drivers on my laptop (audigy 2 zs notebook) which had been having issues with direct sound (2 gb of ram, but something to do with direct sound 'erroring' out and making loud screeching sounds); that works just fine with the creative drivers, I need direct sound because I am going to be using RoomEQWizard which usually after running a test causes the beep/screechy sound
I also am using the creative drivers on my desktop with 5 gb of ram, they work fine. Still using kX on my parents computer once the other issues are fixed ill definately be going back to kX on my computers...
__________________
COMP: Dual Intel PIII 733 Mhz; GeForce 4 Ti 4600; 1.128 Gb RAM; SB0350 (Audigy 2 ZS Platnium) STEREO(I UPGRADED):Crown Audio K1 and K2 amplifiers (4000 watts at .1% THD ), JL 13w7 Subwoofer (6.5 CF) (2) 18" PR's, Klipsch SB-1's, some cement blocks for speaker stands...
|
|
|
|
|
|
#13 |
|
DriverHeaven Newbie
|
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
I only wish i could test the creative drivers out. I have an SB0220 though (Oem SB Live Digital) and any time i have tried official creative drivers i get BSODs.
|
|
|
|
|
|
#14 | |
|
DriverHeaven Newbie
Join Date: Aug 2009
Posts: 8
Rep Power: 0 ![]() ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
Quote:
|
|
|
|
|
|
|
#15 |
|
kX Project Lead Programmer and Coordinator
Join Date: Dec 2002
Posts: 3,037
Rep Power: 56 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Îòâåò: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
The driver does not allocate memory by itself. Whenever the driver's audio stream instance is allocated, its CMiniportWaveOut(in)Stream::Init() function is called.
This function needs to return PDMACHANNEL pointer to the PortClass driver. Microsoft suggest I use Miniport->Port->NewMasterDmaChannel function for allocating PDMACHANNEL. And this function won't allow to specify the boundaries. Perhaps I can use IDmaChannel interface directly and allocate it. But it is not clear how. Do you think it is a good idea to do the following? * call NewMasterDmaChannel "as is" * free the buffer by calling IDmaChannel::FreeBuffer * re-allocate the buffer by using IDmaChannel::AllocateBuffer, this time specifying constraints accordingly If I'm not mistaken, there is no convenient method of instantiating IDmaChannel in a different way, except for NewMasterDmaChannel. Please let me know what do you think. E. |
|
|
|
|
|
#16 |
|
DriverHeaven Extreme Member
Join Date: Jan 2005
Posts: 4,836
Rep Power: 41 ![]() ![]() ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
Again, I am not a driver developer and do not know much about it, but it seems (from what I have read) that no matter what solution you come up with, it is going to be using some kind of double buffering. If that is the case, how much difference would it be to just treat it as a subordinate device and use NewSlaveDMAChannel and AllocateBuffer instead?
|
|
|
|
|
|
#17 |
|
kX Project Lead Programmer and Coordinator
Join Date: Dec 2002
Posts: 3,037
Rep Power: 56 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Îòâåò: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
Russ,
No, if we managed to use the proper AllocateBuffer function, no copying would be necessary. I will check this next week and will release a new version of the driver for testing (I only have 2Gb of RAM, so, cannot verify this solution). E. |
|
|
|
|
|
#18 | ||
|
DriverHeaven Newbie
Join Date: Aug 2009
Posts: 8
Rep Power: 0 ![]() ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
First of all, thanks @Eugene for having a look into this issue!
While I'm not familiar with audio driver development, I do have some experience in the mass storage driver corner of Windows. Therefore, my thoughts could be wrong but I'll share them with you anyways :PQuote:
In our case, however, we have stricter DMA memory requirements that are not fulfilled since NewMasterDmaChannel will only return objects that work for hardware that use the full 32 or 64 address lanes. In this case, we are allowed to implement IDmaChannel ourselves by providing a custom object that is returned on IMiniportWaveCyclic::NewStream. This object can use whatever memory function Windows has to create the memory area that fits the silicon's needs. Further readings can be found at DMA Channel Objects. There is a paragraph that reads: "Port drivers provide miniport drivers with functions that they can use to create DMA channels. Unless otherwise noted in the description of the port driver, it is not absolutely necessary to use DMA objects allocated from the port driver. The port driver simply requires a pointer to an IDmaChannel interface that supports the methods it needs. Check the documentation for each port driver for a list of the DMA channel methods that the port driver requires." The documentation of NewStream (which is the documentation we have to check) only has a list of methods of IDmaChannel that need to be implemented but doesn't state that it needs an IDmaChannel object returned by NewMasterDmaChannel so we should be fine there. Quote:
While this is not the cleanest solution on earth, it wouldn't require double-buffering and is easy to implement and test and will make a lot of users happy if it works Imho we should give this approach a try.I'm afraid you're right. Besides re-implementing IDmaChannel or freeing-then-reallocating, there seems to be no way of creating an IDmaChannel that immediately fits the card's needs. |
||
|
|
|
|
|
#19 |
|
DriverHeaven Extreme Member
Join Date: Jan 2005
Posts: 4,836
Rep Power: 41 ![]() ![]() ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
I am probably wrong, but it seems to me as though it works something like the following:
NewMasterDMAChannel checks to see if the device supports 64 bit addressing. If it does support 64 bit addressing then it just creates the buffer to use for DMA. If it does not support 64 bit addressing and the system has less than 4 GB RAM, then it acts similarly (nothing special needs to be done). However, if the device does not support 64 bit addressing, and the system has more than 4 GB RAM, then it also creates a common buffer (below 4 GB) and uses double buffering. If Windows uses double buffering with devices that can do 32 bit PCI addressing (on systems with more than 4 GB RAM), then it seems likely that you would have to do the same with a device that only supports 31 bit PCI addressing... unless you implement your own IDMChannel interface, and thus your own memory handing routines, etc (which as we know, is not so easy without knowing what exactly is supposed to happen in (and the most efficient way to implement) each and every function IDMAChannel needs to support). From the way I have seen AllocateBuffer used (in example code used with NewSlaveDMAChannel (which is the only place I have seen it used), etc), it seems that it's purpose may be to create a common buffer (for double buffering), in which case, what you want to do with NewMasterDMAChannel may not work the way you are thinking it will, because it is 2 different buffers. i.e. By specifying that the device cannot do 64 bit addressing, it seems that (on systems with more than 4 GB RAM) you are going to get an IDMAChannel object that is already using a common buffer (setup for double buffering), and by freeing that buffer, and re-allocating it, all you are going to do is recreate the common buffer (except this time it will be below 2 GB instead of 4 GB). This might work (assuming the IDMAChannel object that you get does implement AllocateBuffer), but I think it will still be using double buffering, and there is some gray area as to what might happen on systems with less then 4 GB RAM (or systems with RAM between 2 GB and 4 GB). Again, I am probably wrong, so take it with a grain of salt, but I thought I would mention it just in case. Last edited by Russ; Aug 16, 2009 at 02:34 PM. Reason: typo |
|
|
|
|
|
#20 |
|
DriverHeaven Junior Member
Join Date: Dec 2007
Posts: 57
Rep Power: 0 ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
Eugene, do you got a DDR2 system? If so I'd be willing to donate one of my spare RAM kits (I have 3 CellShock 2x1GB DDR2 kits atm and use only 1 of them), a 2x1GB CellShock PC2-6400 4-4-4-12 kit so you could troubleshoot it yourself as well. That's the least I could do if this means I could possibly continue to enjoy my SB Audigy + kX driver in the future.
Drop me a message if interested. Last edited by RPGWiZaRD; Aug 16, 2009 at 10:21 PM. |
|
|
|
|
|
#21 |
|
DriverHeaven Newbie
Join Date: Apr 2009
Posts: 5
Rep Power: 0 ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
I think this is ReactOS's implementation of IDmaChannel (and some other related interfaces):
Doxygen - ReactOS Website |
|
|
|
|
|
#22 |
|
DriverHeaven Newbie
Join Date: Aug 2009
Posts: 8
Rep Power: 0 ![]() ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
I just reviewed the ReactOS implementation and found that it doesn't respect the physical address constraint at all. Hopefully the original MS implementation does a better job there. I then had a look at the MS docs of this method and now I'm unsure if it will really be the solution we're looking for...
The doc at IDmaChannel::AllocateBuffer says: "PhysicalAddressConstraint Specifies an optional constraint to place on the physical address of the buffer. If this parameter is non-NULL, only the bits that are set in the constraint address will vary from the beginning to the end of the buffer. For example, to request a buffer that does not cross a 64-kilobyte boundary, specify the physical address constraint 0x000000000000FFFF." IOW: You can tell this function which bits may change their values from the beggining to the end of the buffer but you cannot zero-force any bits of the returned physical address as required by the emu10k1/2. I sincerely hope that I'm wrong but imho the wording is quite clear
|
|
|
|
|
|
#23 |
|
DriverHeaven Extreme Member
Join Date: Jan 2005
Posts: 4,836
Rep Power: 41 ![]() ![]() ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
You are right, it does sound that way, but what useful purpose would that serve? That would seem to only limit the size of the buffer, so then what is the purpose of the BufferSize parameter?
|
|
|
|
|
|
#24 |
|
DriverHeaven Newbie
Join Date: Apr 2009
Posts: 5
Rep Power: 0 ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
The purpose that it was thought it could serve was to keep the allocated buffer under the 2GB mark. This information indicates that the function isn't capable of such.
BufferSize is just how big the buffer is, and has nothing to do with where it is located. I wonder how Creative pulls this off in their own driver... Presumably it has to work around the card's limitation as well. Unfortunately, I know almost nothing about reverse engineering (driver speak is already beyond me for the most part). |
|
|
|
|
|
#25 | |
|
DriverHeaven Newbie
Join Date: Aug 2009
Posts: 8
Rep Power: 0 ![]() ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
Quote:
![]() This will also mean that the maximum buffer size is limited to 64K. However, it is still necessary to provide the BufferSize parameter to be able to request smaller sizes that are not powers of 2. Bit OT here but maybe it helps us to understand the method better. |
|
|
|
|
|
|
#26 | ||
|
DriverHeaven Extreme Member
Join Date: Jan 2005
Posts: 4,836
Rep Power: 41 ![]() ![]() ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
Quote:
![]() Quote:
MS makes mention of the possibility of using the PcNewDmaChannel function (which I thought I read somewhere can be used to put additional constraints on the buffer, but now I cannot seem to find where I saw that (err, nevermindl)), but also states that it is more complicated to use, is obsolete, and would kill hardware acceleration on 64 bit versions of Windows (except Windows XP and Windows Server 2003). Aside from the above, they obviously have more resources (i.e. they can probably afford the cost of using MS support channels to find a solution, etc). Last edited by Russ; Aug 17, 2009 at 02:04 PM. |
||
|
|
|
|
|
#27 |
|
DriverHeaven Junior Member
Join Date: Feb 2004
Posts: 49
Rep Power: 0 ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
i tried creative's driver for my audigy2 platinum a while back (win7 x64, 4gb ram) and it worked flawlessly. i would probably use it if i didn't need the dsp of kx
|
|
|
|
|
|
#28 |
|
DriverHeaven Newbie
Join Date: Apr 2009
Posts: 5
Rep Power: 0 ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
These are the most recent Creative-authored drivers that I've found: http://support.creative.com/downloads/?h=7
When I had 4GB of RAM installed, those drivers worked without much issue. No audio glitching or crashing like I had seen with the driver that came with Windows 7's beta. But as LyyNx says, gotta have the DSP! Last edited by patches11; Aug 18, 2009 at 02:40 AM. Reason: Creative has released a non-beta driver for Windows XP through 7; updated link. |
|
|
|
|
|
#29 |
|
DriverHeaven Newbie
Join Date: Aug 2009
Posts: 8
Rep Power: 0 ![]() ![]() |
Re: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
I think in the long run it is necessary to implement IDmaChannel if the free-and-reallocate approach doesn't work. If we do this, we are allowed to use MmAllocateContiguousMemory and MmGetPhysicalAddress. While MS doesn't recommend these functions for DMA operations these are the only one that allow us to specify exact memory boundaries. AllocateCommonBuffer - which is the recommended function for DMA buffers - suffers from the same limitations as NewMasterDmaChannel.
I can provide a sample implementation of IDmaChannel using these functions if that would help. Hell, if I had the driver sources, I would be keen on implementing and testing it right away! As for the Creative drivers: Besides not being full-featured, they don't seem to support the good old SoundBlaster Live! and Live! Value models, so this is not an option for a lot of users.
|
|
|
|
|
|
#30 |
|
kX Project Lead Programmer and Coordinator
Join Date: Dec 2002
Posts: 3,037
Rep Power: 56 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Îòâåò: KNOWN ISSUE: [Windows 7 with] 2gb or more RAM
thrillhouse82,
yes, please write a sample implementation and the functions necessary to instantiate the object - this would be very useful. you can test these functions by using any sample WDK driver, e.g. a 'toaster' driver all, please have a look at the debug logs of 3549-b build, they should dump the physical address of the buffer allocated E. |
|
|
|
![]() |
| Bookmarks |
| Thread Tools | |
|
|