日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ios 录音,播放 tips

發布時間:2023/12/31 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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簡單易用,但是有局限性。
    對我項目影響最大的是,多次錄音時,并播放時,會出現文件錯誤。
    在繼續利用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];}

總結

以上是生活随笔為你收集整理的ios 录音,播放 tips的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。