iOS 音頻錄制AMR和WAV互轉(zhuǎn)(支持64位)

公司項(xiàng)目中涉及到語音錄制的功能汉形,在錄音格式方面遇到一些小問題現(xiàn)在拿出來與大家分享一下。
眾所周知倍阐,iOS 音頻錄制是不支持AMR格式的概疆。但 Android 好像是默認(rèn)是AMR格式的。兩邊格式不同必然有一方做出妥協(xié)的收捣。這里只簡單介紹一下iOS 格式轉(zhuǎn)碼的方法届案。

1、音頻錄制簡介

AVFoundation框架中AVAudioRecorder類專門處理錄音操作罢艾,它支持多種音頻格式楣颠。這里以AVAudioRecorder錄制音頻,AVAudioPlayer播放音頻咐蚯。 在創(chuàng)建錄音時(shí)除了指定路徑外還必須指定錄音設(shè)置信息童漩,因?yàn)殇浺魰r(shí)必須知道錄音文件的格式、采樣率春锋、通道數(shù)矫膨、每個(gè)采樣點(diǎn)的位數(shù)等信息,但是也并不是所有的信息都必須設(shè)置,通常只需要幾個(gè)常用設(shè)置侧馅。關(guān)于錄音設(shè)置詳見幫助文檔中的“AV Foundation Audio Settings Constants”危尿。

2、相關(guān)庫導(dǎo)入

查了好久 轉(zhuǎn)碼好使的就是opencore-amr 編譯的靜態(tài)庫這里已經(jīng)為大家整理好了馁痴。
點(diǎn)擊這里下載
打開是醬紫滴谊娇!導(dǎo)入項(xiàng)目中就OK了。


新項(xiàng)目有BUGB拊巍<没丁!
開發(fā)遇到BUG很正常小渊,請?jiān)敿?xì)閱讀報(bào)錯(cuò)信息法褥。我只遇到這一個(gè)錯(cuò)先給大家展示出來。

選中你的Targets 選中Build Setting 點(diǎn)擊搜索框搜索BitCode 改成No 就OK了酬屉。
另外還需要導(dǎo)入兩個(gè)庫
#import <AVFoundation/AVFoundation.h>
#import <AudioToolbox/AudioToolbox.h>
引入頭文件
#import "VoiceConverter.h"

3半等、音頻錄制

  • 開始錄音
    //根據(jù)當(dāng)前時(shí)間生成文件名
    
    self.recordFileName = [ViewController GetCurrentTimeString];
    
    //獲取路徑
    
    NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    
    NSInteger timeStamp = [[NSDate date] timeIntervalSince1970] * 1000;
    
    self.recordFilePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.wav", @(timeStamp)]];
    
    NSDictionary *recordSetting = [[NSDictionary alloc] initWithObjectsAndKeys:
                                   [NSNumber numberWithFloat: 8000.0],AVSampleRateKey, //采樣率
                                   [NSNumber numberWithInt: kAudioFormatLinearPCM],AVFormatIDKey,
                                   [NSNumber numberWithInt:16],AVLinearPCMBitDepthKey,//采樣位數(shù) 默認(rèn) 16
                                   [NSNumber numberWithInt: 1], AVNumberOfChannelsKey,//通道的數(shù)目
                                   //                                   [NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey,//采樣信號是整數(shù)還是浮點(diǎn)數(shù)
                                   //                                   [NSNumber numberWithInt: AVAudioQualityMedium],AVEncoderAudioQualityKey,//音頻編碼質(zhì)量
                                   nil];
    
    //初始化錄音
    
    self.recorder = [[AVAudioRecorder alloc]initWithURL:[NSURL fileURLWithPath:self.recordFilePath]
                                               settings:recordSetting
                                                  error:nil];
    //準(zhǔn)備錄音
    
    if ([self.recorder prepareToRecord]){
        
        [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error:nil];
        [[AVAudioSession sharedInstance] setActive:YES error:nil];
        
        //開始錄音
        if ([self.recorder record]){
           
            //UI操作
       
        }
    }else{
        
        NSLog(@"音頻格式出錯(cuò),Recorder---%@",self.recorder);
        
        }
  • 停止錄音
if (self.recorder.isRecording){
        
        //停止錄音
        
        [self.recorder stop];
        
    }
  • 生成當(dāng)前時(shí)間字符串
+(NSString*)GetCurrentTimeString{
    
    NSDateFormatter *dateformat = [[NSDateFormatter  alloc]init];
    
    [dateformat setDateFormat:@"yyyyMMddHHmmss"];
    
    return [dateformat stringFromDate:[NSDate date]];
}
  • 生成文件路徑
+(NSString*)GetPathByFileName:(NSString *)_fileName ofType:(NSString *)_type{ 

 NSString *directory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSString* fileDirectory = [[[directory stringByAppendingPathComponent:_fileName]
                                stringByAppendingPathExtension:_type]
                               stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
 return fileDirectory;
}

4、格式轉(zhuǎn)換

  • WAV轉(zhuǎn)AMR
NSString *amrPath = [ViewController GetPathByFileName:self.recordFileName ofType:@"amr"];
  
        if ([VoiceConverter ConvertAmrToWav:self.recordFilePath wavSavePath:amrPath]) {
            
            //UI操作 播放音頻
            
        }else{
            
            NSLog(@"wav轉(zhuǎn)amr失敗");
        }
  • AMR轉(zhuǎn)WAV
  NSString  *convertedPath = [ViewController GetPathByFileName:[self.recordFileName stringByAppendingString:@"_AmrToWav"] ofType:@"wav"];
    if ([VoiceConverter ConvertAmrToWav:amrPath wavSavePath:convertedPath]){
        
        //UI操作 播放音頻
        
    }else{
        
        NSLog(@"amr轉(zhuǎn)wav 轉(zhuǎn)換失敗");
    }

5呐萨、總結(jié)

由于時(shí)間關(guān)系暫時(shí)寫這么多 酱鸭,后面上傳會給大家補(bǔ)上。(未完待續(xù)垛吗。凹髓。。怯屉。)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蔚舀,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子锨络,更是在濱河造成了極大的恐慌赌躺,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羡儿,死亡現(xiàn)場離奇詭異礼患,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)掠归,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門缅叠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人虏冻,你說我怎么就攤上這事肤粱。” “怎么了厨相?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵领曼,是天一觀的道長鸥鹉。 經(jīng)常有香客問我,道長庶骄,這世上最難降的妖魔是什么毁渗? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮单刁,結(jié)果婚禮上祝蝠,老公的妹妹穿的比我還像新娘。我一直安慰自己幻碱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布细溅。 她就那樣靜靜地躺著褥傍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喇聊。 梳的紋絲不亂的頭發(fā)上恍风,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音誓篱,去河邊找鬼朋贬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛窜骄,可吹牛的內(nèi)容都是我干的锦募。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼邻遏,長吁一口氣:“原來是場噩夢啊……” “哼糠亩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起准验,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤赎线,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后糊饱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垂寥,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年另锋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了滞项。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡夭坪,死狀恐怖蓖扑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情台舱,我是刑警寧澤律杠,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布潭流,位于F島的核電站,受9級特大地震影響柜去,放射性物質(zhì)發(fā)生泄漏灰嫉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一嗓奢、第九天 我趴在偏房一處隱蔽的房頂上張望讼撒。 院中可真熱鬧,春花似錦股耽、人聲如沸根盒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炎滞。三九已至,卻和暖如春诬乞,著一層夾襖步出監(jiān)牢的瞬間册赛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工震嫉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留森瘪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓票堵,卻偏偏與公主長得像扼睬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子悴势,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容