asynchronous sample rate conversion to create a fused "virtual" stream.
opening one stream at a time. So the fusion scheme wouldn't work if you
wanted to open two or more ASIO devices.
levels is one approach. Another approach is clock recovery on buffer
timestamps. PortAudio provides callback timestamps to support this. In
P.S. Mac OS has a component called "aggregate devices" that lets the
user set up a virtual device that performs the fusion. On other
platforms this is something that you need to implement.
Post by Leif Asbrink
Hello Ross and Jean-Michaël,
one can use a fractional resampler to support duplex
between any two devices. This is what we do in SDR (Software
Defined Radio.) Receiver input can be a soundcard, an
USB dongle (rtlsdr) or some other unit. Could be USB,
Ethernet or something else with sampling rates typically
in the range 48 kHz to 40 MHz. Output would typically be
a soundcard at one of the standard sampling rates feeding
Here is a video showing the transmit side in Linrad with
a microphone to one soundcard and and the output of another
soundcard feeds the microphone input of a IC706 transceiver.
Linrad can run two duplex streams at the same time.
Typically a Delta 44 for Rx input, the motherboard
soundcard for Rx loudspeaker output. For Tx microphone
input would be the motherboard soundcard and for Tx
output the Delta44.
For output it is essential to use Portaudio to avoid
the horrible latency of Windows MME drivers. ASIO for
a Delta44 and WDM-KS or WASAPI for the motherboard.
For input it is better to use the MME drivers directly.
Both duplex streams use independent fractional resamplers.
The trick is to monitor the total number of samples that
reside in buffers between input and output. Typically
the corresponding time is not quite constant because
soundcards are a little different from their nominal
sampling frequencies. It is not difficult to adjust
the resampling rate of the fractional resampler for
the total time delay from input to output to become
This video shows a Softrock transceiver. It is a small
At 16:20 in the video you can see Rx setup, a Delta44
to digitize the audio to which the antenna signal is
converted and an Intel soundcard for the loudspeaker
output. Then comes the transmitter soundcard setup.
The video is showing Linux, but it works the same way
under Windows where Portaudio has to be selected for
the outputs to avoid excessive latency.
Post by Ross Bencina
Does PA support duplex between different devices on windows ?
With ASIO, MME, WASAPI... I could not find in the doc.
ASIO: No. I'd like to support it but it requires some rework to bypass
the ASIO SDK limitation of on driver at a time.
MME: Yes, but all devices must share the same word clock, otherwise
clock drift will cause the stream to become unstable.
WASAPI: I don't know. Maybe someone else knows? You could look at the
source code, or try it and see.
Portaudio mailing list
Portaudio mailing list