与使用AVAudioPlayer一样,AVAudioRecorder提供了功能强大而且简单易用的接口来实现音频的录制功能.
1.创建AVAudioRecorder
创建AVAudioRecorder实例时需要为其提供一些数据信息,如下:
- 用于表示音频流写入文件的本地文件URL
- 包含用于配置录音会话键值信息的NSDictionary对象
- 用于捕捉初始化阶段错误的NSError指针
上述条件具体的设置代码参考如下:
NSString *tmpDir = NSTemporaryDirectory();
NSString *filePath = [tmpDir stringByAppendingPathComponent:@"memo.caf"];
NSURL *fileURL = [NSURL fileURLWithPath:filePath];
NSDictionary *settings = @{
AVFormatIDKey : @(kAudioFormatAppleIMA4),
AVSampleRateKey : @44100.0f,
AVNumberOfChannelsKey : @1,
AVEncoderBitDepthHintKey : @16,
AVEncoderAudioQualityKey : @(AVAudioQualityMedium)
};
NSError *error;
self.recorder = [[AVAudioRecorder alloc] initWithURL:fileURL settings:settings error:&error];
if (self.recorder) {
self.recorder.delegate = self;
self.recorder.meteringEnabled = YES;
[self.recorder prepareToRecord];
} else {
NSLog(@"Error: %@", [error localizedDescription]);
}
为成功创建AVAudioRecorder实例,建议调用其prepareToRecord
方法.这个方法执行底层Audio Queue
初始化的必要过程.该方法还在URL参数指定的位置创建一个文件,将录制启动时的延时降到最小.
配置录音会话键值的完整可用键信息在<AVFoundation/AVAudioSettings.h>
中定义.大部分的键都专门定义了特有的格式,下面将介绍一些通用的音频格式.
1.1音频格式
AVFormatIDKey
键定义了写入内容的音频格式,下面的常量都是音频格式所支持的值:
- kAudioFormatLinearPCM
- kAudioFormatMPEG4AAC
- kAudioFormatAppleLossless
- kAudioFormatAppleMA4
- kAudioFormatiLBC
- kAudioFormatULaw
指定kAudioFormatLinearPCM会将未压缩的音频流写入到文件中.这种格式保真度最高,不过相应的文件也最大.选择诸如kAudioFormatMPEG4AAC或者kAudioFormatAppleMA4的压缩格式会显著缩小文件,也能保证高质量的音频内容.
注意,指定的音频格式一定要和URL参数定义的文件类型一致.否则会返回错误信息.
1.2采样率
AVSampleRateKey
用于定义录音的采样率.采样率定义了对输入的模拟音频信号每一秒内的采样数.采样率会直接影响录音的质量以及最终文件的大小.对于使用什么样的采样率最优没有明确的定义,不过开发者应该尽量使用标准的采样率,比如8K,16K,22050或44100.
1.3通道数
AVNumberOfChannelKey
用于定义记录音频内容的通道数.指定默认值1表示使用单声道录制,设置为2便是使用立体声录制.除非使用外部硬件,否则通常应当创建单声道录音.
1.4指定格式的键
处理Linear PCM或压缩音频格式时,可以定义一些其他指定格式的键.可以在Xcode的帮助文档AV Foundation Audio Settings Constants
中找到完整的列表.
2.控制录音过程
创建了一个可用的录音器实例后,就可以开始录音了.AVAudioRecorder包含一些方法可以支持无限时长的录制,比如在未来某一时间点开始录制,或者录制指定时长的内容等.开发者设置可以暂停录制并在之后从停止点继续重启录制.