美文网首页
iOS 录音格式问题

iOS 录音格式问题

作者: 开洋_shen | 来源:发表于2018-06-02 01:24 被阅读0次

    录音格式问题那些事

    创建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 录音格式问题

          本文链接:https://www.haomeiwen.com/subject/uculsftx.html