REVIEWED: Multichannel sound system #1548
I don't like this solution but I think it's valid in the meantime....
This commit is contained in:
parent
b2215cf017
commit
c49ce58f02
1 changed files with 22 additions and 27 deletions
49
src/raudio.c
49
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 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 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)
|
#if defined(SUPPORT_FILEFORMAT_WAV)
|
||||||
static Wave LoadWAV(const unsigned char *fileData, unsigned int fileSize); // Load WAV file
|
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
|
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);
|
ma_context_uninit(&AUDIO.System.context);
|
||||||
return;
|
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, "AUDIO: Device initialized successfully");
|
||||||
TRACELOG(LOG_INFO, " > Backend: miniaudio / %s", ma_get_backend_name(AUDIO.System.context.backend));
|
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, " > 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);
|
TRACELOG(LOG_INFO, " > Periods size: %d", AUDIO.System.device.playback.internalPeriodSizeInFrames*AUDIO.System.device.playback.internalPeriods);
|
||||||
|
|
||||||
InitAudioBufferPool();
|
|
||||||
|
|
||||||
AUDIO.System.isReady = true;
|
AUDIO.System.isReady = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -486,12 +489,24 @@ void CloseAudioDevice(void)
|
||||||
{
|
{
|
||||||
if (AUDIO.System.isReady)
|
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_mutex_uninit(&AUDIO.System.lock);
|
||||||
ma_device_uninit(&AUDIO.System.device);
|
ma_device_uninit(&AUDIO.System.device);
|
||||||
ma_context_uninit(&AUDIO.System.context);
|
ma_context_uninit(&AUDIO.System.context);
|
||||||
|
|
||||||
CloseAudioBufferPool();
|
|
||||||
|
|
||||||
AUDIO.System.isReady = false;
|
AUDIO.System.isReady = false;
|
||||||
|
|
||||||
TRACELOG(LOG_INFO, "AUDIO: Device closed successfully");
|
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)
|
#if defined(SUPPORT_FILEFORMAT_WAV)
|
||||||
// Load WAV file data into Wave structure
|
// Load WAV file data into Wave structure
|
||||||
// NOTE: Using dr_wav library
|
// NOTE: Using dr_wav library
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue