iOS錄音主要通過兩種方式來實(shí)現(xiàn):
其一:使用底層的AudioToolbox.framework 亡电、CoreAudioTypes.framework相關(guān)主要類:AudioQueueRef串稀、AudioStreamBasicDescription粥庄、AudioQueueBufferRef岖瑰,此方式的好處是能實(shí)現(xiàn)邊錄制邊緩存數(shù)據(jù)叛买,在線播放無需等待音頻文件全部下載完成,可以邊緩沖邊播放蹋订,提高用戶體驗(yàn)率挣。另外實(shí)現(xiàn)混音、去除回音也得使用底層Api來實(shí)現(xiàn)露戒。
AudioStreamBasicDescription recordFormat; ? //音頻流配置
-? (void)initFormat {
? ? recordFormat.mSampleRate=? KDefaultSampleRate;? //采樣率
? ? recordFormat.mChannelsPerFrame = KDefalutChannel; //聲道數(shù)量
? ? //編碼格式
? ? recordFormat.mFormatID = kAudioFormatLinearPCM;
? ? recordFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;
? ? //每采樣點(diǎn)占用位數(shù)
? ? recordFormat.mBitsPerChannel = KBitsPerChannel;
? ? //每幀的字節(jié)數(shù)
? ? recordFormat.mBytesPerFrame = (recordFormat.mBitsPerChannel / 8) * recordFormat.mChannelsPerFrame;
? ? //每包的字節(jié)數(shù)
? ? recordFormat.mBytesPerPacket = recordFormat.mBytesPerFrame;
? ? //每幀的字節(jié)數(shù)
? ? recordFormat.mFramesPerPacket = 1;
}
其二:使用蘋果的AVFoundation.framework 的相關(guān)主要類:AVAudioSession椒功、AVAudioRecorder
此方式使用起來簡單,容易理解各種參數(shù)配置智什。
- (NSDictionary *)getAudioSetting{
? ? NSMutableDictionary *dicM = [NSMutableDictionary dictionary];
? ? [dicM setObject:@(kAudioFormatLinearPCM) forKey:AVFormatIDKey];
? ? [dicM setObject:@(ETRECORD_RATE) forKey:AVSampleRateKey];
? ? [dicM setObject:@(2) forKey:AVNumberOfChannelsKey];
? ? [dicM setObject:@(16) forKey:AVLinearPCMBitDepthKey];
? ? [dicM setObject:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];
? ? return?dicM;
}
錄音時設(shè)置的編碼通常是kAudioFormatLinearPCM或者kAudioFormatMPEG4AAC动漾,但是發(fā)現(xiàn)一個問題,無論你使用何種編碼荠锭,哪怕設(shè)置kAudioFormatMPEGLayer3編碼后錄制的音頻文件在Android端或Chrome瀏覽器端都無法播放旱眯?那如何解決呢?
通過錄制pcm編碼的原始音頻证九,然后通過mp3的轉(zhuǎn)碼庫Lame(demo鏈接:https://github.com/CivelXu/iOS-Lame-Audio-transcoding)轉(zhuǎn)碼成mp3的編碼后再上傳到服務(wù)器删豺,這樣解決了跨端播放的兼容問題。
文件大小如何甫贯?
本人測試了一下錄音文件的大小吼鳞,近30秒鐘的音頻錄音測試,設(shè)備iPhone6s叫搁、雙聲道赔桌、采樣率11025 供炎、16位。
pcm編碼? :1.3?MB疾党,轉(zhuǎn)換成mp3編碼后的大幸艚搿:? 109?KB 。(由此推算5分鐘的錄音大致1MB大醒┪弧)
如果改成單聲道竭钝、采樣率還是11025:
pcm編碼 : 673?KB,轉(zhuǎn)換成mp3編碼后的大小? :85?KB 雹洗。
但是單聲道的文件通過Lame轉(zhuǎn)換后發(fā)現(xiàn)實(shí)際音頻時長變成了二分之一香罐?這個估計需要修改demo的相關(guān)轉(zhuǎn)碼算法?具體還清楚时肿!