iOS 使用AVAudioRecorder实现音频的录制

来源:互联网 发布:淘宝店铺装修 知乎 编辑:程序博客网 时间:2024/05/17 04:08

      和AVAudioPlayer类似,AVAudioRecorder也是AVFoundtion框架的,而且在结构、属性上也挺相似。

    1、构建:

  使用方法:

- (id)initWithURL:(NSURL *)url settings:(NSDictionary *)settings error:(NSError **)outError
   参数url是录制的音频文件的路径,注意不是文件存放的文件夹的路径,是包含文件一起的完整路径,如: file:///var/mobile/Applications/2EB555A9-C09B-4269-B0B3-F479A39F6784/Documents/recordedFiles/-2118413987.wav。

   settings是一个字典,包含了对于AVAudioRecorder的对象的许多配置信息,关于所包含的键值,文档里有链接。一般的配置如下:

NSDictionary *setting = [[NSDictionary alloc] initWithObjectsAndKeys:                              [NSNumber numberWithFloat: 44100.0],AVSampleRateKey,                              [NSNumber numberWithInt: kAudioFormatLinearPCM],AVFormatIDKey,                              [NSNumber numberWithInt:16],AVLinearPCMBitDepthKey,                              [NSNumber numberWithInt: 2], AVNumberOfChannelsKey,                              [NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey,                              [NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey,nil];

  2、录制:

   录制就是调用:

[_audioRecorder prepareToRecord] [_audioRecorder record]

prepareToRecord 这个方法会根据上面构建时提供的路径构建一个音频文件,如果已经有同名文件,会替换掉之前的。然后这个方法会有一个bool的返回值,如果文件路径不可使用,会返回NO;如果音频文件格式是不支持的格式,也会返回NO。所以有必要在这做个判断。

   但是在prepareToRecord之前需要调整一个属性,关于应用音频方面的一些性质的调节:

AVAudioSession *audioSession = [AVAudioSession sharedInstance];    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];    [audioSession setActive:YES error:nil];
需要把AVAudioSession的category设为AVAudioSessionPlayAndRecord或AVAudioSessionRecord;并且设置active为YES来激活。在播放的时候,需要把category调回AVAudioSessionPlayback,否则会声音特别小。

 录制过程中可以使用pause 方法来暂停,使用stop方法来停止。停止之后,一段录音就有了。

  对于录音文件的格式也有一定要求,没有全部测试,.caf  .wav .aac 是可以的,.mp3是不行的。而且选择特定格式时,构建时用到的settings中的AVFormatIDKey需要响应的更改,这个键的可选枚举值在文档中可以找到。

    

0 0