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

方案一:使用 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文件

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #008400; background-color: #ffffff }
span.s1 { color: #000000 }
span.s2 { color: #ba2da2 }
span.s3 { color: #272ad8 }

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

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #008400; background-color: #ffffff }
span.s1 { color: #000000 }
span.s2 { color: #ba2da2 }
span.s3 { color: #4f8187 }

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文件

最后关闭文件

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #703daa; background-color: #ffffff }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #008400; background-color: #ffffff }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #31595d; background-color: #ffffff }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #31595d; background-color: #ffffff }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #000000; background-color: #ffffff }
span.s1 { color: #3e1e81 }
span.s2 { color: #4f8187 }
span.s3 { color: #272ad8 }
span.s4 { color: #78492a }

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

时间: 2024-08-02 08:29:58

IOS lame库 pcm转mp3 分析(方案一)的相关文章

Swift iOS实现把PCM语音转成MP3格式

最近折腾了swift的语音录制识别和转码,这块还是比较坑的,由于语音识别的准确度实测大概也就80%左右,所以还是需要上传录音文件啊.首先是用讯飞语音SDK实现语音录制和识别(语音听写),第一个坑是讯飞SDK只录制了PCM格式的文件,这个文件是原始格式,默认比较大,另外播放器支持也不好,因此需要先把它转成mp3,本来考虑使用系统的AudioConverter转aac格式,不过aac好像不能在浏览器上播放.转成mp3需要lame库支持,注意国内网搜到的lame.a库不支持64位,所以现在不能用了.还

PCM转换MP3的工具封装

说明 1. 对 PCM 转 MP3 进行了简单的封装. 2. 使用 https://github.com/wuqiong/mp3lame-for-iOS 生成支持64位的 lame 库. 源码 https://github.com/YouXianMing/iOS-General-Tools 中的 PCM-to-MP3 // // PcmToMp3Manager.h // RecordMusic // // Created by YouXianMing on 16/7/28. // Copyrig

iOS 第三方库、插件、知名博客总结

用到的组件1.通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友好化时间 MBProgressHUD一款提示框第三方库 MWPhotoBrowser一款简单的 iOS 照片浏览控件 CTAssetsPickerController一个选择器组件, 支持从用户的相片库选择多张照片和视频. QB

iOS第三方库汇总[转载]

iOS第三方库汇总[转载] 字数2179 阅读334 评论0 喜欢29 简介 此文用于总结,本人使用过或者收藏过的Github第三方类库,以便日后查阅,也便他人借鉴. 资料整理中不定期更新... 开源项目 CodeHub browse and maintain your GitHub repositories on any iOS device! Open-Source iOS Apps 开源iOS apps列表 APP相关 iVersion 提示版本更新 BonMot 字体相关的库,设置字体样

IOS静态库

如何在Xcode中创建C++静态库 http://jingyan.baidu.com/article/03b2f78c111fca5ea237ae26.html iOS 如何创建和使用静态库 http://blog.ibireme.com/2013/09/18/create-ios-static-framework/ iOS开发--创建你自己的Framework http://www.cocoachina.com/ios/20150127/11022.html https://www.raywe

iOS 静态库,动态库与 Framework

iOS 静态库,动态库与 Framework 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人看到源码,就需要以库的形式进行封装,只暴露出头文件.另外一种情况是,对于某些不会进行大的改动的代码,我们想减少编译的时间,就可以把它打包成库,因为库是已经编译好的二进制了,编译的时候只需要 Link 一下,不会浪费编译时间. 上面提到库在使用的时候需要

iOS 8:【转】封装iOS静态库注意事项

源地址:http://fann.im/blog/2014/01/12/ios-static-library/ 做一个 iOS 静态库需要注意的东西: namespace 冲突.静态库用了某第三方库,项目也用了同样的第三方库,在编译的时候就会有 duplicate symbol 错误,因为有两份同样的第三方库.解决办法就是把用到的第三方库加上自定义前缀,包括类名.delegate 协议.常量名,尤其需要注意 Category 的方法名要修改. 封装静态库的时候应尽量避免引入重量级第三方库,多自己进

ios ASIHttpRequest库进行DELETE操作时delete带有参数表单的使用方法

1,普通的DELETE只需加上下述一句code: [request setRequestMethod:@"DELETE"]; 2,附带有参数表单的情况(一次删除请求): ASIFormDataRequest *request; NSURL *baseURL = [NSURL URLWithString:@"http://www.baidu.com/xx/"]; request = [ASIFormDataRequest requestWithURL:baseURL]

iOS第三方库

热门iOS第三方库:看完,还敢自称”精通iOS开发”吗? 综合github上各个项目的关注度与具体使用情况,涵盖功能,UI,数据库,自动化测试,编程工具等类型,看完,还敢自称”精通iOS开发”吗? https://github.com/syedhali/EZAudio 基于核心音频,有助于进行实时,低延迟音频处理和可视化的iOS和OSX音频可视化框架. https://github.com/bang590/JSPatch JSPatch使用Objective-C运行时桥接Objective-C和