2.1 方法一:录音结束恢复播放模式
/********************** 开始录音 **********************************/
- (void)onRecordSoundStart:(UIButton *)sender {
if (![self canRecord]) {
[[[UIAlertView alloc] initWithTitle:nil message:[NSString stringWithFormat:@"应用需要访问您的麦克风。\n请启用麦克风-设置/隐私/麦克风"]
delegate:nil
cancelButtonTitle:@"好"
otherButtonTitles:nil] show];
return;
}
[self initRecordSession];
NSDictionary *settings = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithFloat:44100.0], AVSampleRateKey , //采样率 8000/44100/96000
[NSNumber numberWithInt:kAudioFormatMPEG4AAC], AVFormatIDKey, //录音格式
[NSNumber numberWithInt:16], AVLinearPCMBitDepthKey, //线性采样位数 8、16、24、32
[NSNumber numberWithInt:2], AVNumberOfChannelsKey, //声道 1,2
[NSNumber numberWithInt:AVAudioQualityHigh], AVEncoderAudioQualityKey, //录音质量
nil];
NSURL *strURL = [NSURL fileURLWithPath:[self GetRecordSoundFileName:sender.tag]];
_recorder = [[AVAudioRecorder alloc] initWithURL:strURL settings:settings error:nil];
_recorder.meteringEnabled = YES;
_recorder.delegate = self;
[_recorder prepareToRecord];
[_recorder record];
_timerRec = [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(detectionVoice) userInfo:nil repeats:YES];
}
/********************** 结束录音 **********************************/
- (void)onRecordSoundStop:(UIButton *)sender {
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:nil]; //此处需要恢复设置回放标志,否则会导致其它播放声音也会变小
[session setActive:YES error:nil];
[_timerRec invalidate];
if (_recorder.currentTime > 1) {
[_recorder stop];
PlayNodeData *model = _dataOfVideoArrary[sender.tag];
model.hasSound = YES;
[_btnPlay setImage:[UIImage imageNamed:@"simulate_image_play1"] forState:UIControlStateNormal];
}
}
/********************** 录音器是否可用检查 **********************************/
- (BOOL)canRecord {
__block BOOL bCanRecord = YES;
if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0"] != NSOrderedAscending) {
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
if ([audioSession respondsToSelector:@selector(requestRecordPermission:)]) {
[audioSession performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {
if (granted) {
bCanRecord = YES;
}
else {
bCanRecord = NO;
}
}];
}
}
return bCanRecord;
}
/********************** 初始化录音器 **********************************/
- (void)initRecordSession {
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[session setActive:YES error:nil];
}
/********************** 录音中音量更新 **********************************/
- (void)detectionVoice {
return;
[_recorder updateMeters];//刷新音量数据
//获取音量的平均值 [recorder averagePowerForChannel:0];
//音量的最大值 [recorder peakPowerForChannel:0];
double lowPassResults = pow(10, (0.05 * [_recorder peakPowerForChannel:0]));
NSLog(@"%lf",lowPassResults);
//最大50 0
//图片 小-》大
if (0 < lowPassResults <= 0.06) {
;
}
else if (0.06 < lowPassResults <= 0.13) {
;
}
else if (0.13 < lowPassResults <= 0.20) {
;
}
else if (0.20 < lowPassResults <= 0.27) {
;
}
}