我試圖找到一些方法來播放動態創建的iOS中的音調。能夠播放音頻文件不會爲我削減它。我需要更多更好的控制。我知道有一些方法可以在單個數據包級別處理音頻流,如果我有辦法創建音頻數據包,這對我來說很有用。如果任何人甚至有一些好的指針或地方去獲得更多的信息,我會很感激。如何在iOS中播放自定義鈴聲?
回答
你可能想要的是使用AudioQueue。這是一個API在音頻堆棧中有點下降,但允許你生成你想要的任何音頻。我已經在應用程序SC68 Player中使用它來生成Atari ST聲音芯片仿真器的音頻流,以播放來自80年代的遊戲和場景演示中的舊音樂。
的基本思路是:
- 產生一個後臺線程,你生成一個CFRunLoop接收按需回調填補了音頻隊列緩衝區。使用
AudioQueueNewOutput()
- 從任何線程開始/暫停音頻隊列。使用
AudioQueueStart()
/AudioQueueStart()
暫停。 - 執行回調來填充音頻緩衝區。
的回調將是這個樣子:
static void AudioQueueCallback(void* inUserData,
AudioQueueRef inAQ,
AudioQueueBufferRef inBuffer)
{
[soundGenerator fillNextFrameBuffer:inBuffer->mAudioData
size:inBuffer->mAudioDataBytesCapacity];
inBuffer->mAudioDataByteSize = inBuffer->mAudioDataBytesCapacity;
AudioQueueEnqueueBuffer(inAQ, inBuffer, 0, NULL);
}
謝謝!任何有關如何創建聲音發生器的指針?我不確定這些格式是什麼樣子。如果我知道在哪裏粘貼它,我可以用LPCM數據填充它,以及它需要在AudioQueue中播放的格式。 – 2011-05-10 15:29:01
您可以從http://www.peylow.se/sc68player.html下載SC68播放器的源代碼 - 它包含您想在CS68PlayerAudioQueuePlayer.m文件中查看的代碼。您可以設置PCM音頻數據,幾乎不管你喜歡什麼。 – PeyloW 2011-05-10 15:33:09
當然馬特·加拉格爾已經使用RemoteIO音頻單元寫入一個音調發生器。
http://cocoawithlove.com/2010/10/ios-tone-generator-introduction-to.html
- 1. android studio,播放自定義鈴聲?
- 2. 鈴聲正在播放默認鈴聲
- 3. 如何在iPhone上播放鈴聲
- 4. Twilio客戶端 - 傳出呼叫播放 - 自定義鈴聲
- 5. 播放自定義聲音
- 6. 播放默認鈴聲
- 7. 查找已播放鈴聲
- 8. 在Windows 8中播放鈴聲?
- 9. 如何在Android中播放鈴聲/鬧鐘聲音
- 10. 用鈴聲流播放聲音
- 11. 使用鈴聲作爲iOS的自定義推送聲音
- 12. 如何在Flutter中播放自定義聲音?
- 13. 如何在自定義鍵盤中播放鍵盤聲音?
- 14. 如何在iOS中播放聲音?
- 15. 如何在android中設置自定義鬧鐘鈴聲
- 16. 如何發出警報,即在Android中播放鬧鐘鈴聲?
- 17. 如何讓我的鈴聲在android中播放?
- 18. 如何將音頻導出爲iOS中的鈴聲(鈴聲)
- 19. 自定義通知聲音未播放
- 20. iOS無法播放遠程通知的自定義聲音
- 21. iOS 8自定義鍵盤,播放聲音
- 22. iOS - 爲自定義鍵盤播放Tock聲音
- 23. iOS 10.0.1推送通知自定義聲音不播放(MP3)
- 24. 在廣播接收器中播放鈴聲
- 25. 如何在鬧鈴響起時播放默認的手機鈴聲?
- 26. 播放鈴聲和振動電話?
- 27. Android - 鈴聲不會停止播放
- 28. android mediaplayer - 播放鈴聲一次
- 29. 如何在iOS中的UITableViewCell中播放視頻(自動播放)
- 30. 僅在特定時間段播放應用程序的鈴聲
那麼你應該看看蘋果的示例應用程序。 – 2011-05-10 14:09:42
@尼克韋弗,我在想同樣的事情,但是(不是直接從他的問題中提取出來的),我認爲他需要更復雜的方式(或者至少希望這樣做)。 – Jake 2011-05-10 14:35:32
我看到沒有可接受的答案 - 如果可能,請告訴我們您是否以及如何自己解決問題。 – 2011-09-21 08:14:39