andrewrk / libsoundio

C library for cross-platform real-time audio input and output
http://libsound.io/
MIT License
1.92k stars 229 forks source link

Unable to pause WASAPI output stream from callback #235

Open maximumspatium opened 4 years ago

maximumspatium commented 4 years ago

As the title says, I'm trying to pause a sound output stream from the callback.

The corresponding code is here: https://github.com/dingusdev/dingusppc/blob/ba81094fa278cfa3c59b9996f307e05c2109e845/devices/awacs.cpp#L179-L187

The above code works flawlessly with CoreAudio.

When running it with the WASAPI backend, soundio_outstream_pause() seems to have no effect. libsoundio continues to invoke the callback at infinitum.

The ability to pause a stream when data is exhausted is a requirement for us.

We're emulating a vintage sound DMA that should go idle when there is no more data. An operating system that runs in another thread polls the internal state of the DMA channel and blocks as long as the DMA channel is active.

Is there a possibility to make it work with WASAPI?

shangjiaxuan commented 4 years ago

This seems easy to fix. Look at this pull #231, it also addresses some problems with wasapi and has a smaller default buffer size for less default latency.

Or you may look at the outstream_shared_run function and add a check for pause before calling the write callback and see if the problem persists.