開發使用CoreAudio框架的iOS應用程序,我正在處理SDL reg的恕我直言無稽之談。播放音頻。 SDL在循環播放音頻,而唯一的方法是如何觸發播放,請撥打SDL_PauseAudio(0)
,如何停止播放(沒有其他副作用,我不會在此討論)的唯一方法是致電SDL_PauseAudio(1)
。我所知道的。SDL:如何停止音頻 - 不是恢復,哪個SDL_PauseAudio(1)實際上執行?
SDL在這裏對我有什麼問題?簡單地說 - 下一次調用SDL_PauseAudio(1)
實際上會恢復播放,導致框架播放一些混亂 *之前詢問新的聲音數據*。這是因爲SDL_CoreAudio.c如何實現播放循環。
這意味着,SDL不執行STOP,它只實現PAUSE/RESUME並錯誤地管理音頻處理。這意味着,如果您播放sampleA,並且稍後想要播放sampleB,您還會聽到sampleA的片斷,同時希望聽到sampleB的播放。
如果我錯了,請糾正我。
如果不是,這是我的差異,我也用於執行停止行爲:只要我完成播放sampleA,我打電話SDL_PauseAudio(2)
,以便回放循環退出,下次調用SDL_PauseAudio(0)再次啓動它,這次通過從sampleA播放沒有混亂,但正確播放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行爲?