码迷,mamicode.com
首页 > 移动开发 > 详细

IOS lame库 pcm转mp3 分析(方案一)

时间:2018-09-01 15:55:31      阅读:679      评论:0      收藏:0      [点我收藏+]

标签:img   round   channel   文件头   base   格式   fse   关闭   write   

方案一:使用 AVAudioRecorder 录制pcm数据格式文件,然后启动子线程循环遍历文件,读取pcm数据转码mp3并写入mp3文件(目前网上资料大多是这样)

1.lame初始化 & 打开pcm、mp3文件 获取文件指针

单通道无需设置lame_set_model,因为api已经说明  default: lame picks based on compression ration and input channels(根据brate和channels默认设置)

扩展能力:写入文件头信息 例如 id3tag_set_artist ===》作者, 头信息设置必须在 lame_init_param()之前

技术分享图片

扩展能力:写入封面图(image)id3tag_set_albumart 

技术分享图片

打开文件获取文件指针(指向字节位置)

技术分享图片

 

2.遍历pcm文件,获取字节数据,转码,写入mp3文件

const int PCM_SIZE = 8192; // 相当于8192箱啤酒,一箱16瓶(啤酒=字节,8192个16字节的数据长度)

short int pcm_buffer[PCM_SIZE * self.realChannels]; // 填充 多少个pcm格式数据元素的数组

do{}while() 循环读取pcm文件,判断字节数是否大于设定的标准

 

技术分享图片

 

 

技术分享图片

 

跳过开头 fseek(pcm, 4 * 1024, SEEK_CUR);  过滤噪音

 

条件成熟,开始读取pcm文件数据并存入pcm_buffer中(文件指针会偏移到读取字节的末尾位置)

 

技术分享图片

 

将pcm_buffer中的数据转码成mp3格式数据并放入mp3_buffer中, 区分单&双通道

 

技术分享图片

 

需要注意write 有可能异常,正如api中所说

技术分享图片

 

把mp3_buffer中的数据写入mp3文件中

技术分享图片

 

 

while条件不符合的时候,跳出,仍要考虑不够标准的剩余的字节数据,也要转码并写入mp3文件

技术分享图片

 

最后关闭文件 

技术分享图片

 

 

IOS lame库 pcm转mp3 分析(方案一)

标签:img   round   channel   文件头   base   格式   fse   关闭   write   

原文地址:https://www.cnblogs.com/madaha/p/9570556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!