使用AVAudioRecorder录制音频数据
1. 包含头文件#import <AVFoundation/AVFoundation.h>
2. 创建属性:录音对象、播放对象、存放录音文件的URL
@property (nonatomic, strong) AVAudioRecorder *recorder; @property (nonatomic, strong) AVAudioPlayer *player; @property (nonatomic, strong) NSURL *recordURL;
3. 设置支持AVAudioSession支持录音和回放功能
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
4. 录音前准备和设置工作
NSMutableDictionary *setting = [NSMutableDictionary dictionary]; // 编码格式 setting[AVFormatIDKey] = @(kAudioFormatAppleIMA4); // 采样率 setting[AVSampleRateKey] = @(44100); // 声道数 setting[AVNumberOfChannelsKey] = @2; // 量化位数 setting[AVLinearPCMBitDepthKey] = @16; // 编码质量 setting[AVEncoderAudioQualityKey] = @(AVAudioQualityHigh); NSError *error; _recorder = [[AVAudioRecorder alloc] initWithURL:self.recordURL settings:setting error:&error]; if (error != nil) { NSLog(@"error >>> %@", error); } // 准备录制 [_recorder prepareToRecord];
5. 懒加载
- (NSURL *)recordURL { if (_recorder == nil) { NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; //当使用kAudioFormatAppleIMA4编码格式时,生成的文件格式为caf NSString *path = [docPath stringByAppendingPathComponent:@"test.caf"]; _recordURL = [NSURL URLWithString:path]; } return _recordURL; } - (AVAudioPlayer *)player { if (_player == nil) { _player = [[AVAudioPlayer alloc] initWithContentsOfURL:self.recordURL error:nil]; _player.numberOfLoops = 1; [_player prepareToPlay]; } return _player; }
6. 录音/播放控制
- (IBAction)startRecord:(UIButton *)sender { [_recorder record]; //开始录音 } - (IBAction)startPlay:(UIButton *)sender { [self.player play]; //开始播放 } - (IBAction)endRecord:(UIButton *)sender { [_recorder stop]; //结束录音 } - (IBAction)endPlay:(UIButton *)sender { [self.player stop]; //停止播放 }