美文网首页技能
一站实现iOS录音文件转mp3格式的需求

一站实现iOS录音文件转mp3格式的需求

作者: 达若漠沙 | 来源:发表于2018-03-22 20:34 被阅读10次

    问题1、如何转

    导入第三方lame,本人使用的相关framework与头文件已上传百度云:https://pan.baidu.com/s/1D4lHLhcqtJiIv0DybT6fvA 密码: 5fwy

    导入注意事项,静态库的导入需要先将文件copy工程目录,然后再使用add file即可,否则会报错:

    先将lame放在工程目录,然后再选择add

    问题2、播放声音小

    在录音时这样设置AVAudioSession为:setCategory:AVAudioSessionCategoryPlayAndRecord

    -(AVAudioSession *)session {

        if(!_session){

            _session =[AVAudioSession sharedInstance];

            NSError *sessionError;

            [_session setCategory:AVAudioSessionCategoryPlayAndRecord

                            error:&sessionError];

        }

        return _session;

    }

    在播放时设置AVAudioSession为:setCategory:AVAudioSessionCategoryPlayback

        AVAudioSession *playSession =[AVAudioSession sharedInstance];

        [playSession setCategory:AVAudioSessionCategoryPlayback error:nil];

        [playSession setActive:YES error:nil];

    问题3、MP3文件需要以中文命名

    FILE *fopen(const char * __restrict __filename, const char * __restrict __mode)

    读取初始录音文件:

            FILE*pcm =fopen([soucePath  cStringUsingEncoding:1],   

                              "rb");// soucePath 待转换的音频文件位置

            fseek(pcm,4*1024,SEEK_CUR);// skip file header

            FILE *mp3 = fopen([desPath cStringUsingEncoding:4],

                              "wb");// desPath 输出生成的Mp3文件位置  

    - (nullableconstchar*)cStringUsingEncoding:(NSStringEncoding)encoding 中

    NSStringEncoding 是一个枚举类型:

        NSASCIIStringEncoding =1, /* 0..127 only */     初始录音文件设置的文件名为:test 因此选择此类型

        NSNEXTSTEPStringEncoding =2,

        NSJapaneseEUCStringEncoding =3,

        NSUTF8StringEncoding =4,           目标文件名为:iOS_程序员_111 因此选择此类型。

    问题4、沙盒路径中有中文,导致player初始化失败。

    今天我们从问题4说起。

    根据项目协议,mp3文件名的命名规则是这样的:iOS_工程师_888.mp3

    兴冲冲的直接调用

    NSURL  url =  [NSURL URLWithString:@"path/iOS_工程师_888.mp3"];

     player = [[AVAudioPlayer alloc] initWithContentsOfURL:url  error:&err];

    结果发现,点击播放的时候,竟然声音。开始怀疑是否是转格式的方法错误了,最后把文件copy到桌面,使用电播放,没毛病,可以播。

    断点调试,发现player  为 nil.推测是否是路径中的中文引起的?

    去掉中文后,手机端可以正常播放。于是,百度了一下,iOS url有中文,找到了如下方法。

    NSString* encodedString = [@"path/iOS_工程师_888.mp3" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    随后再次调用

    NSURL  url =  [NSURL URLWithString:encodedString];

     player = [[AVAudioPlayer alloc] initWithContentsOfURL:url  error:&err];

    重新运行,成功播放了含有中文路径的mp3文件。

    小结一下:如果是文件路径里有中文,直接转URL会失败,导致无法正确加载资源,所以player返回为空,不能播放。需要将带有中文的Str,使用指定方法转为合法的URL。

    相关文章

      网友评论

        本文标题:一站实现iOS录音文件转mp3格式的需求

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