1.在做錄制歌曲的功能的時(shí)候,遇到了模擬器正常,但是真機(jī)測(cè)試時(shí)不能完成合成的功能,解決方案如下:
在設(shè)置AVAudioSession的對(duì)象屬性時(shí),其中要這樣設(shè)置:
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&err];
這樣設(shè)置雖然解決了錄音的同時(shí)可以播放音頻,但是如果沒(méi)有接入音頻設(shè)備的時(shí)候,音頻的播放音量特別小,這是因?yàn)閷ategory設(shè)置為AVAudioSessionCategoryPlayAndRecord時(shí),默認(rèn)的聲音輸出為手機(jī)聽筒。所以為什么調(diào)節(jié)音量的時(shí)候,就算調(diào)到最大,但外放音量還是特別的小。那么這個(gè)問(wèn)題應(yīng)該怎么解決呢?
遇到問(wèn)題,就是我們提高的機(jī)會(huì)。經(jīng)過(guò)不懈的努力,終于找到解決的方法。話不多說(shuō),代碼如下:
查找資料后,有兩種方法。
方法一:修改category的默認(rèn)行為
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:&error];
方法二:OverrideOutputAudioPort 方法
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&err];
[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error];
注意:這樣設(shè)置了可以指定沒(méi)有外置設(shè)備的時(shí)候使用揚(yáng)聲器進(jìn)行播放音頻,但是如果接入音頻設(shè)備后,音頻設(shè)備是沒(méi)有聲音的,這是因?yàn)槟阍O(shè)置限定了輸出方式。這時(shí)候怎么辦?判斷呀!判斷有沒(méi)有接入外置設(shè)備,有的話怎樣怎樣,沒(méi)有的話怎樣怎樣(此處省略20000行代碼)。
這樣基本上就解決了,邊錄音邊播放音頻的功能。文筆粗糙,看官留情。不足之處,還請(qǐng)指教。
這是目前研究到的水平,后期會(huì)繼續(xù)完善補(bǔ)充。也可能推翻重寫。能解決問(wèn)題就好。