录音格式问题那些事
创建wav
格式录音
+ (AVAudioRecorder *)createRecorder {
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 *fileName = [[NSString an_randomString] stringByAppendingString:ALI_FileType];
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) firstObject];
NSString *filePath = [path stringByAppendingPathComponent:fileName];
[[NSUserDefaults standardUserDefaults] setObject:fileName forKey:ALI_Note_Voice];
[[NSUserDefaults standardUserDefaults]synchronize];
//2.获取文件路径
NSURL *recordFileUrl = [NSURL fileURLWithPath:filePath];
NSDictionary *recordSetting = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithFloat: 8000.0],AVSampleRateKey, //采样率
[NSNumber numberWithInt: kAudioFormatLinearPCM],AVFormatIDKey,
[NSNumber numberWithInt:16],AVLinearPCMBitDepthKey,//采样位数 默认 16
[NSNumber numberWithInt: 1], AVNumberOfChannelsKey,//通道的数目
// [NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey,//大端还是小端 是内存的组织方式
// [NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey,//采样信号是整数还是浮点数
[NSNumber numberWithInt: AVAudioQualityHigh],AVEncoderAudioQualityKey,//音频编码质量
nil];
AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:recordFileUrl settings:recordSetting error:nil];
if (recorder) {
[recorder prepareToRecord];
[recorder record];
}else{
NSLog(@"音频格式和文件存储格式不匹配,无法初始化Recorder");
}
return recorder;
}
但是WAV格式有优点也有缺点
优点一大堆
现在说我遇到的问题
wav格式录音在没有暂停的情况取本地文件是无法播放的。(除了VLC Google 等)至少在苹果浏览器是无法播放,而且iOS原生播放器没有经过处理的都是无法播放的;但是为什么我要选择wav。那就从项目的功能开始说起:
项目中用到语音转写 ,(音频文件转文字)*飞的api ;
*飞支持的音频格式 :
(2)输入音频的格式&比特率
如若条件允许,请尽量使用pcm,alaw或者ulaw编码的原始wav音频或者无损音
频压缩编码(FLAC)来录制以及传输音频。
如果有压缩需求,在原始音频比特率较高(大于16kHz*16bit)的情况下,可以
采用任意系统支持的格式;而在原始音频比特率较低(小于16kHz*16bit)的情
况下,建议采用压缩比小于10的opus,使用其他有损编码,如mp3,m4a等会
减弱识别准确率。
注,无压缩的pcm音频:比特率(bps)=采样率(kHz)*位数(bit)*声道数;其他类型音频的比特率可由查看其音频属性获得。
所以选择wav。
上面说到音频损坏怎么办?
当时在网上看到一个第三方框架
wav 转amr
Amr 转wav
救命稻草
先转amr 在转wav
原本的无法播放的音频就可以播放了
就是这么简单
稍后再说这个格式转换框架