iOS AVFoundation 系列一 (AVAudioRecorder)

使用AVAudioRecorder录制音频

一、创建AVAudioRecorder

创建AVAudioRecorder实例需要提供一些信息,分别是

  • 用于表示音频流写入的本地文件 URL
  • 用于配置录音会话键值信息的NSDictonary 对象
  • 用于捕获初始化阶段的各种错误的NSError 指针

下面看下初始化代码

- (AVAudioRecorder *)recorder{
    if (!_recorder) {
      
        //1.设置r录音存放的位置
        NSURL *url = [NSURL fileURLWithPath:self.recorderFileStr];
        
        //2. 设置录音参数
        NSMutableDictionary *settings = [[NSMutableDictionary alloc] init];
        //设置编码格式
        /**
         kAudioFormatLinearPCM: 无损压缩,内容非常大
         */
        [settings setValue:@(kAudioFormatLinearPCM) forKey:AVFormatIDKey];
        //设置采样率 必须保证和转码设置的相同
        [settings setValue:@(22050.0) forKey:AVSampleRateKey];
        //通道数
        [settings setValue:@(1) forKey:AVNumberOfChannelsKey];
        //音频质量,采样质量(音频质量越高,文件的大小也就越大)
        [settings setValue:@(AVAudioQualityMin) forKey:AVEncoderAudioQualityKey];

        
        _recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:nil];
        _recorder.meteringEnabled = YES;
    }
    return _recorder;
}

下面解释一下上面用到的一些参数

  • 音频格式 AVFormatIDKey
    kAudioFormatLinearPCM
    kAudioFormatAppleIMA4
    kAudioFormatMPEG4AAC

    指定kAudioFormatLinearPCM会将未压缩的音频流写入到文件 中。这种格式的保真度最好,但是文件也会很大,选择kAudioFormatAppleIMA4kAudioFormatMPEG4AAC会缩小文件大小,还能保证高质量的音频内容

注意:
你指定的音频格式一定要和你URL 定义的文件类型兼容,不然录制会失败。
如保存的文件名为`xxx.wav`则`AVFormatIDKey `要指定`kAudioFormatLinearPCM `

  • 采样率 AVSampleRateKey
    AVSampleRateKey用于定义录音器的采样率。采样率定义了对输入的模拟信号每一秒内的采样数。对于是么采样率最好没有明确的定义,但是尽量采用一些标准的采样率 如:8000160002205044100 采样率越高文件大小越大

  • 通道数 AVNumberOfChannelsKey
    AVNumberOfChannelsKey用于定义记录音频内容的通道数。默认是1,是使用单声道去录制的,设置为2的话是使用立体声去录制,除非使用外部硬件录制,不然一般都设置为单声道录制

二、配置音频会话 AVAudioSession

  • 音频会话分类
    AVFoundation 定义了7中分类来描述应用程序所使用的的音频行为


    image.png

*音频会话设置

 /**
         AVAudioSessionCategoryPlayAndRecord: 可以边播放边录音(也就是平时看到的背景音乐)
         */
        [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
        //启动会话
        [[AVAudioSession sharedInstance] setActive:YES error:nil];

三、简单的录音功能的实现

YMAudioRecordTool.h

/**开始录音*/
- (void)startRecordWithAudioRecordPath:(NSString *)recordPath;
/**结束录音*/
- (void)stopRecord;
/**播放录音*/
- (void)playRecordFile;
/**停止播放*/
- (void)stopPlaying;
/**删除录音文件*/
- (void)deleteRecordFile;

YMAudioRecordTool.m


@interface  YMAudioRecordTool ()
@property (nonatomic, strong) AVAudioRecorder *recorder;
@property (nonatomic, copy) NSString *recorderFileStr;
@property (nonatomic, strong) AVAudioPlayer *audioPlayer;


@end

@implementation YMAudioRecordTool

/**开始录音*/
- (void)startRecordWithAudioRecordPath:(NSString *)recordPath{
    if (!recordPath) {
        return ;
    }
    self.recorderFileStr = recordPath;
    // 准备录音
    [self.recorder prepareToRecord];
    // 开始录音
    [self.recorder record];
    
}
/**结束录音*/
- (void)stopRecord{
    [self.recorder stop];
}
/**播放录音*/
- (void)playRecordFile{
    [self.recorder stop];
    if ([self.audioPlayer isPlaying]) return;
    [_audioPlayer prepareToPlay];
    [_audioPlayer play];
}
/**停止播放*/
- (void)stopPlaying{
    [_audioPlayer stop];
}
/**删除录音文件*/
- (void)deleteRecordFile{
    [self.recorder stop];
    [self.recorder deleteRecording];
}


#pragma mark — lazyload
- (AVAudioRecorder *)recorder{
    if (!_recorder) {
        // 0. 设置录音会话
        /**
         AVAudioSessionCategoryPlayAndRecord: 可以边播放边录音(也就是平时看到的背景音乐)
         */
        [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
        //启动会话
        [[AVAudioSession sharedInstance] setActive:YES error:nil];
        
        //1.设置r录音存放的位置
        NSURL *url = [NSURL fileURLWithPath:self.recorderFileStr];
        
        //2. 设置录音参数
        NSMutableDictionary *settings = [[NSMutableDictionary alloc] init];
        //设置编码格式
        /**
         kAudioFormatLinearPCM: 无损压缩,内容非常大
         */
        [settings setValue:@(kAudioFormatLinearPCM) forKey:AVFormatIDKey];
        //设置采样率 必须保证和转码设置的相同
        [settings setValue:@(44100.0) forKey:AVSampleRateKey];
        //通道数
        [settings setValue:@(1) forKey:AVNumberOfChannelsKey];
        //音频质量,采样质量(音频质量越高,文件的大小也就越大)
        [settings setValue:@(AVAudioQualityMin) forKey:AVEncoderAudioQualityKey];

        
        _recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:nil];
        _recorder.meteringEnabled = YES;
    }
    return _recorder;
}

- (AVAudioPlayer *)audioPlayer{
    if (!_audioPlayer) {
        _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:self.recorderFileStr] error:nil];
    }
    return _audioPlayer;
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容