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

摘要:
方案一:使用AVAudioRecorder录制pcm数据格式文件,然后启动子线程循环遍历文件,读取pcm数据转码mp3并写入mp3文件(目前网上资料大多是这样)1.lame初始化&打开pcm、mp3文件获取文件指针单通道无需设置lame_set_model,因为api已经说明default:lamepicksbasedoncompressionrationandinputchannels(根据br

方案一:使用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()之前

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最后关闭文件

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

免责声明:文章转载自《IOS lame库 pcm转mp3 分析(方案一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇shellcode xor编码/解码[1]JavaScript面试题(持续更新)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java script btoa与atob的

javascript原生的api本来就支持,Base64,但是由于之前的javascript局限性,导致Base64基本中看不中用。当前html5标准正式化之际,Base64将有较大的转型空间,对于Html5 Api中出现的如FileReader Api, 拖拽上传,甚至是Canvas,Video截图都可以实现。 好了,前言说了一大堆,Base64转码和解...

二、实践与视频解决方案

一、视频解决方案 说明: 公司下户拍摄视频,上传存储一直用的优酷云(视频压缩、解码、播放)当然还支持水印。 现在场景,我们公司内部买服务器,下户拍摄视频上传到我们自己服务内,需要解决的问题,下户拍摄视频很大,需要解决的问题: 1、(下户视频过大)需要压缩处理、 2、(视频格式、播放帧处理)解码格式 3、(提供url)提供接口让内部人员可以播放  解决方案1...

[vue问题解决]vue-cli项目引用mui.js报错Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be...

引用mui.js 报错信息: Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them 方案一 原因:...

营销号视频生成器(Python)

网上最近很火的段子是各种营销号的文案,比方说下面的段子 核桃核不能吞下去是怎么回事呢?核桃核相信大家都很熟悉,但是核桃核不能吞下去是怎么回事呢,下面就让小编带大家一起了解吧。核桃核不能吞下去,其实就是核桃核太大了,吞下去容易噎着,大家可能会很惊讶核桃核怎么会不能吞下去呢?但事实就是这样,小编也感到非常惊讶。这就是关于核桃核不能吞下去的事情了,大家有什么想法...

树莓派打造音乐播放机

给树莓派装上系统接入网络完成各种配置后,第一件事就想把它连接上音箱当做音乐播放机来使用。树莓派官方系统已经有安装aplay软件可以播放音频文件。不过aplay支持的音频格式的支持不够完整,比如对mp3就不能很好支持。这里介绍几个音频播放软件的简单使用。 实验环境 硬件:树莓派3b一台 操作系统:Raspbian with Desktop   一、apl...

Unity中对输入的字符进行Unicode转码,并转回正常字符串 以及 GB2312转UTF-8 MD5码的转换

最近有个小的新需求,就是需要在程序中对Unicode进行转码.. 网上也有各种大神的教程.. https://blog.csdn.net/u011511086/article/details/72865006/ 然后我这里就模仿这个大神,做了一个小demo.. 源码如下... using System.Collections; using System.C...