Change the audio backend API

Removes locking and unlocking: instead, samples are passed to Create.
This commit is contained in:
Clownacy 2020-04-06 19:44:45 +01:00
parent 40d0cf14f1
commit 5daea02ac6
7 changed files with 24 additions and 71 deletions

View file

@ -9,12 +9,9 @@ typedef struct AudioBackend_Sound AudioBackend_Sound;
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);
void AudioBackend_RewindSound(AudioBackend_Sound *sound);

View file

@ -108,11 +108,11 @@ void AudioBackend_Deinit(void)
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);
@ -131,24 +131,6 @@ void AudioBackend_DestroySound(AudioBackend_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)
{
if (sound == NULL)

View file

@ -46,14 +46,14 @@ void Mixer_Init(unsigned long frequency)
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));
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 @@ Mixer_Sound* Mixer_CreateSound(unsigned int frequency, size_t frames)
return NULL;
}
sound->frames = frames;
memcpy(sound->samples, samples, length);
sound->frames = length;
sound->playing = false;
sound->position = 0.0;
@ -89,14 +91,6 @@ void Mixer_DestroySound(Mixer_Sound *sound)
}
}
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)
{
sound->playing = true;

View file

@ -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);

View file

@ -118,11 +118,11 @@ void AudioBackend_Deinit(void)
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);
@ -141,24 +141,6 @@ void AudioBackend_DestroySound(AudioBackend_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);
}
void AudioBackend_PlaySound(AudioBackend_Sound *sound, BOOL looping)
{
if (sound == NULL)

View file

@ -145,13 +145,12 @@ BOOL MakeSoundObject8(signed char *wavep, signed char track, signed char pipi)
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 @@ BOOL MakeSoundObject8(signed char *wavep, signed char track, signed char pipi)
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]);
}
}

View file

@ -275,11 +275,6 @@ int MakePixToneObject(const PIXTONEPARAMETER *ptp, int ptp_num, int no)
++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,11 +326,7 @@ int MakePixToneObject(const PIXTONEPARAMETER *ptp, int ptp_num, int no)
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);
memcpy(buffer, mixed_pcm_buffer, sample_count);
AudioBackend_UnlockSound(lpSECONDARYBUFFER[no]);
lpSECONDARYBUFFER[no] = AudioBackend_CreateSound(22050, mixed_pcm_buffer, sample_count);
if (pcm_buffer != NULL)
free(pcm_buffer);
@ -343,5 +334,8 @@ int MakePixToneObject(const PIXTONEPARAMETER *ptp, int ptp_num, int no)
if (mixed_pcm_buffer != NULL)
free(mixed_pcm_buffer);
if (lpSECONDARYBUFFER[no] == NULL)
return -1;
return sample_count;
}