因为项目中有涉及到语音的内容,所以在这里实现一下说话时语音的音量图的展示
具体内容查看代码,有注释
语音内容的工具类:
static id instance;
#pragma mark - 单例
+ (instancetype)sharedRecordTool {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if (instance == nil) {
instance = [[self alloc] init];
}
});
return instance;
}
+ (instancetype)allocWithZone:(struct _NSZone *)zone {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if (instance == nil) {
instance = [super allocWithZone:zone];
}
});
return instance;
}
#pragma mark - 懒加载
- (AVAudioRecorder *)recorder {
if (!_recorder) {
// 真机环境下需要的代码
AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *sessionError;
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];
if(session == nil)
NSLog(@"Error creating session: %@", [sessionError description]);
else
[session setActive:YES error:nil];
// 1.获取沙盒地址
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *filePath = [path stringByAppendingPathComponent:LVRecordFielName];
self.recordFileUrl = [NSURL fileURLWithPath:filePath];
NSLog(@"输出文件地址。。。。%@", filePath);
// 3.设置录音的一些参数
NSMutableDictionary *setting = [NSMutableDictionary dictionary];
// 音频格式
setting[AVFormatIDKey] = @(kAudioFormatAppleIMA4);
// 录音采样率(Hz) 如:AVSampleRateKey==8000/44100/96000(影响音频的质量)
setting[AVSampleRateKey] = @(44100);
// 音频通道数 1 或 2
setting[AVNumberOfChannelsKey] = @(1);
// 线性音频的位深度 8、16、24、32
setting[AVLinearPCMBitDepthKey] = @(8);
//录音的质量
setting[AVEncoderAudioQualityKey] = [NSNumber numberWithInt:AVAudioQualityHigh];
_recorder = [[AVAudioRecorder alloc] initWithURL:self.recordFileUrl settings:setting error:NULL];
_recorder.delegate = self;
_recorder.meteringEnabled = YES;
[_recorder prepareToRecord];
}
return _recorder;
}
视图显示的View,方法调用:
#pragma mark - 录音按钮事件
// 按下
- (void)recordBtnDidTouchDown:(UIButton *)recordBtn {
[self.recordTool startRecording];
}
// 点击
- (void)recordBtnDidTouchUpInside:(UIButton *)recordBtn {
double currentTime = self.recordTool.recorder.currentTime;
NSLog(@".......%lf", currentTime);
if (currentTime < 2) {
self.imageView.image = [UIImage imageNamed:@"mic_0"];
[self alertWithMessage:@"说话时间太短"];
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[self.recordTool stopRecording];
[self.recordTool destructionRecordingFile];
});
} else {
NSLog(@"。。。。。。。。。");
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[self.recordTool stopRecording];
dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image = [UIImage imageNamed:@"mic_0"];
});
});
// 已成功录音
NSLog(@"已成功录音");
}
}
// 手指从按钮上移除
- (void)recordBtnDidTouchDragExit:(UIButton *)recordBtn {
self.imageView.image = [UIImage imageNamed:@"mic_0"];
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[self.recordTool stopRecording];
[self.recordTool destructionRecordingFile];
dispatch_async(dispatch_get_main_queue(), ^{
[self alertWithMessage:@"已取消录音"];
});
});
}