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);
|
BOOL AudioBackend_Init(void);
|
||||||
void AudioBackend_Deinit(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);
|
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_PlaySound(AudioBackend_Sound *sound, BOOL looping);
|
||||||
void AudioBackend_StopSound(AudioBackend_Sound *sound);
|
void AudioBackend_StopSound(AudioBackend_Sound *sound);
|
||||||
void AudioBackend_RewindSound(AudioBackend_Sound *sound);
|
void AudioBackend_RewindSound(AudioBackend_Sound *sound);
|
||||||
|
|
|
@ -108,11 +108,11 @@ void AudioBackend_Deinit(void)
|
||||||
SDL_QuitSubSystem(SDL_INIT_AUDIO);
|
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);
|
SDL_LockAudioDevice(device_id);
|
||||||
|
|
||||||
Mixer_Sound *sound = Mixer_CreateSound(frequency, frames);
|
Mixer_Sound *sound = Mixer_CreateSound(frequency, samples, length);
|
||||||
|
|
||||||
SDL_UnlockAudioDevice(device_id);
|
SDL_UnlockAudioDevice(device_id);
|
||||||
|
|
||||||
|
@ -131,24 +131,6 @@ void AudioBackend_DestroySound(AudioBackend_Sound *sound)
|
||||||
SDL_UnlockAudioDevice(device_id);
|
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)
|
void AudioBackend_PlaySound(AudioBackend_Sound *sound, BOOL looping)
|
||||||
{
|
{
|
||||||
if (sound == NULL)
|
if (sound == NULL)
|
||||||
|
|
|
@ -46,14 +46,14 @@ void Mixer_Init(unsigned long frequency)
|
||||||
output_frequency = 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));
|
Mixer_Sound *sound = (Mixer_Sound*)malloc(sizeof(Mixer_Sound));
|
||||||
|
|
||||||
if (sound == NULL)
|
if (sound == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
sound->samples = (unsigned char*)malloc(frames + 1);
|
sound->samples = (unsigned char*)malloc(length + 1);
|
||||||
|
|
||||||
if (sound->samples == NULL)
|
if (sound->samples == NULL)
|
||||||
{
|
{
|
||||||
|
@ -61,7 +61,9 @@ Mixer_Sound* Mixer_CreateSound(unsigned int frequency, size_t frames)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
sound->frames = frames;
|
memcpy(sound->samples, samples, length);
|
||||||
|
|
||||||
|
sound->frames = length;
|
||||||
sound->playing = false;
|
sound->playing = false;
|
||||||
sound->position = 0.0;
|
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)
|
void Mixer_PlaySound(Mixer_Sound *sound, bool looping)
|
||||||
{
|
{
|
||||||
sound->playing = true;
|
sound->playing = true;
|
||||||
|
|
|
@ -5,9 +5,8 @@
|
||||||
typedef struct Mixer_Sound Mixer_Sound;
|
typedef struct Mixer_Sound Mixer_Sound;
|
||||||
|
|
||||||
void Mixer_Init(unsigned long frequency);
|
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);
|
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_PlaySound(Mixer_Sound *sound, bool looping);
|
||||||
void Mixer_StopSound(Mixer_Sound *sound);
|
void Mixer_StopSound(Mixer_Sound *sound);
|
||||||
void Mixer_RewindSound(Mixer_Sound *sound);
|
void Mixer_RewindSound(Mixer_Sound *sound);
|
||||||
|
|
|
@ -118,11 +118,11 @@ void AudioBackend_Deinit(void)
|
||||||
ma_device_uninit(&device);
|
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);
|
ma_mutex_lock(&mutex);
|
||||||
|
|
||||||
Mixer_Sound *sound = Mixer_CreateSound(frequency, frames);
|
Mixer_Sound *sound = Mixer_CreateSound(frequency, samples, length);
|
||||||
|
|
||||||
ma_mutex_unlock(&mutex);
|
ma_mutex_unlock(&mutex);
|
||||||
|
|
||||||
|
@ -141,24 +141,6 @@ void AudioBackend_DestroySound(AudioBackend_Sound *sound)
|
||||||
ma_mutex_unlock(&mutex);
|
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)
|
void AudioBackend_PlaySound(AudioBackend_Sound *sound, BOOL looping)
|
||||||
{
|
{
|
||||||
if (sound == NULL)
|
if (sound == NULL)
|
||||||
|
|
|
@ -145,13 +145,12 @@ BOOL MakeSoundObject8(signed char *wavep, signed char track, signed char pipi)
|
||||||
else
|
else
|
||||||
data_size = wave_size;
|
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;
|
return FALSE;
|
||||||
|
|
||||||
// Get wave data
|
// Get wave data
|
||||||
wp = AudioBackend_LockSound(lpORGANBUFFER[track][j][k], NULL);
|
|
||||||
wp_sub = wp;
|
wp_sub = wp;
|
||||||
wav_tp = 0;
|
wav_tp = 0;
|
||||||
|
|
||||||
|
@ -169,7 +168,13 @@ BOOL MakeSoundObject8(signed char *wavep, signed char track, signed char pipi)
|
||||||
wp_sub++;
|
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]);
|
AudioBackend_RewindSound(lpORGANBUFFER[track][j][k]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -275,11 +275,6 @@ int MakePixToneObject(const PIXTONEPARAMETER *ptp, int ptp_num, int no)
|
||||||
++ptp_pointer;
|
++ptp_pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
lpSECONDARYBUFFER[no] = AudioBackend_CreateSound(22050, sample_count);
|
|
||||||
|
|
||||||
if (lpSECONDARYBUFFER[no] == NULL)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
pcm_buffer = mixed_pcm_buffer = NULL;
|
pcm_buffer = mixed_pcm_buffer = NULL;
|
||||||
|
|
||||||
pcm_buffer = (unsigned char*)malloc(sample_count);
|
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[0] = mixed_pcm_buffer[0];
|
||||||
mixed_pcm_buffer[sample_count - 1] = mixed_pcm_buffer[sample_count - 1];
|
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)
|
if (pcm_buffer != NULL)
|
||||||
free(pcm_buffer);
|
free(pcm_buffer);
|
||||||
|
@ -343,5 +334,8 @@ int MakePixToneObject(const PIXTONEPARAMETER *ptp, int ptp_num, int no)
|
||||||
if (mixed_pcm_buffer != NULL)
|
if (mixed_pcm_buffer != NULL)
|
||||||
free(mixed_pcm_buffer);
|
free(mixed_pcm_buffer);
|
||||||
|
|
||||||
|
if (lpSECONDARYBUFFER[no] == NULL)
|
||||||
|
return -1;
|
||||||
|
|
||||||
return sample_count;
|
return sample_count;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue