mirror of
https://github.com/cookiengineer/audacity
synced 2025-10-25 07:43:54 +02:00
Put callback in a member function, remove many more gAudioIO->
This commit is contained in:
@@ -169,12 +169,47 @@ struct TransportTracks {
|
||||
// which seems not to implement the notes-off message correctly.
|
||||
#define AUDIO_IO_GB_MIDI_WORKAROUND
|
||||
|
||||
/** brief The function which is called from PortAudio's callback thread
|
||||
* context to collect and deliver audio for / from the sound device.
|
||||
*
|
||||
* This covers recording, playback, and doing both simultaneously. It is
|
||||
* also invoked to do monitoring and software playthrough. Note that dealing
|
||||
* with the two buffers needs some care to ensure that the right things
|
||||
* happen for all possible cases.
|
||||
* @param inputBuffer Buffer of length framesPerBuffer containing samples
|
||||
* from the sound card, or null if not capturing audio. Note that the data
|
||||
* type will depend on the format of audio data that was chosen when the
|
||||
* stream was created (so could be floats or various integers)
|
||||
* @param outputBuffer Uninitialised buffer of length framesPerBuffer which
|
||||
* will be sent to the sound card after the callback, or null if not playing
|
||||
* audio back.
|
||||
* @param framesPerBuffer The length of the playback and recording buffers
|
||||
* @param PaStreamCallbackTimeInfo Pointer to PortAudio time information
|
||||
* structure, which tells us how long we have been playing / recording
|
||||
* @param statusFlags PortAudio stream status flags
|
||||
* @param userData pointer to user-defined data structure. Provided for
|
||||
* flexibility by PortAudio, but not used by Audacity - the data is stored in
|
||||
* the AudioIO class instead.
|
||||
*/
|
||||
int audacityAudioCallback(
|
||||
const void *inputBuffer, void *outputBuffer,
|
||||
unsigned long framesPerBuffer,
|
||||
const PaStreamCallbackTimeInfo *timeInfo,
|
||||
PaStreamCallbackFlags statusFlags, void *userData );
|
||||
|
||||
class AUDACITY_DLL_API AudioIO final {
|
||||
|
||||
public:
|
||||
AudioIO();
|
||||
~AudioIO();
|
||||
|
||||
// This function executes in a thread spawned by the PortAudio library
|
||||
int AudioCallback(
|
||||
const void *inputBuffer, void *outputBuffer,
|
||||
unsigned long framesPerBuffer,
|
||||
const PaStreamCallbackTimeInfo *timeInfo,
|
||||
const PaStreamCallbackFlags statusFlags, void *userData);
|
||||
|
||||
AudioIOListener* GetListener() { return mListener; }
|
||||
void SetListener(AudioIOListener* listener);
|
||||
|
||||
@@ -780,34 +815,6 @@ private:
|
||||
static double mCachedBestRateIn;
|
||||
static double mCachedBestRateOut;
|
||||
|
||||
/** brief The function which is called from PortAudio's callback thread
|
||||
* context to collect and deliver audio for / from the sound device.
|
||||
*
|
||||
* This covers recording, playback, and doing both simultaneously. It is
|
||||
* also invoked to do monitoring and software playthrough. Note that dealing
|
||||
* with the two buffers needs some care to ensure that the right things
|
||||
* happen for all possible cases.
|
||||
* @param inputBuffer Buffer of length framesPerBuffer containing samples
|
||||
* from the sound card, or null if not capturing audio. Note that the data
|
||||
* type will depend on the format of audio data that was chosen when the
|
||||
* stream was created (so could be floats or various integers)
|
||||
* @param outputBuffer Uninitialised buffer of length framesPerBuffer which
|
||||
* will be sent to the sound card after the callback, or null if not playing
|
||||
* audio back.
|
||||
* @param framesPerBuffer The length of the playback and recording buffers
|
||||
* @param PaStreamCallbackTimeInfo Pointer to PortAudio time information
|
||||
* structure, which tells us how long we have been playing / recording
|
||||
* @param statusFlags PortAudio stream status flags
|
||||
* @param userData pointer to user-defined data structure. Provided for
|
||||
* flexibility by PortAudio, but not used by Audacity - the data is stored in
|
||||
* the AudioIO class instead.
|
||||
*/
|
||||
friend int audacityAudioCallback(
|
||||
const void *inputBuffer, void *outputBuffer,
|
||||
unsigned long framesPerBuffer,
|
||||
const PaStreamCallbackTimeInfo *timeInfo,
|
||||
PaStreamCallbackFlags statusFlags, void *userData );
|
||||
|
||||
// Serialize main thread and PortAudio thread's attempts to pause and change
|
||||
// the state used by the third, Audio thread.
|
||||
wxMutex mSuspendAudioThread;
|
||||
|
||||
Reference in New Issue
Block a user