summaryrefslogtreecommitdiffhomepage
path: root/src/raudio.c
diff options
context:
space:
mode:
authorraysan5 <[email protected]>2021-02-07 19:20:30 +0100
committerraysan5 <[email protected]>2021-02-07 19:20:30 +0100
commitc49ce58f02c37ff08574afb1b6847f300c55ca50 (patch)
treeeefb7de08203f7f9e756f6d4578bb17a598a3ee8 /src/raudio.c
parentb2215cf017a98efa8896b95038a2aaba7369cb43 (diff)
downloadraylib-c49ce58f02c37ff08574afb1b6847f300c55ca50.tar.gz
raylib-c49ce58f02c37ff08574afb1b6847f300c55ca50.zip
REVIEWED: Multichannel sound system #1548
I don't like this solution but I think it's valid in the meantime....
Diffstat (limited to 'src/raudio.c')
-rw-r--r--src/raudio.c49
1 files changed, 22 insertions, 27 deletions
diff --git a/src/raudio.c b/src/raudio.c
index 0c3169ea..854e2145 100644
--- a/src/raudio.c
+++ b/src/raudio.c
@@ -367,9 +367,6 @@ static void OnLog(ma_context *pContext, ma_device *pDevice, ma_uint32 logLevel,
static void OnSendAudioDataToDevice(ma_device *pDevice, void *pFramesOut, const void *pFramesInput, ma_uint32 frameCount);
static void MixAudioFrames(float *framesOut, const float *framesIn, ma_uint32 frameCount, float localVolume);
-static void InitAudioBufferPool(void); // Initialise the multichannel buffer pool
-static void CloseAudioBufferPool(void); // Close the audio buffers pool
-
#if defined(SUPPORT_FILEFORMAT_WAV)
static Wave LoadWAV(const unsigned char *fileData, unsigned int fileSize); // Load WAV file
static int SaveWAV(Wave wave, const char *fileName); // Save wave data as WAV file
@@ -468,6 +465,14 @@ void InitAudioDevice(void)
ma_context_uninit(&AUDIO.System.context);
return;
}
+
+ // Init dummy audio buffers pool for multichannel sound playing
+ for (int i = 0; i < MAX_AUDIO_BUFFER_POOL_CHANNELS; i++)
+ {
+ // WARNING: An empty audioBuffer is created (data = 0)
+ // AudioBuffer data just points to loaded sound data
+ AUDIO.MultiChannel.pool[i] = LoadAudioBuffer(AUDIO_DEVICE_FORMAT, AUDIO_DEVICE_CHANNELS, AUDIO_DEVICE_SAMPLE_RATE, 0, AUDIO_BUFFER_USAGE_STATIC);
+ }
TRACELOG(LOG_INFO, "AUDIO: Device initialized successfully");
TRACELOG(LOG_INFO, " > Backend: miniaudio / %s", ma_get_backend_name(AUDIO.System.context.backend));
@@ -476,8 +481,6 @@ void InitAudioDevice(void)
TRACELOG(LOG_INFO, " > Sample rate: %d -> %d", AUDIO.System.device.sampleRate, AUDIO.System.device.playback.internalSampleRate);
TRACELOG(LOG_INFO, " > Periods size: %d", AUDIO.System.device.playback.internalPeriodSizeInFrames*AUDIO.System.device.playback.internalPeriods);
- InitAudioBufferPool();
-
AUDIO.System.isReady = true;
}
@@ -486,12 +489,24 @@ void CloseAudioDevice(void)
{
if (AUDIO.System.isReady)
{
+ // Unload dummy audio buffers pool
+ // WARNING: They can be pointing to already unloaded data
+ for (int i = 0; i < MAX_AUDIO_BUFFER_POOL_CHANNELS; i++)
+ {
+ //UnloadAudioBuffer(AUDIO.MultiChannel.pool[i]);
+ if (AUDIO.MultiChannel.pool[i] != NULL)
+ {
+ ma_data_converter_uninit(&AUDIO.MultiChannel.pool[i]->converter);
+ UntrackAudioBuffer(AUDIO.MultiChannel.pool[i]);
+ //RL_FREE(buffer->data); // Already unloaded by UnloadSound()
+ RL_FREE(AUDIO.MultiChannel.pool[i]);
+ }
+ }
+
ma_mutex_uninit(&AUDIO.System.lock);
ma_device_uninit(&AUDIO.System.device);
ma_context_uninit(&AUDIO.System.context);
- CloseAudioBufferPool();
-
AUDIO.System.isReady = false;
TRACELOG(LOG_INFO, "AUDIO: Device closed successfully");
@@ -1909,26 +1924,6 @@ static void MixAudioFrames(float *framesOut, const float *framesIn, ma_uint32 fr
}
}
-// Initialise the multichannel buffer pool
-static void InitAudioBufferPool(void)
-{
- // Dummy buffers
- for (int i = 0; i < MAX_AUDIO_BUFFER_POOL_CHANNELS; i++)
- {
- // WARNING: An empty audioBuffer is created (data = 0)
- AUDIO.MultiChannel.pool[i] = LoadAudioBuffer(AUDIO_DEVICE_FORMAT, AUDIO_DEVICE_CHANNELS, AUDIO_DEVICE_SAMPLE_RATE, 0, AUDIO_BUFFER_USAGE_STATIC);
- }
-
- // TODO: Verification required for log
- TRACELOG(LOG_INFO, "AUDIO: Multichannel pool size: %i", MAX_AUDIO_BUFFER_POOL_CHANNELS);
-}
-
-// Close the audio buffers pool
-static void CloseAudioBufferPool(void)
-{
- for (int i = 0; i < MAX_AUDIO_BUFFER_POOL_CHANNELS; i++) UnloadAudioBuffer(AUDIO.MultiChannel.pool[i]);
-}
-
#if defined(SUPPORT_FILEFORMAT_WAV)
// Load WAV file data into Wave structure
// NOTE: Using dr_wav library