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头文件中的方法名是以本地方法的包名为名的。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
lame是一种开源的音频编码库,可以将无损的音频文件格式换为有损的MP3格式。它可以实现对音频文件的压缩,从而减小文件的大小,并保持较高的音质。 lame库是为了满足不同平台和应用程序的需求而开发的,它可以在各种操作系统上运行,并且提供了丰富的功能和选项。对于Qt录音文件格式换,lame库可以方便地与Qt框架进行集成,提供音频文件格式换的功能。 使用lame库进行Qt录音文件格式换的步骤如下: 首先,需要在项目中添加lame库的引用。可以通过下载lame库的源代码,并将其编译为静态库或共享库,然后将库文件导入到Qt项目中。 接下来,在Qt程序中使用lame库的API来进行录音文件格式换。通过调用合适的函数,可以将输入的无损音频文件换为MP3格式,并保存为新的文件。 在进行格式换时,可以通过传递一些参数来控制换的质量和性能,例如指定换后的比特率、采样率、声道数等。这些参数可以根据具体的需求进行调整。 最后,在完成换后,可以通过适当的方式来检查换后的MP3文件,并进行必要的后续处理,如保存、播放或上传等操作。 总之,lame是一个功能强大的音频编码库,可以方便地集成到Qt中,并实现录音文件格式的换。通过使用lame库,可以轻松地将录音文件从无损格式换为常用的MP3格式,以满足不同的需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值