由于本人没有进行过专门的录制音频的项目开发,所以这里只是能完成一个可以录音的小demo。so,首先说一下苹果的API,AVFounditon.framework下的AVAudioRecorder。
AVAudioRecorder和AVAudioPlayer类似,功能类似于一个录音器,使用AVAudioRecorder录制视频十分简单。一般需要三步:
1、创建AVAudioRecorder对象,需要注意的是在创建AVAudioRecorder之前,需要准备一个NSDictiion的对象,对象中封装音频设置相关的音频信息。具体的key有AVFormatIDKey(音频格式)、AVSampleRateKey(采样率)、AVNumberOfChannelsKey(声道数)等,具体参照苹果的文档。关于声音有关的知识,只能求助于度娘了。
2、监听录制完成和被中断的事件。设置AVAudioRecorder代理,这里需要说明的是ios9已经废弃了AVAudioRecorder的中断代理方法,改用AVAudioSession的代理方法。
3、调用record方法录音。播放录音结果,用AVAudioPlayer。
具体实现:
1、导入AVFounditon头文件,#import<Foundation/Foundation.h>
2、设置音频会话,并设置音频类别和激活当前音频会话
- (void)viewDidLoad {
[superviewDidLoad];
[self.recorderBtnsetBackgroundImage:recordImageforState:UIControlStateNormal];
//获取当前应用的音频会话
AVAudioSession * audioSession = [AVAudioSessionsharedInstance];
//设置音频类别,PlayAndRecord——这说明当前音频会话即可播放、也可录制
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecorderror: nil];
//激活当前应用的音频会话
[audioSessionsetActive:YESerror: nil];
}
3、创建AVAudioRecorder和AVAudioPlayer,这里需要注意:这两个对象要设置为全局变量,要不然录音不成功
<1>设置NSDictionary
// 创建一个NSDictionary,用于保存录制属性
NSMutableDictionary *recordSettings = [[NSMutableDictionaryalloc] init];
// 设置录制音频的格式
[recordSettings setObject:[NSNumbernumberWithInt:kAudioFormatLinearPCM]
forKey: AVFormatIDKey];
NSString* sampleRate = [self.sampleRateSegtitleForSegmentAtIndex:
self.sampleRateSeg.selectedSegmentIndex];
// 设置录制音频的采样率
[recordSettingssetObject:[NSNumbernumberWithFloat:
sampleRate.floatValue]forKey: AVSampleRateKey];
// 设置录制音频的通道数
[recordSettingssetObject:
[NSNumbernumberWithInt:(self.stereoSwitch.on ?2 : 1)] forKey:AVNumberOfChannelsKey];
NSString* bitDepth = [self.bitDeptSegtitleForSegmentAtIndex: self.bitDeptSeg.selectedSegmentIndex];
// 设置录制音频的每个样点的位数
[recordSettingssetObject: [NSNumbernumberWithInt:bitDepth.intValue] forKey:AVLinearPCMBitDepthKey];
// 设置录制音频采用高位优先的记录格式
[recordSettingssetObject:[NSNumbernumberWithBool:YES] forKey:AVLinearPCMIsBigEndianKey];
// 设置采样信号采用浮点数
[recordSettingssetObject:[NSNumbernumberWithBool:YES] forKey:AVLinearPCMIsFloatKey];
<2>创建对象并设置代理,实现代理方法
// 初始化AVAudioRecorder
audioRecorder = [[AVAudioRecorderalloc] initWithURL:destinationURL settings:recordSettings error:&recorderSetupError];
audioRecorder.delegate = self;
<3>录制音频,在音频没有准备好的时候也会默认调用prepareToRecord方法
[audioRecorder record];