CoreAudioフレームワークを使用するiOSアプリケーションを開発するにあたり、私はSDH regのIMHOナンセンス動作を扱っています。オーディオを再生します。 SDLはループでオーディオを再生しますが、再生をトリガする方法はSDL_PauseAudio(0)
に電話するだけです(他の副作用はありませんが、ここでは触れません)SDL_PauseAudio(1)
に電話するのが唯一の方法です。私の知る限りでは。SDL:オーディオを停止する方法 - 再開しない、SDL_PauseAudio(1)は実際には何ですか?
ここでSDLの問題は何ですか?単にSDL_PauseAudio(1)
への次回の呼び出しで実際に再生が再開され、新しいサウンドデータ*を要求する前に、フレームワークにmess *を再生させます。これは、SDL_CoreAudio.cが再生ループをどのように実装するかによるものです。
つまり、SDLはSTOPを実装せず、PAUSE/RESUMEだけを実装し、オーディオ処理を誤って管理しています。つまり、sampleAを再生し、後でsampleBを再生したい場合、sampleBの再生を聞くだけでsampleAの断片も聞こえることになります。
間違っている場合は、私を修正してください。
私がsampleAの再生を終了するとすぐに再生ループが終了し、次回のSDL_PauseAudio(0)の呼び出しが再び開始されるようにSDL_PauseAudio(2)
を呼び出しますを再生すると、サンプルAのは表示されませんが、正しくsmapleBからデータが再生されます。
Index: src/audio/coreaudio/SDL_coreaudio.c
===================================================================
--- src/audio/coreaudio/SDL_coreaudio.c
+++ src/audio/coreaudio/SDL_coreaudio.c
@@ -250,6 +250,12 @@
abuf = &ioData->mBuffers[i];
SDL_memset(abuf->mData, this->spec.silence, abuf->mDataByteSize);
}
+ if (2 == this->paused)
+ {
+ // this changes 'pause' behavior to 'stop' behavior - next
+ // plyaing starts from beginning, i.e. it won't resume
+ this->hidden->bufferOffset = this->hidden->bufferSize;
+ }
return 0;
}
私はSDLコードを編集したことを恥ずかしく思っていますが、著者とは関係がなく、助けが見つかりませんでした。まあ、それは私にとって奇妙なことです、誰もSDLでSTOP動作を必要としているようですね?