和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 需要响应的更改,这个键的可选枚举值在文档中可以找到。