一,概述
- AVAudioRecorder录音
- url:保存录音文件的沙盒路径
- setting:录音格式设置
AVSampleRateKey: String
采样率 8000, 44100等
AVNumberOfChannelsKey: String
声道数 1为单声道, 2为双声道(立体声)
AVLinearPCMBitDepthKey: String
位宽 数据一般为: 8, 16, 24, 32
AVEncoderAudioQualityKey: String
录音质量,在AVAudioQuality枚举中,值有min low medium high max四个
AVLinearPCMIsBigEndianKey: String
大小端编码:1为大端, 0为小端.
AVFormatIDKey: String
录音数据格式 可以参考CoreAudio 里面相关的值
- AVAudioSession音频会话
- Audio是iOS、tvOS和watchOS中的托管服务。系统通过使用音频会话管理应用程序、应用程序间和设备级别的音频行为。 AVAudioSession
- category:Category iOS下目前有七种,每种Category都对应是否支持下面四种能力
categoryInterrupts non-mixable apps audio:是否打断不支持混音播放的APP
Silenced by the Silent switch:是否会响应手机静音键开关
Supports audio input:是否支持音频录制
Supports audio output:是否支持音频播放
二,基本实践应用
1.引入AVFoundation框架;
#import <AVFoundation/AVFoundation.h>
@property (nonatomic, strong) AVAudioRecorder *audioRecorder;//音频录音机
@property (nonatomic,copy) NSString *cafPathStr;//录音存放目录
2.录音对象AVAudioRecorder及初始化
/**
* 获得录音机对象
*
* @return 录音机对象
*/
-(AVAudioRecorder *)audioRecorder{
if (!_audioRecorder) {
//创建录音文件保存路径
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
self.cafPathStr = [path stringByAppendingPathComponent:@“myRecord.caf”];
NSURL *url = [NSURL URLWithString: self.cafPathStr];
//创建录音格式设置,详见下文
NSDictionary *setting = [self getAudioSetting];
//创建录音机
NSError *error=nil;
_audioRecorder=[[AVAudioRecorder alloc]initWithURL:url settings:setting error:&error];
//设置委托代理
_audioRecorder.delegate=self;
//如果要监控声波则必须设置为YES
_audioRecorder.meteringEnabled=YES;
if (error) {
NSLog(@"创建录音机对象时发生错误,错误信息:%@",error.localizedDescription);
return nil;
}
}
return _audioRecorder;
}
3.录音格式设置
/**
* 取得录音文件设置
* @return 录音设置
*/
-(NSDictionary *)getAudioSetting{
//LinearPCM 是iOS的一种无损编码格式,但是体积较为庞大
//录音设置
NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] init];
//录音格式 无法使用
[recordSettings setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey: AVFormatIDKey];
//采样率
[recordSettings setValue :[NSNumber numberWithFloat:11025.0] forKey: AVSampleRateKey];//44100.0
//通道数
[recordSettings setValue :[NSNumber numberWithInt:2] forKey: AVNumberOfChannelsKey];
//线性采样位数
//[recordSettings setValue :[NSNumber numberWithInt:16] forKey: AVLinearPCMBitDepthKey];
//音频质量,采样质量
[recordSettings setValue:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];
return recordSettings;
}
4.录音开始
#pragma mark -- 录音开始
- (void)startRecordNotice{
if ([self.audioRecorder isRecording]) {
[self.audioRecorder stop];
}
// 删掉录音文件
[self.audioRecorder deleteRecording];
//创建音频会话对象
AVAudioSession *audioSession=[AVAudioSession sharedInstance];
//设置category
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
if (![self.audioRecorder isRecording]){
// 首次使用应用时如果调用record方法会询问用户是否允许使用麦克风
[self.audioRecorder record];
}
}
5.录音暂停和停止
//暂停录音
- (void)stopRecordNotice{
[self.audioRecorder pause];
}
//结束录音
- (void)stopRecordNotice{
[self.audioRecorder stop];
}
网友评论