音视频

iOS AVFoundation 系列一 (AVAudioRec

2019-10-22  本文已影响0人  allenzhan

使用AVAudioRecorder录制音频

一、创建AVAudioRecorder

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

下面看下初始化代码

- (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;
}

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

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

二、配置音频会话 AVAudioSession

*音频会话设置

 /**
         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;
}

上一篇下一篇

猜你喜欢

热点阅读