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

问题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格式的需求)