10-ENTRY LIMIT OF NT WAVE
DEVICE
Q: Got a "Can not allocate channel" error from running CallURL line detector. (I
know that this problem is related to the number of audio devices on the PC
and all I have to do is to change the order or enumeration of something
in the registry).
A: The issue you have met concerning all
Windows versions of NT, 2000 and XP up to the latest XP SP2. Since NT, in
Windows Installable NT driver architecture, keeps an
internal list of wave drivers. This list can ONLY carry
up to 10 entries for each type of device. (This limit is
not in WDM driver architecture, though)
As shown in the following
screen capture:
As in the picture
above, all 10 entries for audio (lower end of the list, wave to wave9) have
already been created. (The CallURL driver TPLUSDLL.DLL has been pushed
to wave10)
Windows creates an additional entry whenever a device driver is installed
. For example, an USB device is
used with a different USB port than before, it will add one more entry. Not
only for real hardware, certain
program can also create an entry
during execution. For
example, a virtual wave device for Skype recording will create an entry too.
Also, there maybe a bug in some version of windows
2000 SP4. When this OS is installed, 10
entries of “wdmaud.drv” has been
created already. (The “wdmaud” is a Microsoft's
WDM audio mapper, it only needs one copy for WDM
(blaster) hardware. (but, it shows up 10
times in the PC!)
In this case,
CallURL’s voice card driver installation program will add an entry to the last
entry, namely wave10. But Windows only processes ‘wave’
to ‘wave9’, totally 10 entries, the wave10 will be
ignored.
Therefore,
when executing Dial32 (Line Detector program),
the massage “Can not allocate channel”
will be shown, meaning -- cannot find the wave device or
the device has been occupied by other application already.
To fix this problem,
(1) Delete all duplicated entries and only leave one
(2) move/add the entry of the
voice card’s wave driver to the registry
within ‘wave’ to ‘wave
In the example case, the easiest way is to modify the value of entry ‘wave