在上文中,展示了安卓项目如何构建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相关推荐

  1. Android音频开发(四):音频播放模式

    一.Android音频开发(一):音频基础知识 二.Android音频开发(二):录制音频(WAV及MP3格式) 三.Android音频开发(三):使用ExoPlayer播放音频 四.Android音 ...

  2. Android JNI开发之使用Lame将录音转MP3

    写在前面 开发环境 前言 Lame 源码下载 写在前面 由于在写之前在网上搜了搜,发现GIthub上已经有AndroidStudio版使用Lame转Mp3的了,所以这篇博客写的例子是Eclipse版本 ...

  3. 04.iOS 使用lame将wav转换为mp3

    在iOS设备中进行录音,录音文件的格式为wav.但这种格式文件会很大,上传到服务器会消耗大量流量.为了适应终端的播放功能以及文件大小的要求,特将wav转换为mp3格式文件来使用. 注意:在录制wav文 ...

  4. java+lame实现wav到mp3的转换

    lame以及lame命令参数设置请大家自行搜索,这里给大家一个例子,java+lame实现压缩wav to mp3. 注意:lame.exe与java工程src放在同一文件夹,否则请使用绝对路径调用l ...

  5. Android音频开发(一):音频基础知识

    一.Android音频开发(一):音频基础知识 二.Android音频开发(二):录制音频(WAV及MP3格式) 三.Android音频开发(三):使用ExoPlayer播放音频 四.Android音 ...

  6. air中wav转mp3

    格式: lame 输入文件  转出文件 这是转换时打印出来的信息,我们能发现里面包含了进度信息,只需要解析该信息就可得到进度信息,解析的正则表达式为://((/s?)(/d+)%/)/|/gi,结果为 ...

  7. 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 ...

  8. android lame音频转换,音视频开发02--使用LAME库转换pcm文件到mp3

    android 使用 AudioRecord 对麦克风进行录音得到的是 pcm 格式的原始音频数据,pcm文件是不能用来播放的,需要进行编码压缩. LAME是目前非常优秀的一种MP3编码引擎,在业界, ...

  9. Android音频开发(4):如何存储和解析wav文件

    2019独角兽企业重金招聘Python工程师标准>>> 无论是文字.图像还是声音,都必须以一定的格式来组织和存储起来,这样播放器才知道以怎样的方式去解析这一段数据,例如,对于原始的图 ...

  10. 音频开发中常见的四个错误

    以下内容主要为音频开发人员所编写,但同样也能为其他领域并与此相关的开发者带来帮助.在下文当中我将介绍针对开发人员的诊断工具,并分享常见的四个错误以及如何检测问题是否存在并做得更好. 文 / Micha ...

最新文章

  1. linux 类型排序,Linux命令之排序命令sort使用实例
  2. Internet History, Technology, and Security----第三周
  3. 围成一圈的排列组合问题_约瑟夫问题
  4. Dubbo 在 K8s 下的思考
  5. 漫画:如何用栈实现队列
  6. css知识笔记(一)——基础知识、选择器、元素分类
  7. python批量打印机excel,python自动化办公系列03_单个以及批量处理excel文件
  8. 施一公院士关于科研、读博的精彩演讲
  9. 遗传算法的c++语言程,C++实现简单遗传算法
  10. 【云快讯】《微软Sharepoint 2016 Beta版发布,强化混合云搜索功能》
  11. php自动载入类文件函数,我可以在没有PHP的类中自动加载函数文件吗?
  12. 不需要英语的计算机行业,北京评职称不再考外语计算机 将涉及300多万人
  13. android 锁屏显示消息格式,通知!在锁屏上显示Android通知 | MOS86
  14. Ubuntu触摸屏校准命令
  15. python有效的变量名有哪些_python变量名有哪些
  16. C语言中简单冒泡排序不花里胡哨
  17. 注册了DELPHI盒子
  18. 我运营公众号这一个月
  19. 行测-言语理解选词填空必备词语汇总
  20. JAVA_获取正常上班工作日-除去节假日_双休日_加上加班

热门文章

  1. Cloakroom BZOJ2794 POI2012(背包问题)
  2. Linux驱动:电阻屏驱动分析
  3. push notifications step1 打不开
  4. vue结合高德地图V2.0(JSAPI key搭配代理服务器并携带安全密钥转发)
  5. 浅析百度有啊生活平台未来发展的八大潜力特征
  6. 启发式搜索(heuristic search)———A*算法
  7. IoTDB Can not establish connection
  8. 深处python漩涡中,谁能独善其身?
  9. openstack-mitaka(一) 架构简介
  10. 【美化§§小清新的身影xp电脑主题】