AVFoundation框架之錄音(AVAudioRecorder)

錄音屬于AVFAudio里面的一個(gè)高級(jí)封裝。在實(shí)際運(yùn)用中,可以使用到語音錄制,比如聊天等。這個(gè)對(duì)語音錄制做一個(gè)簡(jiǎn)單的了解。

1.基礎(chǔ)配置

    /*
     
     音頻基礎(chǔ)
     
     聲波是一種機(jī)械波,是一種模擬信號(hào)。
     PCM,全稱脈沖編碼調(diào)制,是一種模擬信號(hào)的數(shù)字化的方法。
     采樣精度(bit pre sample),每個(gè)聲音樣本的采樣位數(shù)。
     采樣頻率(sample rate)每秒鐘采集多少個(gè)聲音樣本。
     聲道(channel):相互獨(dú)立的音頻信號(hào)數(shù),單聲道(mono)立體聲(Stereo)
     語音幀(frame),In audio data a frame is one sample across all channels.
     
     */
    // 語音錄制
    
    // 格式(真機(jī))
    NSMutableDictionary *recordSetting = [NSMutableDictionary dictionary];
    NSError *error = nil;
    NSString *outputPath = nil;

    // 輸出地址
#if TARGET_IPHONE_SIMULATOR//模擬器

    outputPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"1.caf"];
    // 設(shè)置錄音格式
    [recordSetting setObject:@(kAudioFormatLinearPCM) forKey:AVFormatIDKey];
    
#elif TARGET_OS_IPHONE//真機(jī)
    
    NSString *outputPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"1.m4a"];
    [recordSetting setObject:@(kAudioFormatMPEG4AAC) forKey:AVFormatIDKey];

#endif

    // 設(shè)置錄音采樣率
    [recordSetting setObject:@(8000) forKey:AVSampleRateKey];
    // 設(shè)置通道,這里采用單聲道 1:單聲道;2:立體聲
    [recordSetting setObject:@(1) forKey:AVNumberOfChannelsKey];
    // 每個(gè)采樣點(diǎn)位數(shù),分為8、16、24、32
    [recordSetting setObject:@(8) forKey:AVLinearPCMBitDepthKey];
    
    // 大端還是小端,是內(nèi)存的組織方式
    [recordSetting setObject:@(NO) forKey:AVLinearPCMIsBigEndianKey];
    // 是否使用浮點(diǎn)數(shù)采樣
    [recordSetting setObject:@(YES) forKey:AVLinearPCMIsFloatKey];
    // 是否交叉
    [recordSetting setObject:@(NO) forKey:AVLinearPCMIsNonInterleaved];
    
    // 設(shè)置錄音質(zhì)量
    [recordSetting setObject:@(AVAudioQualityMin) forKey:AVEncoderAudioQualityKey];
    
    // 比特率
    [recordSetting setObject:@(128000) forKey:AVEncoderBitRateKey];
    // 每個(gè)聲道音頻比特率
    [recordSetting setObject:@(128000) forKey:AVEncoderBitRatePerChannelKey];
    
    // 深度
    [recordSetting setObject:@(8) forKey:AVEncoderBitDepthHintKey];
    
    // 設(shè)置錄音采樣質(zhì)量
    [recordSetting setObject:@(AVAudioQualityMin) forKey:AVSampleRateConverterAudioQualityKey];
    
    // 策略 AVSampleRateConverterAlgorithmKey
    // 采集率算法 AVSampleRateConverterAlgorithmKey
    // 渠道布局 AVChannelLayoutKey
 

2.錄音類初始化

// 初始化
AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:[NSURL fileURLWithPath:outputPath] settings:recordSetting error:&error];
// 設(shè)置協(xié)議
recorder.delegate = self;
// 準(zhǔn)備錄制
[recorder prepareToRecord];

3.錄音

[recorder record];

4.暫停

[recorder pause];

5.停止

[recorder stop];

6.協(xié)議

// 錄音結(jié)束
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag{
    
    NSLog(@"%@", recorder.url);
}

// 發(fā)生錯(cuò)誤調(diào)用
- (void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder *)recorder error:(NSError *)error {

    NSLog(@"%@", error);
}

demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評(píng)論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,035評(píng)論 4 61
  • 文/譽(yù)恬家 1. “要想致富,就要節(jié)流開源!” 對(duì)于很多人來說,開源是個(gè)技術(shù)活。 尤其對(duì)于我們這樣的普通人,專業(yè)性...
    跳完舞閱讀 1,504評(píng)論 1 3
  • 人生,不是自己可以掌握的,你不會(huì)知道下一秒會(huì)發(fā)生,前一秒的歡天喜地,后一秒的墜落深淵,我們無法預(yù)知下一秒會(huì)發(fā)生什么...
    Ismoney閱讀 162評(píng)論 0 0
  • 父母的影響在戀愛甚至婚姻方面很大,除非一個(gè)人完全脫離自己的家庭。有些時(shí)候,這種影響是潛移默化的,難以被感知的。當(dāng)然...
    阿怡是娉爺閱讀 334評(píng)論 0 1

友情鏈接更多精彩內(nèi)容