ios 录音,播放 tips
生活随笔
收集整理的這篇文章主要介紹了
ios 录音,播放 tips
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- 背景
- 最近在做iOS錄音相關東西,也遇到了一些坑,順便記錄下。
- 正文?
- 系統自帶的AVFoundation框架,提供了AVAudioRecorder(錄音),AVAudioPlayer(播放)兩個最簡單易用的API.
- 錄音播放的基礎教程幾篇(傳送門):
http://www.cnblogs.com/kenshincui/p/4186022.html
http://blog.csdn.net/ysy441088327/article/details/8164120
http://msching.github.io/
http://code.cocoachina.com/view/126074?(新增) - 主要遇到了幾個問題:
- 1.AVaudioRecorder的基本錄音格式設置 NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey,//設置錄音格式 [NSNumber numberWithFloat:8000], AVSampleRateKey,//設置錄音采樣率,8000是電話采樣率,對于一般錄音已經夠了 [NSNumber numberWithInt: 1], AVNumberOfChannelsKey, [NSNumber numberWithInt:AVAudioQualityMin],AVEncoderAudioQualityKey, nil];
- 注意點:錄音的格式可以是AAC,M4A,PCM,具體選擇根據你的項目需求。設置了格式對app的影響主要是錄音文件的大小。一般情況的PCM>AAC>M4A。如果對本地存儲沒有限制,請隨意選擇。當需要控制文件大小時,就需要考慮犧牲一些,例如音質,采樣質量等。
- 其次:iOS7 之后,請再錄音之前設置相應的AVAudioSession(相當于一個大管家)
基本設置如下 AVAudioSession *audioSession=[AVAudioSession sharedInstance]; //設置為播放和錄音狀態,以便可以在錄制完之后播放錄音 [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil]; [audioSession setActive:YES error:nil]; //設置播放器為揚聲器模式 [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil]; NSError *audioError = nil; BOOL success = [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&audioError];if(!success){NSLog(@"error doing outputaudioportoverride - %@", [audioError localizedDescription]);} if ([audioSession respondsToSelector:@selector(requestRecordPermission:)]) {[audioSession performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {if (granted) {// Microphone enabled codePADebug(@"正常錄音");}else {// Microphone disabled codePADebug(@"失敗錄音");}}]; }
- 注意點:首先需要注意的是,當你在只錄音的時候可以講category設置為AVAudioSessionCategoryRecord;需要錄音并播放的時候設置AVAudioSessionCategoryPlayAndRecord;需要播放的時候設置AVAudioSessionCategoryPlayback。
- 其次,由于錄音并播放時,會發現一個錄音的時候聲音正常,到播放的時候,聲音很小。這是由于默認播放是通過聽筒,而非揚聲器。請設置音頻輸出為揚聲器。并在插上耳機的時候,會優先耳機。
解決聲音小請參考:http://ruckt.info/playing-sound-through-iphone-speaker/
- 其次,由于錄音并播放時,會發現一個錄音的時候聲音正常,到播放的時候,聲音很小。這是由于默認播放是通過聽筒,而非揚聲器。請設置音頻輸出為揚聲器。并在插上耳機的時候,會優先耳機。
- iOS上,錄音音頻格式可以為以下幾種:
AAC (MPEG-4 Advanced Audio Coding)
ALAC (Apple Lossless)
iLBC (internet Low Bitrate Codec, for speech)
IMA4 (IMA/ADPCM)
Linear PCM (uncompressed, linear pulse-code modulation)
- 文件格式可以為:.caf(默認支持最全);.acc;.m4a等,如果需要和安卓同步,就需要統一格式,并需要轉碼。
-
局限性:recorder,player簡單易用,但是有局限性。
if ([[NSFileManager defaultManager] fileExistsAtPath:臨時音頻路徑) {NSData *tempAudioData = [[NSData alloc] initWithContentsOfFile:臨時音頻路徑];if ([[NSFileManager defaultManager] fileExistsAtPath:音頻路徑]) {NSMutableData *newAudioData = [NSMutableData data];NSData *audioData = [[NSData alloc] initWithContentsOfFile:[self configureAudioRecordFilePath:self.currentFileName]];[newAudioData appendData:audioData];[newAudioData appendData:tempAudioData];PADebug(@"data length:%zd", [newAudioData length]);[newAudioData writeToFile:音頻路徑 atomically:YES];}else{[tempAudioData writeToFile:[self configureAudioRecordFilePath:self.currentFileName] atomically:YES];}[[NSFileManager defaultManager]removeItemAtPath:音頻路徑 error:nil];}
對我項目影響最大的是,多次錄音時,并播放時,會出現文件錯誤。
在繼續利用recorder,player的前提下,就需要將每次錄音完成的文件進行數據追加。
總結
以上是生活随笔為你收集整理的ios 录音,播放 tips的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zbrush史上最全笔刷下载43G(12
- 下一篇: FLTK学习笔记3-随机点名器