如何保存mp3格式的音频文件。为什么android没有这个基本的支持?
保存为3GP:
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName += "/audiorecordtest.3gp";
private void startRecording() {
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setOutputFile(mFileName);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
mRecorder.prepare();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
}
mRecorder.start();
}
- 我试图转换3gp文件到MP3使用Lame,但如果想使用差劲,我需要NDK。我试图在不使用NDK(参考)的情况下转换。有吗?有什么方法可以做到这一点?
- MediaRecorder的原因。OutputFormat类在Android中没有基本的mp3支持?
- 据我所知没有。您不必使用NDK来自己构建Lame,但是,您可以使用预编译的。so,包含它,然后使用JNI。以这个项目为例:如果要我猜的话,我会说是因为专利。但是谁知道呢:)
1)尝试将一种编码格式转换为另一种而不使用NDK。将一种形式或编码数据转换为另一种形式或编码数据的过程称为"转码"。转码工作的方式(据我所知)是-解码文件格式A> RAW格式>编码原始文件格式B.所有这些都是繁重的信号处理工作和大量的指针访问(..很多)。在java中这样做效率不高,C/c++是最好的,所以你不能避免一些本地NDK调用,不能避免使用C/c++
2) MP3格式不是自由格式。有一家公司叫technicolor(查看:http://mp3licensing.com/mp3/index.html),它控制着mp3编码器的许可。需要注意的是,如果你要推出一个带有mp3编码器的产品,你必须获得它们的许可(查看许可协议),而且它不是免费的。所以android作为一个开源的操作系统不能提供mp3编码。您可以使用第三方编码器。从我提到的网站上阅读许可协议。
如果我说错了,请纠正我。
问候,Shrish
将记录器的输出格式设置为mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
,结果录制将是mp3文件。
(Update)
MP3被android正式支持,但只用于解码:
http://developer.android.com/guide/appendix/media-formats.html核心媒体格式:MP3•单声道/立体声8-320Kbps常数(CBR)或可变比特率(VBR) MP3 (.mp3)
您可以使用mpeg4作为替代。
你可以这样设置:
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
即使MediaRecorder创建的文件具有。mp3名称后缀,它也不是真正的mp3。真正的MP3文件以ID3标签开始,而不是0x00. ftyp3gp4'