iOS 录音格式问题

录音格式问题那些事

创建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
原本的无法播放的音频就可以播放了
就是这么简单

稍后再说这个格式转换框架

你可能感兴趣的:(iOS 录音格式问题)