實(shí)現(xiàn)錄音功能可以使用AVAudioRecorder類身隐,我就不廢話了嘹害,直接上代碼:
#import <AVFoundation/AVFoundation.h>
@interface ViewController () <AVAudioRecorderDelegate>
/**
* 錄音器
*/
@property (nonatomic, strong) AVAudioRecorder *recoder;
/**
* 定時(shí)刷新器
*/
@property (nonatomic, strong) CADisplayLink *displayLink;
@end
@implementation ViewController
#pragma mark - 懶加載
- (CADisplayLink *)displayLink {
if (_displayLink == nil) {
_displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(meteringRecorder)];
}
return_displayLink;
}
- (void)viewDidLoad {
[super viewDidLoad];
// 設(shè)置錄音文件存儲(chǔ)路徑
NSString*path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString*filePath = [path stringByAppendingPathComponent:@"recorder.caf"];
NSURL *url = [NSURL fileURLWithPath:filePath];
// 設(shè)置錄音格式信息
NSMutableDictionary*settingsDict = [NSMutableDictionarydictionary];
// 音頻格式
settingsDict[AVFormatIDKey] =@(kAudioFormatAppleIMA4);
// 音頻采樣率
settingsDict[AVSampleRateKey] =@(8000.0);
// 音頻通道數(shù)
settingsDict[AVNumberOfChannelsKey] =@(1);
// 線性音頻的位深度
settingsDict[AVLinearPCMBitDepthKey] =@(8);
// 初始化錄音器
self.recoder = [[AVAudioRecorder alloc] initWithURL:url settings:settingsDict
error:nil];
// 設(shè)置代理
self.recoder.delegate = self;
// 允許監(jiān)聽錄音分貝
self.recoder.meteringEnabled= YES;
}
/**
* 開始錄音
*/
- (IBAction)start {
// 準(zhǔn)備錄音(會(huì)生成一個(gè)無效的目標(biāo)文件準(zhǔn)備開始錄音)
if([self.recoderprepareToRecord]) {
// 開始錄音
[self.recoder record];
// 實(shí)時(shí)監(jiān)聽分貝改變(根據(jù)分貝可以判斷是否需要錄音)
[self.displayLinkaddToRunLoop:[NSRunLoopmainRunLoop] forMode:NSRunLoopCommonModes];
}
}
- (void)meteringRecorder {
// 刷新錄音接收分貝
[self.recoderupdateMeters];
// 輸出平均分貝
NSLog(@"%f", [self.recoderaveragePowerForChannel:1]);
}
/**
* 停止錄音
*/
- (IBAction)stop {
// 停止錄音
[self.displayLinkinvalidate];
[self.recoder stop];
}
#pragma mark - AVAudioRecorder代理方法
- (void)audioRecorderBeginInterruption:(AVAudioRecorder *)recorder {
NSLog(@"開始被打斷");
[self.displayLinkinvalidate];
}
@end