shithub: cstory

Download patch

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;
 }
--