mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-08 01:56:10 -05:00
8d353a5b3b
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/trunk@189 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
82 lines
4.0 KiB
Plaintext
82 lines
4.0 KiB
Plaintext
Notes about WDM-KS host API
|
|
---------------------------
|
|
|
|
Status history
|
|
--------------
|
|
10th November 2005:
|
|
Made following changes:
|
|
* OpenStream: Try all PaSampleFormats internally if the the chosen
|
|
format is not supported natively. This fixed several problems
|
|
with soundcards that soundcards that did not take kindly to
|
|
using 24-bit 3-byte formats.
|
|
* OpenStream: Make the minimum framesPerHostIBuffer (and framesPerHostOBuffer)
|
|
the default frameSize for the playback/recording pin.
|
|
* ProcessingThread: Added a switch to only call PaUtil_EndBufferProcessing
|
|
if the total input frames equals the total output frames
|
|
|
|
5th September 2004:
|
|
This is the first public version of the code. It should be considered
|
|
an alpha release with zero guarantee not to crash on any particular
|
|
system. So far it has only been tested in the author's development
|
|
environment, which means a Win2k/SP2 PIII laptop with integrated
|
|
SoundMAX driver and USB Tascam US-428 compiled with both MinGW
|
|
(GCC 3.3) and MSVC++6 using the MS DirectX 9 SDK.
|
|
It has been most widely tested with the MinGW build, with most of the
|
|
test programs (particularly paqa_devs and paqa_errs) passing.
|
|
There are some notable failures: patest_out_underflow and both of the
|
|
blocking I/O tests (as blocking I/O is not implemented).
|
|
At this point the code needs to be tested with a much wider variety
|
|
of configurations and feedback provided from testers regarding
|
|
both working and failing cases.
|
|
|
|
What is the WDM-KS host API?
|
|
----------------------------
|
|
PortAudio for Windows currently has 3 functional host implementations.
|
|
MME uses the oldest Windows audio API which does not offer good
|
|
play/record latency.
|
|
DirectX improves this, but still imposes a penalty
|
|
of 10s of milliseconds due to the system mixing of streams from
|
|
multiple applications.
|
|
ASIO offers very good latency, but requires special drivers which are
|
|
not always available for cheaper audio hardware. Also, when ASIO
|
|
drivers are available, they are not always so robust because they
|
|
bypass all of the standardised Windows device driver architecture
|
|
and hit the hardware their own way.
|
|
Alternatively there are a couple of free (but closed source) ASIO
|
|
implementations which connect to the lower level Windows
|
|
"Kernel Streaming" API, but again these require special installation
|
|
by the user, and can be limited in functionality or difficult to use.
|
|
|
|
This is where the PortAudio "WDM-KS" host implementation comes in.
|
|
It directly connects PortAudio to the same Kernel Streaming API which
|
|
those ASIO bridges use. This avoids the mixing penatly of DirectX,
|
|
giving at least as good latency as any ASIO driver, but it has the
|
|
advantage of working with ANY Windows audio hardware which is available
|
|
through the normal MME/DirectX routes without the user requiring
|
|
any additional device drivers to be installed, and allowing all
|
|
device selection to be done through the normal PortAudio API.
|
|
|
|
Note that in general you should only be using this host API if your
|
|
application has a real requirement for very low latency audio (<20ms),
|
|
either because you are generating sounds in real-time based upon
|
|
user input, or you a processing recorded audio in real time.
|
|
|
|
The only thing to be aware of is that using the KS interface will
|
|
block that device from being used by the rest of system through
|
|
the higher level APIs, or conversely, if the system is using
|
|
a device, the KS API will not be able to use it. MS recommend that
|
|
you should keep the device open only when your application has focus.
|
|
In PortAudio terms, this means having a stream Open on a WDMKS device.
|
|
|
|
Usage
|
|
-----
|
|
To add the WDMKS backend to your program which is already using
|
|
PortAudio, you must undefine PA_NO_WDMKS from your build file,
|
|
and include the pa_win_wdmks\pa_win_wdmks.c into your build.
|
|
The file should compile in both C and C++.
|
|
You will need a DirectX SDK installed on your system for the
|
|
ks.h and ksmedia.h header files.
|
|
You will need to link to the system "setupapi" library.
|
|
Note that if you use MinGW, you will get more warnings from
|
|
the DX header files when using GCC(C), and still a few warnings
|
|
with G++(CPP). |