Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix up PortAudio backend #7444

Open
wants to merge 24 commits into
base: master
Choose a base branch
from

Conversation

sakertooth
Copy link
Contributor

@sakertooth sakertooth commented Aug 11, 2024

Fixes a latency bug caused by suggesting the wrong (supposedly?) latency to PortAudio, which caused stuttering on certain occasions. We now fetch an appropriate latency for the device using PaDeviceInfo::defaultLowInputLatency and PaDeviceInfo::defaultLowOutputLatency.

Removes the m_stopped variable and stops the stream using only a return of paComplete in the audio callback and a call to Pa_StopStream to avoid potential conflicts.

Also cleaned up the code a bit. Moved the GUI specific widget code in the GUI namespace, completely removed the PortAudio v18 code, among other things.

Testing on Windows will be appreciated. I am curious to see if this fixed any issues relating to PortAudio for anyone else.

If PortAudio is not found, then nothing should be defined here anyways.
We should do this for any of the other applicable audio devices in the future (to encourage separation of GUI and Core).
Returning paComplete from the audio callback, as well as using our own stop variable may conflict in complex ways. One such example is if the stop boolean is set and the device is required to read the nullptr buffer when the audio FIFO thread is closing. Also, PortAudio's says using paComplete and paAbort is an alternative technique to calling Pa_StopStream, so using both isn't necessary and thus avoids streams being stopped or started unexpectedly.
@sakertooth sakertooth marked this pull request as draft August 12, 2024 16:18
Made a misunderstanding. Pa_StopStream requires that we return paComplete when we are done to tell it that no more new buffers are being rendered for now and it can play any pending audio buffers.
@sakertooth sakertooth marked this pull request as ready for review August 12, 2024 17:34
No need for AudioEngine::clip since PortAudio already clips the signal for us.
@sakertooth sakertooth changed the title Clean up PortAudio backend Fix up PortAudio backend Aug 12, 2024
Copy link

@Stivencambindo Stivencambindo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

que paso

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants