iOS录音开发

一,概述
  1. AVAudioRecorder录音
  • url:保存录音文件的沙盒路径
  • setting:录音格式设置

AVSampleRateKey: String 采样率 8000, 44100等
AVNumberOfChannelsKey: String 声道数 1为单声道, 2为双声道(立体声)
AVLinearPCMBitDepthKey: String 位宽 数据一般为: 8, 16, 24, 32
AVEncoderAudioQualityKey: String 录音质量,在AVAudioQuality枚举中,值有min low medium high max四个
AVLinearPCMIsBigEndianKey: String 大小端编码:1为大端, 0为小端.
AVFormatIDKey: String 录音数据格式 可以参考CoreAudio 里面相关的值

  1. AVAudioSession音频会话
  • Audio是iOS、tvOS和watchOS中的托管服务。系统通过使用音频会话管理应用程序、应用程序间和设备级别的音频行为。
    AVAudioSession
  • category:Category iOS下目前有七种,每种Category都对应是否支持下面四种能力

Interrupts non-mixable apps audio:是否打断不支持混音播放的APP
Silenced by the Silent switch:是否会响应手机静音键开关
Supports audio input:是否支持音频录制
Supports audio output:是否支持音频播放

category

参考资料 官方文档

二,基本实践应用

1.引入AVFoundation框架;

#import 
@property (nonatomic, strong) AVAudioRecorder *audioRecorder;//音频录音机
@property (nonatomic,copy) NSString *cafPathStr;//录音存放目录

2.录音对象AVAudioRecorder及初始化

/**
 *  获得录音机对象
 *
 *  @return 录音机对象
 */
-(AVAudioRecorder *)audioRecorder{
    if (!_audioRecorder) {
        //创建录音文件保存路径
        NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
        self.cafPathStr = [path stringByAppendingPathComponent:@“myRecord.caf”];
        NSURL *url = [NSURL URLWithString: self.cafPathStr];
        //创建录音格式设置,详见下文
        NSDictionary *setting = [self getAudioSetting];
        //创建录音机
        NSError *error=nil;
        _audioRecorder=[[AVAudioRecorder alloc]initWithURL:url settings:setting error:&error];
        //设置委托代理
        _audioRecorder.delegate=self;
        //如果要监控声波则必须设置为YES
        _audioRecorder.meteringEnabled=YES;
        if (error) {
            NSLog(@"创建录音机对象时发生错误,错误信息:%@",error.localizedDescription);
            return nil;
        }
    }
    return _audioRecorder;
}

3.录音格式设置

/**
 *  取得录音文件设置
 *  @return 录音设置
 */
-(NSDictionary *)getAudioSetting{
    //LinearPCM 是iOS的一种无损编码格式,但是体积较为庞大
    //录音设置
    NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] init];
    //录音格式 无法使用
    [recordSettings setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey: AVFormatIDKey];
    //采样率
    [recordSettings setValue :[NSNumber numberWithFloat:11025.0] forKey: AVSampleRateKey];//44100.0
    //通道数
    [recordSettings setValue :[NSNumber numberWithInt:2] forKey: AVNumberOfChannelsKey];
    //线性采样位数
    //[recordSettings setValue :[NSNumber numberWithInt:16] forKey: AVLinearPCMBitDepthKey];
    //音频质量,采样质量
    [recordSettings setValue:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];
    return recordSettings;
}

4.录音开始

#pragma mark -- 录音开始
- (void)startRecordNotice{
    if ([self.audioRecorder isRecording]) {
        [self.audioRecorder stop];
    }
    // 删掉录音文件
    [self.audioRecorder deleteRecording];
    //创建音频会话对象
    AVAudioSession *audioSession=[AVAudioSession sharedInstance];
   //设置category
    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
    if (![self.audioRecorder isRecording]){
        // 首次使用应用时如果调用record方法会询问用户是否允许使用麦克风
        [self.audioRecorder record];
    }
}

5.录音暂停和停止

//暂停录音
- (void)stopRecordNotice{
    [self.audioRecorder pause];
}

//结束录音
- (void)stopRecordNotice{
    [self.audioRecorder stop];
}

你可能感兴趣的:(iOS录音开发)