Add user data to the audio stream callback
This commit is contained in:
parent
b98c4e031d
commit
9c2574a604
2 changed files with 15 additions and 4 deletions
16
src/raudio.c
16
src/raudio.c
|
|
@ -348,6 +348,7 @@ struct rAudioBuffer {
|
||||||
unsigned int converterResidualCount; // The number of valid frames sitting in converterResidual
|
unsigned int converterResidualCount; // The number of valid frames sitting in converterResidual
|
||||||
|
|
||||||
AudioCallback callback; // Audio buffer callback for buffer filling on audio threads
|
AudioCallback callback; // Audio buffer callback for buffer filling on audio threads
|
||||||
|
void* userData;
|
||||||
rAudioProcessor *processor; // Audio processor
|
rAudioProcessor *processor; // Audio processor
|
||||||
|
|
||||||
float volume; // Audio buffer volume
|
float volume; // Audio buffer volume
|
||||||
|
|
@ -374,6 +375,7 @@ struct rAudioBuffer {
|
||||||
// NOTE: Useful to apply effects to an AudioBuffer
|
// NOTE: Useful to apply effects to an AudioBuffer
|
||||||
struct rAudioProcessor {
|
struct rAudioProcessor {
|
||||||
AudioCallback process; // Processor callback function
|
AudioCallback process; // Processor callback function
|
||||||
|
void* userData;
|
||||||
rAudioProcessor *next; // Next audio processor on the list
|
rAudioProcessor *next; // Next audio processor on the list
|
||||||
rAudioProcessor *prev; // Previous audio processor on the list
|
rAudioProcessor *prev; // Previous audio processor on the list
|
||||||
};
|
};
|
||||||
|
|
@ -2255,11 +2257,17 @@ void SetAudioStreamBufferSizeDefault(int size)
|
||||||
|
|
||||||
// Audio thread callback to request new data
|
// Audio thread callback to request new data
|
||||||
void SetAudioStreamCallback(AudioStream stream, AudioCallback callback)
|
void SetAudioStreamCallback(AudioStream stream, AudioCallback callback)
|
||||||
|
{
|
||||||
|
SetAudioStreamCallbackEX(stream, callback, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetAudioStreamCallbackEX(AudioStream stream, AudioCallback callback, void* userData)
|
||||||
{
|
{
|
||||||
if (stream.buffer != NULL)
|
if (stream.buffer != NULL)
|
||||||
{
|
{
|
||||||
ma_mutex_lock(&AUDIO.System.lock);
|
ma_mutex_lock(&AUDIO.System.lock);
|
||||||
stream.buffer->callback = callback;
|
stream.buffer->callback = callback;
|
||||||
|
stream.buffer->userData = userData;
|
||||||
ma_mutex_unlock(&AUDIO.System.lock);
|
ma_mutex_unlock(&AUDIO.System.lock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2273,6 +2281,7 @@ void AttachAudioStreamProcessor(AudioStream stream, AudioCallback process)
|
||||||
|
|
||||||
rAudioProcessor *processor = (rAudioProcessor *)RL_CALLOC(1, sizeof(rAudioProcessor));
|
rAudioProcessor *processor = (rAudioProcessor *)RL_CALLOC(1, sizeof(rAudioProcessor));
|
||||||
processor->process = process;
|
processor->process = process;
|
||||||
|
processor->userData = stream.buffer->userData;
|
||||||
|
|
||||||
rAudioProcessor *last = stream.buffer->processor;
|
rAudioProcessor *last = stream.buffer->processor;
|
||||||
|
|
||||||
|
|
@ -2326,6 +2335,7 @@ void AttachAudioMixedProcessor(AudioCallback process)
|
||||||
|
|
||||||
rAudioProcessor *processor = (rAudioProcessor *)RL_CALLOC(1, sizeof(rAudioProcessor));
|
rAudioProcessor *processor = (rAudioProcessor *)RL_CALLOC(1, sizeof(rAudioProcessor));
|
||||||
processor->process = process;
|
processor->process = process;
|
||||||
|
processor->userData = NULL;
|
||||||
|
|
||||||
rAudioProcessor *last = AUDIO.mixedProcessor;
|
rAudioProcessor *last = AUDIO.mixedProcessor;
|
||||||
|
|
||||||
|
|
@ -2388,7 +2398,7 @@ static ma_uint32 ReadAudioBufferFramesInInternalFormat(AudioBuffer *audioBuffer,
|
||||||
// Using audio buffer callback
|
// Using audio buffer callback
|
||||||
if (audioBuffer->callback)
|
if (audioBuffer->callback)
|
||||||
{
|
{
|
||||||
audioBuffer->callback(framesOut, frameCount);
|
audioBuffer->callback(framesOut, frameCount, audioBuffer->userData);
|
||||||
audioBuffer->framesProcessed += frameCount;
|
audioBuffer->framesProcessed += frameCount;
|
||||||
|
|
||||||
return frameCount;
|
return frameCount;
|
||||||
|
|
@ -2603,7 +2613,7 @@ static void OnSendAudioDataToDevice(ma_device *pDevice, void *pFramesOut, const
|
||||||
rAudioProcessor *processor = audioBuffer->processor;
|
rAudioProcessor *processor = audioBuffer->processor;
|
||||||
while (processor)
|
while (processor)
|
||||||
{
|
{
|
||||||
processor->process(framesIn, framesJustRead);
|
processor->process(framesIn, framesJustRead, audioBuffer->userData);
|
||||||
processor = processor->next;
|
processor = processor->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2647,7 +2657,7 @@ static void OnSendAudioDataToDevice(ma_device *pDevice, void *pFramesOut, const
|
||||||
rAudioProcessor *processor = AUDIO.mixedProcessor;
|
rAudioProcessor *processor = AUDIO.mixedProcessor;
|
||||||
while (processor)
|
while (processor)
|
||||||
{
|
{
|
||||||
processor->process(pFramesOut, frameCount);
|
processor->process(pFramesOut, frameCount, processor->userData);
|
||||||
processor = processor->next;
|
processor = processor->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1744,6 +1744,7 @@ RLAPI void SetAudioStreamPitch(AudioStream stream, float pitch); // Set pit
|
||||||
RLAPI void SetAudioStreamPan(AudioStream stream, float pan); // Set pan for audio stream (-1.0 left, 0.0 center, 1.0 right)
|
RLAPI void SetAudioStreamPan(AudioStream stream, float pan); // Set pan for audio stream (-1.0 left, 0.0 center, 1.0 right)
|
||||||
RLAPI void SetAudioStreamBufferSizeDefault(int size); // Default size for new audio streams
|
RLAPI void SetAudioStreamBufferSizeDefault(int size); // Default size for new audio streams
|
||||||
RLAPI void SetAudioStreamCallback(AudioStream stream, AudioCallback callback); // Audio thread callback to request new data
|
RLAPI void SetAudioStreamCallback(AudioStream stream, AudioCallback callback); // Audio thread callback to request new data
|
||||||
|
RLAPI void SetAudioStreamCallbackEX(AudioStream stream, AudioCallback callback, void* userData); // Audio thread callback to request new data with user data
|
||||||
|
|
||||||
RLAPI void AttachAudioStreamProcessor(AudioStream stream, AudioCallback processor); // Attach audio stream processor to stream, receives frames x 2 samples as 'float' (stereo)
|
RLAPI void AttachAudioStreamProcessor(AudioStream stream, AudioCallback processor); // Attach audio stream processor to stream, receives frames x 2 samples as 'float' (stereo)
|
||||||
RLAPI void DetachAudioStreamProcessor(AudioStream stream, AudioCallback processor); // Detach audio stream processor from stream
|
RLAPI void DetachAudioStreamProcessor(AudioStream stream, AudioCallback processor); // Detach audio stream processor from stream
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue