安卓音频开发(四)使用lame把wav转mp3
在上文中,展示了安卓项目如何构建lame,接下来,我们要使用lame把wav音频转为mp3。
上文回顾:lame编译
项目结构如下图:
LameUtils主要是用来编写与native-lib交互的方法的,也就是native方法的声明,对于转换这个流程,我们需要声明两个方法,一个转换方法,一个转换进度回调方法。如下图:
/*** wav转换成mp3的本地方法** @param wav* @param mp3*/private native void convertToMp3(String wav, String mp3);/*** 设置进度条的进度,提供给C语言调用** @param progress*/public void setConvertProgress(long progress, long total, String path) {Log.d(this.getClass().getSimpleName(), "回调的进度:" + progress + "----总进度:" + total + "----path:" + path);}
然后在native-lib.cpp文件中,也同样声明两个实现方法:
native-lib的转换核心代码如下:
do {read = fread(wav_buffer, sizeof(short int) * 2, 8192, fwav);total += read * sizeof(short int) * 2;fseek(fwavCount, 0, SEEK_END);long length = ftell(fwavCount);rewind(fwavCount);LOGI("converting ....%d", total);publishJavaProgress(env, obj, total, length, jmp3);// 调用java代码 完成进度条的更新if (read != 0) {write = lame_encode_buffer_interleaved(lame, wav_buffer, read, mp3_buffer, 8192);//把转化后的mp3数据写到文件里fwrite(mp3_buffer, sizeof(unsigned char), write, fmp3);}if (read == 0) {lame_encode_flush(lame, mp3_buffer, 8192);}} while (read != 0);
通过fread方法,读取数据流,然后通过调用lame_encode_buffer)interleaved方法,实现流的转换并且赋值给write对象,最后调用fwriter方法写入到文件中,并用lame_encode_flush方法,刷新缓冲区实现文件更新。至此,文件全部写入完成,别忘了最后关闭文件指针哦。
源码地址:
https://gitee.com/motosheep/liblamb
that’s all---------------------------------------------------------------------------------------------
安卓音频开发(四)使用lame把wav转mp3相关推荐
- Android音频开发(四):音频播放模式
一.Android音频开发(一):音频基础知识 二.Android音频开发(二):录制音频(WAV及MP3格式) 三.Android音频开发(三):使用ExoPlayer播放音频 四.Android音 ...
- Android JNI开发之使用Lame将录音转MP3
写在前面 开发环境 前言 Lame 源码下载 写在前面 由于在写之前在网上搜了搜,发现GIthub上已经有AndroidStudio版使用Lame转Mp3的了,所以这篇博客写的例子是Eclipse版本 ...
- 04.iOS 使用lame将wav转换为mp3
在iOS设备中进行录音,录音文件的格式为wav.但这种格式文件会很大,上传到服务器会消耗大量流量.为了适应终端的播放功能以及文件大小的要求,特将wav转换为mp3格式文件来使用. 注意:在录制wav文 ...
- java+lame实现wav到mp3的转换
lame以及lame命令参数设置请大家自行搜索,这里给大家一个例子,java+lame实现压缩wav to mp3. 注意:lame.exe与java工程src放在同一文件夹,否则请使用绝对路径调用l ...
- Android音频开发(一):音频基础知识
一.Android音频开发(一):音频基础知识 二.Android音频开发(二):录制音频(WAV及MP3格式) 三.Android音频开发(三):使用ExoPlayer播放音频 四.Android音 ...
- air中wav转mp3
格式: lame 输入文件 转出文件 这是转换时打印出来的信息,我们能发现里面包含了进度信息,只需要解析该信息就可得到进度信息,解析的正则表达式为://((/s?)(/d+)%/)/|/gi,结果为 ...
- mp3如何转换为wav_将WAV转换为MP3或MP3转换为WAV
mp3如何转换为wav Boy I would have loved this post a decade ago when I was ripping CDs from my local libra ...
- android lame音频转换,音视频开发02--使用LAME库转换pcm文件到mp3
android 使用 AudioRecord 对麦克风进行录音得到的是 pcm 格式的原始音频数据,pcm文件是不能用来播放的,需要进行编码压缩. LAME是目前非常优秀的一种MP3编码引擎,在业界, ...
- Android音频开发(4):如何存储和解析wav文件
2019独角兽企业重金招聘Python工程师标准>>> 无论是文字.图像还是声音,都必须以一定的格式来组织和存储起来,这样播放器才知道以怎样的方式去解析这一段数据,例如,对于原始的图 ...
- 音频开发中常见的四个错误
以下内容主要为音频开发人员所编写,但同样也能为其他领域并与此相关的开发者带来帮助.在下文当中我将介绍针对开发人员的诊断工具,并分享常见的四个错误以及如何检测问题是否存在并做得更好. 文 / Micha ...
最新文章
- linux 类型排序,Linux命令之排序命令sort使用实例
- Internet History, Technology, and Security----第三周
- 围成一圈的排列组合问题_约瑟夫问题
- Dubbo 在 K8s 下的思考
- 漫画:如何用栈实现队列
- css知识笔记(一)——基础知识、选择器、元素分类
- python批量打印机excel,python自动化办公系列03_单个以及批量处理excel文件
- 施一公院士关于科研、读博的精彩演讲
- 遗传算法的c++语言程,C++实现简单遗传算法
- 【云快讯】《微软Sharepoint 2016 Beta版发布,强化混合云搜索功能》
- php自动载入类文件函数,我可以在没有PHP的类中自动加载函数文件吗?
- 不需要英语的计算机行业,北京评职称不再考外语计算机 将涉及300多万人
- android 锁屏显示消息格式,通知!在锁屏上显示Android通知 | MOS86
- Ubuntu触摸屏校准命令
- python有效的变量名有哪些_python变量名有哪些
- C语言中简单冒泡排序不花里胡哨
- 注册了DELPHI盒子
- 我运营公众号这一个月
- 行测-言语理解选词填空必备词语汇总
- JAVA_获取正常上班工作日-除去节假日_双休日_加上加班
热门文章
- Cloakroom BZOJ2794 POI2012(背包问题)
- Linux驱动:电阻屏驱动分析
- push notifications step1 打不开
- vue结合高德地图V2.0(JSAPI key搭配代理服务器并携带安全密钥转发)
- 浅析百度有啊生活平台未来发展的八大潜力特征
- 启发式搜索(heuristic search)———A*算法
- IoTDB Can not establish connection
- 深处python漩涡中,谁能独善其身?
- openstack-mitaka(一) 架构简介
- 【美化§§小清新的身影xp电脑主题】