diff --git a/src/Audio.c b/src/Audio.c index 76f36f366..84793bd78 100644 --- a/src/Audio.c +++ b/src/Audio.c @@ -300,7 +300,7 @@ static cc_result Music_Buffer(struct AudioChunk* chunk, int maxSamples, struct V } chunk->size = samples * 2; - res2 = Audio_QueueChunk(&music_ctx, chunk); + res2 = StreamContext_Enqueue(&music_ctx, chunk); if (res2) { music_stopping = true; return res2; } return res; } @@ -330,7 +330,7 @@ static cc_result Music_PlayOgg(struct Stream* source) { channels = vorbis->channels; sampleRate = vorbis->sampleRate; - if ((res = Audio_SetFormat(&music_ctx, channels, sampleRate, 100))) goto cleanup; + if ((res = StreamContext_SetFormat(&music_ctx, channels, sampleRate, 100))) goto cleanup; /* largest possible vorbis frame decodes to blocksize1 * channels samples, */ /* so can end up decoding slightly over a second of audio */ @@ -348,7 +348,7 @@ static cc_result Music_PlayOgg(struct Stream* source) { } if (music_stopping) goto cleanup; - res = Audio_Play(&music_ctx); + res = StreamContext_Play(&music_ctx); if (res) goto cleanup; cur = 0; @@ -357,11 +357,11 @@ static cc_result Music_PlayOgg(struct Stream* source) { /* Don't play music while in the background on Android */ /* TODO: Not use such a terrible approach */ if (!Window_Main.Handle.ptr || Window_Main.Inactive) { - Audio_Pause(&music_ctx); + StreamContext_Pause(&music_ctx); while ((!Window_Main.Handle.ptr || Window_Main.Inactive) && !music_stopping) { Thread_Sleep(10); continue; } - Audio_Play(&music_ctx); + StreamContext_Play(&music_ctx); } #endif if (volume != Audio_MusicVolume) { @@ -369,7 +369,7 @@ static cc_result Music_PlayOgg(struct Stream* source) { Audio_SetVolume(&music_ctx, volume); } - res = Audio_Poll(&music_ctx, &inUse); + res = StreamContext_Update(&music_ctx, &inUse); if (res) { music_stopping = true; break; } if (inUse >= AUDIO_MAX_BUFFERS) { @@ -391,7 +391,7 @@ static cc_result Music_PlayOgg(struct Stream* source) { } else { /* Wait until the buffers finished playing */ for (;;) { - if (Audio_Poll(&music_ctx, &inUse) || inUse == 0) break; + if (StreamContext_Update(&music_ctx, &inUse) || inUse == 0) break; Thread_Sleep(10); } } diff --git a/src/Audio.h b/src/Audio.h index 01fe1ef23..93853b05c 100644 --- a/src/Audio.h +++ b/src/Audio.h @@ -64,22 +64,8 @@ void AudioBackend_LoadSounds(void); cc_result Audio_Init(struct AudioContext* ctx, int buffers); /* Stops any playing audio and then frees the audio context. */ void Audio_Close(struct AudioContext* ctx); -/* Sets the format of the audio data to be played. */ -/* NOTE: Changing the format can be expensive, depending on the backend. */ -cc_result Audio_SetFormat(struct AudioContext* ctx, int channels, int sampleRate, int playbackRate); /* Sets the volume audio data is played at */ void Audio_SetVolume(struct AudioContext* ctx, int volume); -/* Queues the given audio chunk for playing. */ -/* NOTE: You MUST ensure Audio_Poll indicates a buffer is free before calling this. */ -/* NOTE: Some backends directly read from the chunk data - therefore you MUST NOT modify it */ -cc_result Audio_QueueChunk(struct AudioContext* ctx, struct AudioChunk* chunk); -/* Begins playing audio. Audio_QueueChunk must have been used before this. */ -cc_result Audio_Play(struct AudioContext* ctx); -/* Polls the audio context and then potentially unqueues buffer */ -/* Returns the number of buffers being played or queued */ -/* (e.g. if inUse is 0, no audio buffers are being played or queued) */ -cc_result Audio_Poll(struct AudioContext* ctx, int* inUse); -cc_result Audio_Pause(struct AudioContext* ctx); /* Outputs more detailed information about errors with audio. */ cc_bool Audio_DescribeError(cc_result res, cc_string* dst); @@ -95,6 +81,26 @@ cc_result AudioPool_Play(struct AudioData* data); void AudioPool_Close(void); +/*########################################################################################################################* +*------------------------------------------------------Stream context-----------------------------------------------------* +*#########################################################################################################################*/ +/* Sets the format of the audio data to be played. */ +/* NOTE: Changing the format can be expensive, depending on the backend. */ +cc_result StreamContext_SetFormat(struct AudioContext* ctx, int channels, int sampleRate, int playbackRate); +/* Queues the given audio chunk for playing. */ +/* NOTE: You MUST ensure StreamContext_Update indicates a buffer is free before calling this. */ +/* NOTE: Some backends directly read from the chunk data - therefore you MUST NOT modify it */ +cc_result StreamContext_Enqueue(struct AudioContext* ctx, struct AudioChunk* chunk); +/* Begins playing audio. StreamContext_Enqueue must have been used before this. */ +cc_result StreamContext_Play(struct AudioContext* ctx); +/* Temporarily pauses playing audio. Can be resumed again using StreamContext_Play. */ +cc_result StreamContext_Pause(struct AudioContext* ctx); +/* Updates the audio context and then potentially unqueues buffer */ +/* Returns the number of buffers in use (i.e. being played or queued to play) */ +/* (e.g. if inUse is 0, no audio buffers are being played or queued) */ +cc_result StreamContext_Update(struct AudioContext* ctx, int* inUse); + + /*########################################################################################################################* *------------------------------------------------------Sound context------------------------------------------------------* *#########################################################################################################################*/ diff --git a/src/Audio_3DS.c b/src/Audio_3DS.c index 9dcb6422d..69d28a4dc 100644 --- a/src/Audio_3DS.c +++ b/src/Audio_3DS.c @@ -128,6 +128,54 @@ cc_result Audio_Poll(struct AudioContext* ctx, int* inUse) { } +/*########################################################################################################################* +*------------------------------------------------------Stream context-----------------------------------------------------* +*#########################################################################################################################*/ +cc_result StreamContext_SetFormat(struct AudioContext* ctx, int channels, int sampleRate, int playbackRate) { + return Audio_SetFormat(ctx, channels, sampleRate, playbackRate); +} + +cc_result StreamContext_Enqueue(struct AudioContext* ctx, struct AudioChunk* chunk) { + return Audio_QueueChunk(ctx, chunk); +} + +cc_result StreamContext_Play(struct AudioContext* ctx) { + return Audio_Play(ctx); +} + +cc_result StreamContext_Pause(struct AudioContext* ctx) { + return Audio_Pause(ctx); +} + +cc_result StreamContext_Update(struct AudioContext* ctx, int* inUse) { + return Audio_Poll(ctx, inUse); +} + + +/*########################################################################################################################* +*------------------------------------------------------Stream context-----------------------------------------------------* +*#########################################################################################################################*/ +cc_result StreamContext_SetFormat(struct AudioContext* ctx, int channels, int sampleRate, int playbackRate) { + return Audio_SetFormat(ctx, channels, sampleRate, playbackRate); +} + +cc_result StreamContext_Enqueue(struct AudioContext* ctx, struct AudioChunk* chunk) { + return Audio_QueueChunk(ctx, chunk); +} + +cc_result StreamContext_Play(struct AudioContext* ctx) { + return Audio_Play(ctx); +} + +cc_result StreamContext_Pause(struct AudioContext* ctx) { + return Audio_Pause(ctx); +} + +cc_result StreamContext_Update(struct AudioContext* ctx, int* inUse) { + return Audio_Poll(ctx, inUse); +} + + /*########################################################################################################################* *------------------------------------------------------Sound context------------------------------------------------------* *#########################################################################################################################*/ @@ -137,7 +185,6 @@ cc_bool SoundContext_FastPlay(struct AudioContext* ctx, struct AudioData* data) cc_result SoundContext_PlayData(struct AudioContext* ctx, struct AudioData* data) { cc_result res; - Audio_SetVolume(ctx, data->volume); if ((res = Audio_SetFormat(ctx, data->channels, data->sampleRate, data->rate))) return res; if ((res = Audio_QueueChunk(ctx, &data->chunk))) return res; diff --git a/src/Audio_Dreamcast.c b/src/Audio_Dreamcast.c index e64fb69be..850e75dd6 100644 --- a/src/Audio_Dreamcast.c +++ b/src/Audio_Dreamcast.c @@ -135,6 +135,30 @@ cc_result Audio_Poll(struct AudioContext* ctx, int* inUse) { } +/*########################################################################################################################* +*------------------------------------------------------Stream context-----------------------------------------------------* +*#########################################################################################################################*/ +cc_result StreamContext_SetFormat(struct AudioContext* ctx, int channels, int sampleRate, int playbackRate) { + return Audio_SetFormat(ctx, channels, sampleRate, playbackRate); +} + +cc_result StreamContext_Enqueue(struct AudioContext* ctx, struct AudioChunk* chunk) { + return Audio_QueueChunk(ctx, chunk); +} + +cc_result StreamContext_Play(struct AudioContext* ctx) { + return Audio_Play(ctx); +} + +cc_result StreamContext_Pause(struct AudioContext* ctx) { + return Audio_Pause(ctx); +} + +cc_result StreamContext_Update(struct AudioContext* ctx, int* inUse) { + return Audio_Poll(ctx, inUse); +} + + /*########################################################################################################################* *------------------------------------------------------Sound context------------------------------------------------------* *#########################################################################################################################*/ @@ -144,7 +168,6 @@ cc_bool SoundContext_FastPlay(struct AudioContext* ctx, struct AudioData* data) cc_result SoundContext_PlayData(struct AudioContext* ctx, struct AudioData* data) { cc_result res; - Audio_SetVolume(ctx, data->volume); if ((res = Audio_SetFormat(ctx, data->channels, data->sampleRate, data->rate))) return res; if ((res = Audio_QueueChunk(ctx, &data->chunk))) return res; diff --git a/src/Audio_GCWii.c b/src/Audio_GCWii.c index d141e983f..eb92c3d92 100644 --- a/src/Audio_GCWii.c +++ b/src/Audio_GCWii.c @@ -142,6 +142,30 @@ cc_result Audio_Poll(struct AudioContext* ctx, int* inUse) { } +/*########################################################################################################################* +*------------------------------------------------------Stream context-----------------------------------------------------* +*#########################################################################################################################*/ +cc_result StreamContext_SetFormat(struct AudioContext* ctx, int channels, int sampleRate, int playbackRate) { + return Audio_SetFormat(ctx, channels, sampleRate, playbackRate); +} + +cc_result StreamContext_Enqueue(struct AudioContext* ctx, struct AudioChunk* chunk) { + return Audio_QueueChunk(ctx, chunk); +} + +cc_result StreamContext_Play(struct AudioContext* ctx) { + return Audio_Play(ctx); +} + +cc_result StreamContext_Pause(struct AudioContext* ctx) { + return Audio_Pause(ctx); +} + +cc_result StreamContext_Update(struct AudioContext* ctx, int* inUse) { + return Audio_Poll(ctx, inUse); +} + + /*########################################################################################################################* *------------------------------------------------------Sound context------------------------------------------------------* *#########################################################################################################################*/ @@ -151,7 +175,6 @@ cc_bool SoundContext_FastPlay(struct AudioContext* ctx, struct AudioData* data) cc_result SoundContext_PlayData(struct AudioContext* ctx, struct AudioData* data) { cc_result res; - Audio_SetVolume(ctx, data->volume); if ((res = Audio_SetFormat(ctx, data->channels, data->sampleRate, data->rate))) return res; if ((res = Audio_QueueChunk(ctx, &data->chunk))) return res; diff --git a/src/Audio_Null.c b/src/Audio_Null.c index 7988d3fc1..9cb78d760 100644 --- a/src/Audio_Null.c +++ b/src/Audio_Null.c @@ -40,6 +40,30 @@ cc_result Audio_Poll(struct AudioContext* ctx, int* inUse) { } +/*########################################################################################################################* +*------------------------------------------------------Stream context-----------------------------------------------------* +*#########################################################################################################################*/ +cc_result StreamContext_SetFormat(struct AudioContext* ctx, int channels, int sampleRate, int playbackRate) { + return Audio_SetFormat(ctx, channels, sampleRate, playbackRate); +} + +cc_result StreamContext_Enqueue(struct AudioContext* ctx, struct AudioChunk* chunk) { + return Audio_QueueChunk(ctx, chunk); +} + +cc_result StreamContext_Play(struct AudioContext* ctx) { + return Audio_Play(ctx); +} + +cc_result StreamContext_Pause(struct AudioContext* ctx) { + return Audio_Pause(ctx); +} + +cc_result StreamContext_Update(struct AudioContext* ctx, int* inUse) { + return Audio_Poll(ctx, inUse); +} + + /*########################################################################################################################* *------------------------------------------------------Sound context------------------------------------------------------* *#########################################################################################################################*/ diff --git a/src/Audio_OS2.c b/src/Audio_OS2.c index 2be64b8c5..d24820a64 100644 --- a/src/Audio_OS2.c +++ b/src/Audio_OS2.c @@ -173,6 +173,30 @@ cc_result Audio_Poll(struct AudioContext* ctx, int* inUse) { } +/*########################################################################################################################* +*------------------------------------------------------Stream context-----------------------------------------------------* +*#########################################################################################################################*/ +cc_result StreamContext_SetFormat(struct AudioContext* ctx, int channels, int sampleRate, int playbackRate) { + return Audio_SetFormat(ctx, channels, sampleRate, playbackRate); +} + +cc_result StreamContext_Enqueue(struct AudioContext* ctx, struct AudioChunk* chunk) { + return Audio_QueueChunk(ctx, chunk); +} + +cc_result StreamContext_Play(struct AudioContext* ctx) { + return Audio_Play(ctx); +} + +cc_result StreamContext_Pause(struct AudioContext* ctx) { + return Audio_Pause(ctx); +} + +cc_result StreamContext_Update(struct AudioContext* ctx, int* inUse) { + return Audio_Poll(ctx, inUse); +} + + /*########################################################################################################################* *------------------------------------------------------Sound context------------------------------------------------------* *#########################################################################################################################*/ @@ -182,7 +206,6 @@ cc_bool SoundContext_FastPlay(struct AudioContext* ctx, struct AudioData* data) cc_result SoundContext_PlayData(struct AudioContext* ctx, struct AudioData* data) { cc_result res; - Audio_SetVolume(ctx, data->volume); if ((res = Audio_SetFormat(ctx, data->channels, data->sampleRate, data->rate))) return res; if ((res = Audio_QueueChunk(ctx, &data->chunk))) return res; diff --git a/src/Audio_OpenAL.c b/src/Audio_OpenAL.c index f3343a40c..8be64e8a2 100644 --- a/src/Audio_OpenAL.c +++ b/src/Audio_OpenAL.c @@ -257,6 +257,30 @@ cc_result Audio_Poll(struct AudioContext* ctx, int* inUse) { } +/*########################################################################################################################* +*------------------------------------------------------Stream context-----------------------------------------------------* +*#########################################################################################################################*/ +cc_result StreamContext_SetFormat(struct AudioContext* ctx, int channels, int sampleRate, int playbackRate) { + return Audio_SetFormat(ctx, channels, sampleRate, playbackRate); +} + +cc_result StreamContext_Enqueue(struct AudioContext* ctx, struct AudioChunk* chunk) { + return Audio_QueueChunk(ctx, chunk); +} + +cc_result StreamContext_Play(struct AudioContext* ctx) { + return Audio_Play(ctx); +} + +cc_result StreamContext_Pause(struct AudioContext* ctx) { + return Audio_Pause(ctx); +} + +cc_result StreamContext_Update(struct AudioContext* ctx, int* inUse) { + return Audio_Poll(ctx, inUse); +} + + /*########################################################################################################################* *------------------------------------------------------Sound context------------------------------------------------------* *#########################################################################################################################*/ @@ -267,7 +291,6 @@ cc_bool SoundContext_FastPlay(struct AudioContext* ctx, struct AudioData* data) cc_result SoundContext_PlayData(struct AudioContext* ctx, struct AudioData* data) { cc_result res; - Audio_SetVolume(ctx, data->volume); if ((res = Audio_SetFormat(ctx, data->channels, data->sampleRate, data->rate))) return res; if ((res = Audio_QueueChunk(ctx, &data->chunk))) return res; diff --git a/src/Audio_SLES.c b/src/Audio_SLES.c index 6ffe42c94..4db9ef184 100644 --- a/src/Audio_SLES.c +++ b/src/Audio_SLES.c @@ -224,6 +224,30 @@ cc_result Audio_Poll(struct AudioContext* ctx, int* inUse) { } +/*########################################################################################################################* +*------------------------------------------------------Stream context-----------------------------------------------------* +*#########################################################################################################################*/ +cc_result StreamContext_SetFormat(struct AudioContext* ctx, int channels, int sampleRate, int playbackRate) { + return Audio_SetFormat(ctx, channels, sampleRate, playbackRate); +} + +cc_result StreamContext_Enqueue(struct AudioContext* ctx, struct AudioChunk* chunk) { + return Audio_QueueChunk(ctx, chunk); +} + +cc_result StreamContext_Play(struct AudioContext* ctx) { + return Audio_Play(ctx); +} + +cc_result StreamContext_Pause(struct AudioContext* ctx) { + return Audio_Pause(ctx); +} + +cc_result StreamContext_Update(struct AudioContext* ctx, int* inUse) { + return Audio_Poll(ctx, inUse); +} + + /*########################################################################################################################* *------------------------------------------------------Sound context------------------------------------------------------* *#########################################################################################################################*/ diff --git a/src/Audio_Switch.c b/src/Audio_Switch.c index bffff2e5b..39079418a 100644 --- a/src/Audio_Switch.c +++ b/src/Audio_Switch.c @@ -174,6 +174,30 @@ cc_result Audio_Poll(struct AudioContext* ctx, int* inUse) { } +/*########################################################################################################################* +*------------------------------------------------------Stream context-----------------------------------------------------* +*#########################################################################################################################*/ +cc_result StreamContext_SetFormat(struct AudioContext* ctx, int channels, int sampleRate, int playbackRate) { + return Audio_SetFormat(ctx, channels, sampleRate, playbackRate); +} + +cc_result StreamContext_Enqueue(struct AudioContext* ctx, struct AudioChunk* chunk) { + return Audio_QueueChunk(ctx, chunk); +} + +cc_result StreamContext_Play(struct AudioContext* ctx) { + return Audio_Play(ctx); +} + +cc_result StreamContext_Pause(struct AudioContext* ctx) { + return Audio_Pause(ctx); +} + +cc_result StreamContext_Update(struct AudioContext* ctx, int* inUse) { + return Audio_Poll(ctx, inUse); +} + + /*########################################################################################################################* *------------------------------------------------------Sound context------------------------------------------------------* *#########################################################################################################################*/ @@ -183,7 +207,6 @@ cc_bool SoundContext_FastPlay(struct AudioContext* ctx, struct AudioData* data) cc_result SoundContext_PlayData(struct AudioContext* ctx, struct AudioData* data) { cc_result res; - Audio_SetVolume(ctx, data->volume); if ((res = Audio_SetFormat(ctx, data->channels, data->sampleRate, data->rate))) return res; if ((res = Audio_QueueChunk(ctx, &data->chunk))) return res; diff --git a/src/Audio_Symbian.cpp b/src/Audio_Symbian.cpp index 1c04ff531..2e616193a 100644 --- a/src/Audio_Symbian.cpp +++ b/src/Audio_Symbian.cpp @@ -358,6 +358,30 @@ cc_result Audio_SetFormat(struct AudioContext* ctx, int channels, int sampleRate } +/*########################################################################################################################* +*------------------------------------------------------Stream context-----------------------------------------------------* +*#########################################################################################################################*/ +cc_result StreamContext_SetFormat(struct AudioContext* ctx, int channels, int sampleRate, int playbackRate) { + return Audio_SetFormat(ctx, channels, sampleRate, playbackRate); +} + +cc_result StreamContext_Enqueue(struct AudioContext* ctx, struct AudioChunk* chunk) { + return Audio_QueueChunk(ctx, chunk); +} + +cc_result StreamContext_Play(struct AudioContext* ctx) { + return Audio_Play(ctx); +} + +cc_result StreamContext_Pause(struct AudioContext* ctx) { + return Audio_Pause(ctx); +} + +cc_result StreamContext_Update(struct AudioContext* ctx, int* inUse) { + return Audio_Poll(ctx, inUse); +} + + /*########################################################################################################################* *------------------------------------------------------Sound context------------------------------------------------------* *#########################################################################################################################*/ @@ -369,7 +393,6 @@ cc_bool SoundContext_FastPlay(struct AudioContext* ctx, struct AudioData* data) cc_result SoundContext_PlayData(struct AudioContext* ctx, struct AudioData* data) { cc_result res; - Audio_SetVolume(ctx, data->volume); if ((res = Audio_SetFormat(ctx, data->channels, data->sampleRate, data->rate))) return res; if ((res = Audio_QueueChunk(ctx, &data->chunk))) return res; diff --git a/src/Audio_Web.c b/src/Audio_Web.c index 00786235a..5096d03ed 100644 --- a/src/Audio_Web.c +++ b/src/Audio_Web.c @@ -59,6 +59,30 @@ cc_result Audio_Poll(struct AudioContext* ctx, int* inUse) { } +/*########################################################################################################################* +*------------------------------------------------------Stream context-----------------------------------------------------* +*#########################################################################################################################*/ +cc_result StreamContext_SetFormat(struct AudioContext* ctx, int channels, int sampleRate, int playbackRate) { + return Audio_SetFormat(ctx, channels, sampleRate, playbackRate); +} + +cc_result StreamContext_Enqueue(struct AudioContext* ctx, struct AudioChunk* chunk) { + return Audio_QueueChunk(ctx, chunk); +} + +cc_result StreamContext_Play(struct AudioContext* ctx) { + return Audio_Play(ctx); +} + +cc_result StreamContext_Pause(struct AudioContext* ctx) { + return Audio_Pause(ctx); +} + +cc_result StreamContext_Update(struct AudioContext* ctx, int* inUse) { + return Audio_Poll(ctx, inUse); +} + + /*########################################################################################################################* *------------------------------------------------------Sound context------------------------------------------------------* *#########################################################################################################################*/ @@ -68,14 +92,7 @@ cc_bool SoundContext_FastPlay(struct AudioContext* ctx, struct AudioData* data) } cc_result SoundContext_PlayData(struct AudioContext* ctx, struct AudioData* data) { - cc_result res; - Audio_SetVolume(ctx, data->volume); - - if ((res = Audio_SetFormat(ctx, data->channels, data->sampleRate, data->rate))) return res; - if ((res = Audio_QueueChunk(ctx, &data->chunk))) return res; - if ((res = Audio_Play(ctx))) return res; - - return 0; + return interop_AudioPlay(ctx->contextID, data->chunk.data, data->rate); } cc_result SoundContext_PollBusy(struct AudioContext* ctx, cc_bool* isBusy) { diff --git a/src/Audio_WiiU.c b/src/Audio_WiiU.c index a40db1765..618bde7c7 100644 --- a/src/Audio_WiiU.c +++ b/src/Audio_WiiU.c @@ -56,6 +56,30 @@ cc_result Audio_Poll(struct AudioContext* ctx, int* inUse) { } +/*########################################################################################################################* +*------------------------------------------------------Stream context-----------------------------------------------------* +*#########################################################################################################################*/ +cc_result StreamContext_SetFormat(struct AudioContext* ctx, int channels, int sampleRate, int playbackRate) { + return Audio_SetFormat(ctx, channels, sampleRate, playbackRate); +} + +cc_result StreamContext_Enqueue(struct AudioContext* ctx, struct AudioChunk* chunk) { + return Audio_QueueChunk(ctx, chunk); +} + +cc_result StreamContext_Play(struct AudioContext* ctx) { + return Audio_Play(ctx); +} + +cc_result StreamContext_Pause(struct AudioContext* ctx) { + return Audio_Pause(ctx); +} + +cc_result StreamContext_Update(struct AudioContext* ctx, int* inUse) { + return Audio_Poll(ctx, inUse); +} + + /*########################################################################################################################* *------------------------------------------------------Sound context------------------------------------------------------* *#########################################################################################################################*/ @@ -66,7 +90,6 @@ cc_bool SoundContext_FastPlay(struct AudioContext* ctx, struct AudioData* data) cc_result SoundContext_PlayData(struct AudioContext* ctx, struct AudioData* data) { cc_result res; - Audio_SetVolume(ctx, data->volume); if ((res = Audio_SetFormat(ctx, data->channels, data->sampleRate, data->rate))) return res; if ((res = Audio_QueueChunk(ctx, &data->chunk))) return res; diff --git a/src/Audio_WinMM.c b/src/Audio_WinMM.c index 18b418f84..c5d972534 100644 --- a/src/Audio_WinMM.c +++ b/src/Audio_WinMM.c @@ -144,6 +144,30 @@ cc_result Audio_Poll(struct AudioContext* ctx, int* inUse) { } +/*########################################################################################################################* +*------------------------------------------------------Stream context-----------------------------------------------------* +*#########################################################################################################################*/ +cc_result StreamContext_SetFormat(struct AudioContext* ctx, int channels, int sampleRate, int playbackRate) { + return Audio_SetFormat(ctx, channels, sampleRate, playbackRate); +} + +cc_result StreamContext_Enqueue(struct AudioContext* ctx, struct AudioChunk* chunk) { + return Audio_QueueChunk(ctx, chunk); +} + +cc_result StreamContext_Play(struct AudioContext* ctx) { + return Audio_Play(ctx); +} + +cc_result StreamContext_Pause(struct AudioContext* ctx) { + return Audio_Pause(ctx); +} + +cc_result StreamContext_Update(struct AudioContext* ctx, int* inUse) { + return Audio_Poll(ctx, inUse); +} + + /*########################################################################################################################* *------------------------------------------------------Sound context------------------------------------------------------* *#########################################################################################################################*/ @@ -155,11 +179,9 @@ cc_bool SoundContext_FastPlay(struct AudioContext* ctx, struct AudioData* data) cc_result SoundContext_PlayData(struct AudioContext* ctx, struct AudioData* data) { cc_result res; - Audio_SetVolume(ctx, data->volume); if ((res = Audio_SetFormat(ctx, data->channels, data->sampleRate, data->rate))) return res; if ((res = Audio_QueueChunk(ctx, &data->chunk))) return res; - if ((res = Audio_Play(ctx))) return res; return 0; } diff --git a/src/_AudioBase.h b/src/_AudioBase.h index 00884427f..a46ce5271 100644 --- a/src/_AudioBase.h +++ b/src/_AudioBase.h @@ -13,6 +13,12 @@ void Audio_Warn(cc_result res, const char* action) { /* achieve higher speed by playing samples at higher sample rate */ #define Audio_AdjustSampleRate(sampleRate, playbackRate) ((sampleRate * playbackRate) / 100) +static cc_result Audio_SetFormat(struct AudioContext* ctx, int channels, int sampleRate, int playbackRate); +static cc_result Audio_QueueChunk(struct AudioContext* ctx, struct AudioChunk* chunk); +static cc_result Audio_Play(struct AudioContext* ctx); +static cc_result Audio_Poll(struct AudioContext* ctx, int* inUse); +static cc_result Audio_Pause(struct AudioContext* ctx); + /*########################################################################################################################* *---------------------------------------------------Common backend code---------------------------------------------------* @@ -128,8 +134,9 @@ cc_result AudioPool_Play(struct AudioData* data) { if ((res = SoundContext_PollBusy(ctx, &isBusy))) return res; if (isBusy) continue; - if (!SoundContext_FastPlay(ctx, data)) continue; + + Audio_SetVolume(ctx, data->volume); return SoundContext_PlayData(ctx, data); } @@ -142,6 +149,7 @@ cc_result AudioPool_Play(struct AudioData* data) { if (res) return res; if (isBusy) continue; + Audio_SetVolume(ctx, data->volume); return SoundContext_PlayData(ctx, data); } return 0;