2010-09-14 68 views
0

我最近一直在試圖融入一個強大的聲音管理課程,在那裏聲音播放的精度是必須的。 我在尋找的是加載聲音,設置播放開始位置(或播放頭),播放一段時間,暫停聲音,將'播放頭'位置設置爲新的間隔並再次恢復播放的選項。 (動態間隔)。 我已經嘗試過使用AVAudioPlayer - 但它似乎太慢了。性能不符合您的預期,因此在撥打pausesetCurrentTime:時會滯後。帶有setCurrentTimeFunction功能的iPhone/iPad聲音播放。非AVAudioPlayer

這是最容易使用的庫,也是唯一具有setCurrentTime:功能的庫。

我來這裏要求您的幫助,一個體面的開源SoundEngine的建議,可以處理低延遲的間隔設置(播放頭移動),或者提到OpenAL或AudioUnit工具可以處理播放位置的地方設置。

預先感謝您,
〜Natanavra。

回答

1

這將是值得你花時間去看看SDK附帶的openAL程序員指南。它有各種各樣的好東西! 來自:

根據來源:由alGenSources生成的每個來源具有可以設置或檢索的屬性。 的alSource並[f,3F,FV,i]和alGetSource並[f,3F,FV,I]可以使用的功能的家庭設置或檢索下面的源屬性: ...

AL_SEC_OFFSET f, fv, i, iv the playback position, expressed in seconds 
AL_SAMPLE_OFFSET f, fv, i, iv the playback position, expressed in samples 
AL_BYTE_OFFSET f, fv, i, iv the playback position, expressed in bytes 

所以您可以在幾秒鐘內獲得播放位置併除以60來獲得標準化時間。

float pos = 0; alGetSourcef(sourceID, AL_SEC_OFFSET, &pos); 
float normalizedPos = pos/60.0f; 

OpenAL絕對有能力播放聲音暫停任何你喜歡的。請記住,OpenAL經常用於遊戲,因爲它可提供低延遲和按需播放的聲音播放。你對聲音有很多控制權。與AVAudioPlayer類相比。 希望這有助於 你們的答覆

PK

+0

非常感謝你。我一定會嘗試一下。同時,我設法使AVAudioPlayer類更加有效,並通過繼承它併爲其添加各種方法來降低延遲。 – natanavra 2010-09-19 12:37:38

+0

這聽起來很棒。我很高興你能夠減少延遲,因爲這對於播放聲音非常重要。 至於你的問題在哪裏你要求提供的地方說明OpenAL或AudioUnit工具可以處理播放位置設置;我已經提供給你,所以請試試這個問題,這樣可以關閉這個問題。謝謝。 – Pavan 2010-09-19 16:04:53