Change the audio backend API
Removes locking and unlocking: instead, samples are passed to Create.
This commit is contained in:
parent
40d0cf14f1
commit
5daea02ac6
7 changed files with 24 additions and 71 deletions
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue