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 PortAudio backend #7444

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

Conversation

sakertooth
Copy link
Contributor

@sakertooth sakertooth commented Aug 11, 2024

Applies various changes in an attempt to resolve certain issues with the PortAudio backend and improve the quality of the code.

Intended to fix #5383.

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

@bratpeki
Copy link
Member

How does one test this? Should I play two demo tracks and look at the latency?

@bratpeki
Copy link
Member

bratpeki commented Jan 16, 2025

Here's my config, @sakertooth, with recent files and directory paths obscured:

<?xml version="1.0"?>
<!DOCTYPE lmms-config-file>
<lmms version="1.3.0-alpha.1.740+g303215f8b" configversion="3">
  <MidiJack device="lmms"/>
  <app loopmarkermode="dual" nanhandler="1" openlastproject="0" nommpz="0" sololegacybehavior="0" configured="1" displaydbfs="1" disablebackup="0" language="sr"/>
  <audioengine mididev="WinMM MIDI" framesperaudiobuffer="256" audiodev="SDL (Simple DirectMedia Layer)"/>
  <audiojack clientname="lmms" channels="2"/>
  <audioportaudio backend="" device=""/>
  <audiosdl inputdevice="" device=""/>
  <midi midiautoassign="none" autoquantize="0"/>
  <paths ladspadir="..." workingdir="..." stkdir="data:/stk/rawwaves/" defaultsf2="..." sf2dir="..." vstdir="..." theme="data:/themes/default/" backgroundtheme="" gigdir="..."/>
  <tooltips disabled="0"/>
  <ui saveinterval="2" enablerunningautosave="0" displaywaveform="1" vstembedmethod="none" animateafp="1" smoothscroll="0" sidebaronright="0" trackdeletionwarning="0" printnotelabels="1" mixerchanneldeletionwarning="1" compacttrackbuttons="0" disableautoquit="0" vstalwaysontop="0" oneinstrumenttrackwindow="0" enableautosave="0" letpreviewsfinish="0"/>
  <recentfiles>
  ...
  </recentfiles>
</lmms>

@bratpeki bratpeki self-assigned this Jan 19, 2025
@sakertooth sakertooth changed the title Fix up PortAudio backend Fix PortAudio backend Jan 31, 2025
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.

WDM-KS not working (Windows platform)
3 participants