是这样的:我想做一个录音功能,录音之后能够播放出来,,,,
但是无情的BUG伤害了我....
1.首先我注册了录音
//注册录音
[[AVAudioSessionsharedInstance]setCategory:AVAudioSessionCategoryRecorderror:&error];
if (error) {
NSLog(@"注册录音失败%@",error);
return;
}
2.设置保存路径
//设置路径
NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)lastObject];
NSString *filePath=[docPathstringByAppendingPathComponent:@"hello.AAC"];
NSLog(@"%@",filePath);
NSURL *fileURL=[NSURLfileURLWithPath:filePath];
3.设置设置参数
//录音:音频文件最小
// //settings 设置参数 录音相关参数 声道 速率 采样率
NSMutableDictionary *setting = [NSMutableDictionarydictionary];
//2.设置 录音参数
//音频格式
setting[AVFormatIDKey] =@(kAudioFormatMPEG4AAC);
//音频采样率
setting[AVSampleRateKey] =@(16000.0);
//音频通道数
setting[AVNumberOfChannelsKey] =@(1);
//线性音频的位深度
setting[AVLinearPCMBitDepthKey] =@(8);
//音频编码质量
setting[AVEncoderAudioQualityKey] =@(AVAudioQualityMin);
self.recorder=[[AVAudioRecorderalloc]initWithURL:fileURLsettings:settingerror:&error];
[self.recorderprepareToRecord];
//点击按钮 调用recod方法 开始录音
[self.recorderrecord];
重点是录音之后....读取的时候我们要将会话模式改回后台播放模式
[[AVAudioSessionsharedInstance]setCategory:AVAudioSessionCategoryPlaybackerror:nil];
用这个方法创建音乐播放器: _player =[[AVAudioPlayeralloc] initWithContentsOfURL:fileURLerror:&error];
但是这样我测试了,用AVAudioPlayer可以播放bundle路径里面的音乐,但是还是不能读取沙盒中的录音...!!!!
报出error:Domain=NSOSStatusErrorDomain Code=1937337955 这样的错误,这个错误很常见,原因是因为我们需要调用另外一个AVAudioPlayer 的初始化方法,来确定音频的解析模式.这个方法是:
NSData *data = [NSData dataWithContentsOfURL:fileURL];
_player = [[AVAudioPlayer alloc] initWithData:data fileTypeHint:AVFileTypeWAVE error:&error];
我们可以在ileTypeHint:参数中设置解析的模式,,一般 AAC类型的和WAV类型的音频文件,我们设置为AVFileTypeWAVE 解析模式就可以读取了,这样就完美的解决了沙盒录音及播放的问题..