2012-09-27 24 views
0

我的問題可能與此類似:Why might my AudioQueueOutputCallback not be called?AudioQueueOutputCallback不叫起初

看來,人是能夠通過在主線程上運行的音頻的東西來解決。我不能這樣做。

我排隊緩衝區素音頻Q,然後開始音頻問:如果沒有完成這些緩衝區立即一旦我開始我的隊列?

我正確設置數據的大小。

一劈我沒有等待他們重新使用緩衝區由cabllback爲已完成報告。如果我這樣做,我會像這樣跑幾秒鐘,然後緩衝區回調開始工作。

回答

0

絕對不是一個好主意,與核心音頻圍繞破解你的方式。雖然它可能是一個快速解決方案,它肯定會傷害你的,從長遠來看曖昧的方式。

你的問題與你發佈的鏈接不一樣,他們的問題是在錯誤的線程上分配回調。在你的情況下,你的回調是在正確的線程,它只是你正在餵養的音頻緩衝區它最初是空的,太小或包含不適合音頻播放的數據

請記住,回放的目的是在提供給音頻隊列的每個音頻緩衝區已經播放(即消耗)之後觸發。事實上,你開始隊列回調後不被解僱..它意味着有沒有在音頻緩衝它消耗..或過少的有意義的信息,因爲它消耗..

當您手動執行該操作時,您會看到音頻隊列正在嘗試處理您提供的空/錯誤緩衝區的延遲b/c。然後,您使用隊列最終播放的有效數據重新提供相同的緩衝區,然後觸發回調

解決方案:要手動提供數據開始隊列之前比較你把緩衝區中的數據。我敢肯定是有差別的..如果還是不行,請展示你的代碼進行進一步的分析

+0

非常感謝,我會密切關注。我正在播放來自shoutcast連接的音頻。我發現了一個錯誤。現在第一批緩衝區已經完成,但之後它會「卡住」。奇怪,因爲在那個時候,我已經解析了所有的頭文件,並且應該只是接收壓縮音頻。 –

+0

如果你可以顯示你的代碼,那麼我可能會找到一個更具體的原因你的prolem – abbood

+0

欣賞這一點。我會看看我是否可以製作一個簡化版本。它基本上是Matt Gallagher的AudioStreamer的C++「端口」。 –