Android NDK之Lame初探

之前在做车载语音微信项目的时候,基于网页版微信原理,在发送语音消息时先将录音消息传到讯飞的车载服务服务器,然后获取URL,只发送URL就可以了。由于录音数据为pcm格式,pcm转wav比较容易,直接加个头文件就可以了,但是wav转mp3呢,在这里我是用了比较出名的MP3 Encoder库Lame,正好通过Lame库的使用熟悉Android NDK开发:

1.首先介绍一下Lame库,LAME是目前最好的MP3编码引擎。LAME编码出来的MP3音色纯厚、空间宽广、低音清晰、细节表现良好,它独创的心理音响模型技术保证了CD音频还原的真实性,配合VBR和ABR参数,音质几乎可以媲美CD音频,但文件体积却非常小。对于一个免费引擎,LAME的优势不言而喻。关于LAME的介绍可以在百度百科,维基百科中找到,我在这里不再赘述了,但是要知道LAME可以帮助我们将wav无损音频文件转码成mp3这种体积相对较小的音频格式文件,哈哈,看了这么多是不是想睡觉了,别急,下面上干货。


2.LAME的源码是托管到sourceforge.net上的,我们开发一个基于LAME的项目,就不得不下载其源码用于编译。获取Lame库源码,戳这里:

LAME主页:http://lame.sourceforge.net/

LAME下载:https://sourceforge.net/projects/lame/files/lame/3.99/


3.OK,在这里我将音频格式转化的操作封装为一个工具类RecordUtil,在这里面实现了pcm转wav以及wav转mp3,pcm转wav很容易,加个头文件就可以了。wav转mp3,使用native方法convertmp3(String wav,String mp3),该native方法将从Java层获取到的两个音频文件的路径传递给C端,C端拿到这两个路径,就可以进行读写和编解码操作了。源代码如下:

public class RecordUtil {
	private static final int SAMPLE_RATE_IN_HZ = 8000;
	private MediaRecorder recorder = new MediaRecorder();
	// 录音的路径
	private String mPath;
	private Handler mHandler;
	static {
		System.loadLibrary("Hello");
	}

	public native void convertmp3(String wav, String mp3);

	public RecordUtil(String path, Handler handler) {
		mPath = path;
		this.mHandler = handler;
	}

	/**
	 * 将pcm格式的文件加头处理成wav格式的音频文件
	 */
	public void pcm2wav(String pcmFilePath, String wavFilePath) {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值