AVFoundation-錄音

錄音

0. 應(yīng)用場(chǎng)景

    語(yǔ)音聊天:大多數(shù)應(yīng)用在即時(shí)通訊APP中, 語(yǔ)音發(fā)送
    語(yǔ)音備忘錄:錄一段音頻, 來(lái)記錄某件事情

1. 錄音步驟

  1. 導(dǎo)入AVFoundation框架

        // OC
        #import <AVFoundation/AVFoundation.h>
    
        // swift
        import AVFoundation
    
  2. 使用類AVAudioRecorder進(jìn)行錄音

    1. objc
    // 1. 創(chuàng)建錄音文件存放路徑
        NSString *path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"text.caf"];
        NSURL *url = [NSURL URLWithString:path];
    
    // 2. 設(shè)置錄音附加設(shè)置項(xiàng)(#import <AVFoundation/AVAudioSettings.h>),固定配置
          NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] init];
        // 設(shè)置編碼格式
        [recordSettings setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey: AVFormatIDKey];
        // 采樣率
        [recordSettings setValue :[NSNumber numberWithFloat:11025.0] forKey: AVSampleRateKey];//44100.0
        // 通道數(shù)
        [recordSettings setValue :[NSNumber numberWithInt:2] forKey: AVNumberOfChannelsKey];
        //音頻質(zhì)量,采樣質(zhì)量
        [recordSettings setValue:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];
    
    // 3. 根據(jù)路徑以及設(shè)置項(xiàng), 創(chuàng)建錄音對(duì)象
        _audioRecorder = [[AVAudioRecorder alloc] initWithURL:url settings:recordSettings error:nil];
    
    // 4. 準(zhǔn)備錄音
        [self.audioRecorder prepareToRecord];
    
    // 5. 開(kāi)始錄音
         [self.audioRecorder record];
    
    // 6. 停止錄音
        [self.audioRecorder stop];
    
    1. swift
    var record: AVAudioRecorder?
    
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    
        // 開(kāi)始錄音
        // 1.1 創(chuàng)建路徑
        let path = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).first)!
    
        let filePath = path + "/test.caf"
        print(filePath)
        let fileURL = NSURL(string: filePath)!
    
        // 1.2 創(chuàng)建一個(gè)錄音配置字典
        // 錄音參數(shù)設(shè)置(不需要掌握, 一些固定的配置)
        // 這個(gè)配置, 可以保證, 音質(zhì)比較好的情況下, 大小也適中
        let configDic: [String: AnyObject] = [
            // 編碼格式
            AVFormatIDKey: NSNumber(int: Int32(kAudioFormatLinearPCM)),
            // 采樣率
            AVSampleRateKey: NSNumber(float: 11025.0),
            // 通道數(shù)
            AVNumberOfChannelsKey: NSNumber(int: 2),
            // 錄音質(zhì)量
            AVEncoderAudioQualityKey: NSNumber(int: Int32(AVAudioQuality.Min.rawValue))
        ]
    
        do {
        // 1.3 創(chuàng)建錄音對(duì)象
            record = try AVAudioRecorder(URL: fileURL, settings: configDic)
        }catch {
            print(error)
            return
        }
    
        // 2. 準(zhǔn)備錄音
        record?.prepareToRecord()
    
        // 3. 開(kāi)始錄音
        record?.record()
    
        // 從設(shè)置的時(shí)間點(diǎn),開(kāi)始錄音
    //      record?.recordAtTime((record?.deviceCurrentTime)! + 2)
        // 從后面的某個(gè)時(shí)間點(diǎn), 錄音多久
    //      record?.recordAtTime((record?.deviceCurrentTime)! + 2, forDuration: 3)
        // 從當(dāng)前時(shí)刻開(kāi)始錄音, 錄音多久
    //        record?.recordForDuration(2)
    }
    
    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
    
        // 獲取當(dāng)前的錄音時(shí)間(長(zhǎng)度, 錄音多久了)
        let duration = record?.currentTime ?? 0
    
        if duration < 2 {
            print("錄音時(shí)間太短, 清重新錄音")
    
            // 刪除當(dāng)前錄音的文件
            // 刪除文件, 一定要保證, 錄音停止
            record?.stop()
            record?.deleteRecording()
            return
        }
    
        print("錄音時(shí)間剛剛好,可以保存")
        record?.stop()
    
        // 可參考本文第5點(diǎn)通過(guò)lame轉(zhuǎn)音頻文件轉(zhuǎn)碼
    }
    
  3. 概念補(bǔ)充
    1. 編碼概念:編碼是信息從一種形式轉(zhuǎn)換為另一種形式的過(guò)程
    2. 編碼格式
    > AAC: AAC其實(shí)是“高級(jí)音頻編碼(advanced audio coding)”的縮寫(xiě),它是被設(shè)計(jì)用來(lái)取代MP3格式的。
    > HE-AAC: HE-AAC是AAC的一個(gè)超集规揪,這個(gè)“HE”代表的是“High efficiency”泳姐。 HE-AAC是專門為低比特率所優(yōu)化的一種音頻編碼格式
    > AMR: AMR全稱是“Adaptive Multi-Rate”度苔,它也是另一個(gè)專門為“說(shuō)話(speech)”所優(yōu)化的編碼格式匆篓,也是適合低比特率環(huán)境下采用
    > ALAC: 它全稱是“Apple Lossless”,這是一種沒(méi)有任何質(zhì)量損失的音頻編碼方式寇窑,也就是我們說(shuō)的無(wú)損壓縮
    > IMA4: 這是一個(gè)在16-bit音頻文件下按照4:1的壓縮比來(lái)進(jìn)行壓縮的格式鸦概。
    > MP3
    > LPCM : 即線性脈沖編碼調(diào)制,是一種非壓縮音頻數(shù)字化技術(shù)甩骏,是一種未壓縮的原音重現(xiàn);數(shù)字模式下, 音頻的初始信號(hào)是PCM

         > 參考資料地址
         http://baike.baidu.com/link?url=z36Nw7UihAEnCC6BjCygft9rBpLr29Ru0of_9Blpl0aR6qzI1B9iWTD5h3uimPVix2SuuQYo7GVYOIsaaP2Eyq
    
     3. 文件格式(不同的文件格式, 可保存不同的編碼格式)
         > WAV :
             特點(diǎn): 音質(zhì)最好的格式, 對(duì)應(yīng)PCM編碼
             適用: 多媒體開(kāi)發(fā)窗市、保存音樂(lè)和音效素材。
    
         > MP3 :
             特點(diǎn): 音質(zhì)好饮笛,壓縮比比較高咨察,被大量軟件和硬件支持
             適用: 適合用于比較高要求的音樂(lè)欣賞。
    
         > caf :
             特點(diǎn): 適用于幾乎iOS中所有的編碼格式
    
  4. 開(kāi)發(fā)經(jīng)驗(yàn)
    1. caf 文件格式, 因?yàn)槟承┚幋a設(shè)置, 文件有可能會(huì)很大, 而且caf, 格式并不是很通用, 所以在開(kāi)發(fā)過(guò)程中, 一般會(huì)進(jìn)行壓縮轉(zhuǎn)碼, MP3;

  5. 使用lame靜態(tài)庫(kù)轉(zhuǎn)碼

    • iOS 通過(guò)(lame)將錄制音頻轉(zhuǎn)換成Mp3
      1. LAME是一個(gè)開(kāi)源的MP3音頻壓縮軟件福青。LAME是一個(gè)遞歸縮寫(xiě)摄狱,來(lái)自LAME Ain't an MP3 Encoder(LAME不是MP3編碼器)。它自1998年以來(lái)由一個(gè)開(kāi)源社區(qū)開(kāi)發(fā)无午,目前是公認(rèn)有損品質(zhì)MP3中壓縮效果最好的編碼器媒役。
      2. 步驟:
      第一步: 下載lame的最新版本并解壓:http://sourceforge.net/projects/lame/files/lame/3.99/
      第二步:生成靜態(tài)庫(kù)
      1. 下載build的腳本:https://github.com/kewlbear/lame-ios-build
      2. 提升權(quán)限:命令行中輸入sudo -s
      3. 修改腳本權(quán)限(所有人有可執(zhí)行權(quán)限):chmod a+x 腳本名稱
      4. 執(zhí)行腳本:./腳本名稱
      5. 注意: 如果最終沒(méi)有生成靜態(tài)庫(kù):
      1. 先檢查XCode應(yīng)用名稱是否是XCode(后面不要加2, 3 之類的東西)
      2. commod + , 把命令行工具選中
      第三步:導(dǎo)入靜態(tài)庫(kù)到工程, 開(kāi)始使用,最好封裝成一個(gè)分類宪迟,提供一個(gè)轉(zhuǎn)碼的方法
  6. 錄音其他使用

  7. 錄音詳解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末酣衷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子次泽,更是在濱河造成了極大的恐慌穿仪,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件箕憾,死亡現(xiàn)場(chǎng)離奇詭異牡借,居然都是意外死亡拳昌,警方通過(guò)查閱死者的電腦和手機(jī)袭异,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)炬藤,“玉大人御铃,你說(shuō)我怎么就攤上這事∩蚩螅” “怎么了上真?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)羹膳。 經(jīng)常有香客問(wèn)我睡互,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任就珠,我火速辦了婚禮寇壳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妻怎。我一直安慰自己壳炎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布逼侦。 她就那樣靜靜地躺著匿辩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪榛丢。 梳的紋絲不亂的頭發(fā)上铲球,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音晰赞,去河邊找鬼睬辐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛宾肺,可吹牛的內(nèi)容都是我干的溯饵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼锨用,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼丰刊!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起增拥,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤啄巧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后掌栅,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體秩仆,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年猾封,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了澄耍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晌缘,死狀恐怖齐莲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情磷箕,我是刑警寧澤选酗,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站岳枷,受9級(jí)特大地震影響芒填,放射性物質(zhì)發(fā)生泄漏呜叫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一殿衰、第九天 我趴在偏房一處隱蔽的房頂上張望怀偷。 院中可真熱鬧,春花似錦播玖、人聲如沸椎工。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)维蒙。三九已至,卻和暖如春果覆,著一層夾襖步出監(jiān)牢的瞬間颅痊,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工局待, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斑响,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓钳榨,卻偏偏與公主長(zhǎng)得像舰罚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子薛耻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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

  • 1. 導(dǎo)入錄音功能依賴的框架 2. 在相應(yīng)界面引入頭文件 然后遵守協(xié)議AVAudioRecorderDelegat...
    黑白灰的綠i閱讀 6,465評(píng)論 6 13
  • 需要使用AVFoundatiaon框架 創(chuàng)建錄音對(duì)象 根據(jù)需求, 進(jìn)行錄音/暫停/停止3.1開(kāi)始錄音 3.2暫停錄...
    e85a0a8a9ba4閱讀 834評(píng)論 0 4
  • 1.界面布局饼齿,以及相關(guān)功能 點(diǎn)擊中間開(kāi)始錄音饲漾,點(diǎn)擊左上角播放或暫停播放,點(diǎn)擊右上角移除文件 2.定義相關(guān)屬性 #i...
    大雨可洗頭閱讀 5,296評(píng)論 4 5
  • 簡(jiǎn)介 簡(jiǎn)單來(lái)說(shuō)缕溉,音頻可以分為2種 音效 又稱“短音頻”考传,通常在程序中的播放時(shí)長(zhǎng)為1~2秒 在應(yīng)用程序中起到點(diǎn)綴效果...
    JonesCxy閱讀 925評(píng)論 1 2
  • 雷聲漸漸響起趟庄,女孩走在馬路邊臭脓。一輛車向她這沖過(guò)來(lái),女孩沒(méi)有躲開(kāi)蛀恩,臉上沒(méi)有絲毫恐懼敌土。"慕依依镜硕,你不是瘋了运翼。"女...
    筱千瑤閱讀 582評(píng)論 1 0