在iOS中播放音頻一般情況下都是使用AVPlayer,很方便,也能滿足大部分使用情況虎囚。但是如果需要播放的音頻是ogg格式的,AVPlayer就基本沒有辦法播放蔫磨,因?yàn)閕OS目前是不支持直接播放ogg格式的音頻的淘讥,想要播放需要靠AudioQueue的幫助。
我現(xiàn)在用的是IDZAQAudioPlayer堤如,作者是基于AudioQueue實(shí)現(xiàn)的音頻播放蒲列,具體代碼可以去GitHub上搜索。雖然原作者有幾個(gè)年頭沒有更新了搀罢,并且代碼內(nèi)部的判斷邏輯也有個(gè)別地方不夠嚴(yán)謹(jǐn)蝗岖,不過我自己補(bǔ)充了一些判斷邏輯之后,基本上滿足了目前公司的需求榔至,也沒有出現(xiàn)過什么bug抵赢。
AudioQueue的使用方法網(wǎng)上有很多教程,就不廢話了唧取。這篇文章主要記錄一下我遇到的一個(gè)棘手的問題:改變播放速度
AVPlayer如果要改變播放速度的話铅鲤,在系統(tǒng)默認(rèn)支持的范圍內(nèi)很容易,只需要修改player.rate的值就行了枫弟。需要注意的是最好在音頻已經(jīng)開始播放后再修改rate的值邢享,我遇到過執(zhí)行 [player play]后緊跟著設(shè)置rate的值出現(xiàn)播放速度沒變化的情況...
而AudioQueue如果要改變播放速度的話,是需要設(shè)置AudioQueueSetParameter的kAudioQueueParam_PlayRate淡诗。像我這種CV程序員驼仪,遇到不會的東西第一時(shí)間上網(wǎng)搜索關(guān)鍵字【iOS AudioQueue 速度】(吐槽一下掸犬,?百度的搜索結(jié)果絕大部分都不沾邊...谷歌要好很多)袜漩。
好不容易找到了相關(guān)的文章绪爸,文章說設(shè)置? ??AudioQueueSetParameter(mQueue, kAudioQueueParam_PlayRate, changeRate);就可以改變播放速度。
但是發(fā)現(xiàn)在自己項(xiàng)目里設(shè)置完卻沒有生效宙攻。直到發(fā)現(xiàn)了這個(gè)回答才豁然開朗【iOS:使用AudioQueue時(shí)快進(jìn)音頻】
對應(yīng)的修改了一下IDZAQAudioPlayer.m奠货,我在這里補(bǔ)充了代碼,大家可以根據(jù)各自的情況修改或補(bǔ)充代碼
再添加修改速度的代碼座掘,在音頻播放的時(shí)候就可以改變播放速度了
結(jié)語:經(jīng)過了幾天無頭蒼蠅式的亂找递惋,加深了對AudioQueue的理解。在成功實(shí)現(xiàn)功能的時(shí)候溢陪,成就感油然而生萍虽,我想這就是程序員的快樂之一吧。