ref: 5daea02ac693bcaa053fd099b0d238064ffcbdac
parent: 40d0cf14f1ea3f9c4ce56371fa74637628f4b877
author: Clownacy <Clownacy@users.noreply.github.com>
date: Mon Apr 6 15:44:45 EDT 2020
Change the audio backend API Removes locking and unlocking: instead, samples are passed to Create.
--- a/src/Backends/Audio.h
+++ b/src/Backends/Audio.h
@@ -9,11 +9,8 @@
BOOL AudioBackend_Init(void);
void AudioBackend_Deinit(void);
-AudioBackend_Sound* AudioBackend_CreateSound(unsigned int frequency, size_t frames);
+AudioBackend_Sound* AudioBackend_CreateSound(unsigned int frequency, const unsigned char *samples, size_t length);
void AudioBackend_DestroySound(AudioBackend_Sound *sound);
-
-unsigned char* AudioBackend_LockSound(AudioBackend_Sound *sound, size_t *size);
-void AudioBackend_UnlockSound(AudioBackend_Sound *sound);
void AudioBackend_PlaySound(AudioBackend_Sound *sound, BOOL looping);
void AudioBackend_StopSound(AudioBackend_Sound *sound);
--- a/src/Backends/Audio/SDL2.cpp
+++ b/src/Backends/Audio/SDL2.cpp
@@ -108,11 +108,11 @@
SDL_QuitSubSystem(SDL_INIT_AUDIO);
}
-AudioBackend_Sound* AudioBackend_CreateSound(unsigned int frequency, size_t frames)
+AudioBackend_Sound* AudioBackend_CreateSound(unsigned int frequency, const unsigned char *samples, size_t length)
{
SDL_LockAudioDevice(device_id);
- Mixer_Sound *sound = Mixer_CreateSound(frequency, frames);
+ Mixer_Sound *sound = Mixer_CreateSound(frequency, samples, length);
SDL_UnlockAudioDevice(device_id);
@@ -129,24 +129,6 @@
Mixer_DestroySound((Mixer_Sound*)sound);
SDL_UnlockAudioDevice(device_id);
-}
-
-unsigned char* AudioBackend_LockSound(AudioBackend_Sound *sound, size_t *size)
-{
- if (sound == NULL)
- return NULL;
-
- SDL_LockAudioDevice(device_id);
-
- return Mixer_LockSound((Mixer_Sound*)sound, size);
-}
-
-void AudioBackend_UnlockSound(AudioBackend_Sound *sound)
-{
- if (sound == NULL)
- return;
-
- SDL_UnlockAudioDevice(device_id);
}
void AudioBackend_PlaySound(AudioBackend_Sound *sound, BOOL looping)
--- a/src/Backends/Audio/SoftwareMixer.cpp
+++ b/src/Backends/Audio/SoftwareMixer.cpp
@@ -46,7 +46,7 @@
output_frequency = frequency;
}
-Mixer_Sound* Mixer_CreateSound(unsigned int frequency, size_t frames)
+Mixer_Sound* Mixer_CreateSound(unsigned int frequency, const unsigned char *samples, size_t length)
{
Mixer_Sound *sound = (Mixer_Sound*)malloc(sizeof(Mixer_Sound));
@@ -53,7 +53,7 @@
if (sound == NULL)
return NULL;
- sound->samples = (unsigned char*)malloc(frames + 1);
+ sound->samples = (unsigned char*)malloc(length + 1);
if (sound->samples == NULL)
{
@@ -61,7 +61,9 @@
return NULL;
}
- sound->frames = frames;
+ memcpy(sound->samples, samples, length);
+
+ sound->frames = length;
sound->playing = false;
sound->position = 0.0;
@@ -87,14 +89,6 @@
break;
}
}
-}
-
-unsigned char* Mixer_LockSound(Mixer_Sound *sound, size_t *size)
-{
- if (size != NULL)
- *size = sound->frames;
-
- return sound->samples;
}
void Mixer_PlaySound(Mixer_Sound *sound, bool looping)
--- a/src/Backends/Audio/SoftwareMixer.h
+++ b/src/Backends/Audio/SoftwareMixer.h
@@ -5,9 +5,8 @@
typedef struct Mixer_Sound Mixer_Sound;
void Mixer_Init(unsigned long frequency);
-Mixer_Sound* Mixer_CreateSound(unsigned int frequency, size_t frames);
+Mixer_Sound* Mixer_CreateSound(unsigned int frequency, const unsigned char *samples, size_t length);
void Mixer_DestroySound(Mixer_Sound *sound);
-unsigned char* Mixer_LockSound(Mixer_Sound *sound, size_t *size);
void Mixer_PlaySound(Mixer_Sound *sound, bool looping);
void Mixer_StopSound(Mixer_Sound *sound);
void Mixer_RewindSound(Mixer_Sound *sound);
--- a/src/Backends/Audio/miniaudio.cpp
+++ b/src/Backends/Audio/miniaudio.cpp
@@ -118,11 +118,11 @@
ma_device_uninit(&device);
}
-AudioBackend_Sound* AudioBackend_CreateSound(unsigned int frequency, size_t frames)
+AudioBackend_Sound* AudioBackend_CreateSound(unsigned int frequency, const unsigned char *samples, size_t length)
{
ma_mutex_lock(&mutex);
- Mixer_Sound *sound = Mixer_CreateSound(frequency, frames);
+ Mixer_Sound *sound = Mixer_CreateSound(frequency, samples, length);
ma_mutex_unlock(&mutex);
@@ -137,24 +137,6 @@
ma_mutex_lock(&mutex);
Mixer_DestroySound((Mixer_Sound*)sound);
-
- ma_mutex_unlock(&mutex);
-}
-
-unsigned char* AudioBackend_LockSound(AudioBackend_Sound *sound, size_t *size)
-{
- if (sound == NULL)
- return NULL;
-
- ma_mutex_lock(&mutex);
-
- return Mixer_LockSound((Mixer_Sound*)sound, size);
-}
-
-void AudioBackend_UnlockSound(AudioBackend_Sound *sound)
-{
- if (sound == NULL)
- return;
ma_mutex_unlock(&mutex);
}
--- a/src/Organya.cpp
+++ b/src/Organya.cpp
@@ -145,13 +145,12 @@
else
data_size = wave_size;
- lpORGANBUFFER[track][j][k] = AudioBackend_CreateSound(22050, data_size);
+ wp = (unsigned char*)malloc(data_size);
- if (lpORGANBUFFER[track][j][k] == NULL)
+ if (wp == NULL)
return FALSE;
// Get wave data
- wp = AudioBackend_LockSound(lpORGANBUFFER[track][j][k], NULL);
wp_sub = wp;
wav_tp = 0;
@@ -169,7 +168,13 @@
wp_sub++;
}
- AudioBackend_UnlockSound(lpORGANBUFFER[track][j][k]);
+ lpORGANBUFFER[track][j][k] = AudioBackend_CreateSound(22050, wp, data_size);
+
+ free(wp);
+
+ if (lpORGANBUFFER[track][j][k] == NULL)
+ return FALSE;
+
AudioBackend_RewindSound(lpORGANBUFFER[track][j][k]);
}
}
--- a/src/Sound.cpp
+++ b/src/Sound.cpp
@@ -275,11 +275,6 @@
++ptp_pointer;
}
- lpSECONDARYBUFFER[no] = AudioBackend_CreateSound(22050, sample_count);
-
- if (lpSECONDARYBUFFER[no] == NULL)
- return -1;
-
pcm_buffer = mixed_pcm_buffer = NULL;
pcm_buffer = (unsigned char*)malloc(sample_count);
@@ -331,17 +326,16 @@
mixed_pcm_buffer[0] = mixed_pcm_buffer[0];
mixed_pcm_buffer[sample_count - 1] = mixed_pcm_buffer[sample_count - 1];
- unsigned char *buffer = AudioBackend_LockSound(lpSECONDARYBUFFER[no], NULL);
+ lpSECONDARYBUFFER[no] = AudioBackend_CreateSound(22050, mixed_pcm_buffer, sample_count);
- memcpy(buffer, mixed_pcm_buffer, sample_count);
-
- AudioBackend_UnlockSound(lpSECONDARYBUFFER[no]);
-
if (pcm_buffer != NULL)
free(pcm_buffer);
if (mixed_pcm_buffer != NULL)
free(mixed_pcm_buffer);
+
+ if (lpSECONDARYBUFFER[no] == NULL)
+ return -1;
return sample_count;
}
--
⑨