android录音raw用lame转换成mp3

1。用android进行录音上传到服务器,录音往往有这几种:

     a. 用MediaRecorder进行录音,示例代码如下:

MediaRecorder recorder = new MediaRecorder();
 * recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
 * recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
 * recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
 * recorder.setOutputFile(PATH_NAME);
 * recorder.prepare();
 * recorder.start();   // Recording is now started
 * ...
 * recorder.stop();
 * recorder.reset();   // You can reuse the object by going back to setAudioSource() step
 * recorder.release(); /

   b.用AudioRecord的进行录音。示例代码如下:(代码片段)


int bufferSize = AudioRecord.getMinBufferSize(16000,
				AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
		mBuffer = new short[bufferSize];
		mRecorder = new AudioRecord(MediaRecorder.AudioSource.MIC, 16000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);
		mRecorder.startRecording();


new Thread(new Runnable() {
			@Override
			public void run() {
				DataOutputStream output = null;
				int volum = 0;
				try {
					output = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
					while (isRecordering) {
						int readSize = mRecorder.read(mBuffer, 0, mBuffer.length);
						for (int i = 0; i < readSize; i++) {
							output.writeShort(mBuffer[i]);
						}
					}
				} catch (IOException e) {
				} finally {
					if (output != null) {
						try {
							output.flush();
						} catch (IOException e) {
						} finally {
							try {
								output.close();
							} catch (IOException e) {
							}
						}
					}
				}
			}
		}).start();


用a进行录音可以直接生成音频文件,用b进行录音可以手动对流进行一些处理,比如获得音量,(在网上可搜到)

获得音频后需要支撑iphone播放所以要转换为mp3格式。我选择了第二种录音方式,生成后缀为raw文件然后用lame进行转换,(转换成功)

lame:

因为lame用c写的android需要调用就需要写jni,并且进行编译。

首先,编写本地方法:

如下

	public native void initEncoder(int numChannels, int sampleRate, int bitRate, int mode, int quality);

	public native void destroyEncoder();

	public native int encodeFile(String sourcePath, String targetPath);


编写三个本地方法后用javah来生成头文件,并且编写c文件。在c文件中调用lame中的相对应的方法(需要看lame)

然后编写android.mk进行编译,自己搜。(或者用别人的.so文件,但是必须知道对方本地方法的名字和所在的包,然后在自己的工程里建对应的包和类名)

因为在生成的h头文件中的方法名是以本地方法的包名为名的。




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值