如何将音频文件保存为mp3格式.为什么android没有这个基本的支持



如何保存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();
    }
  1. 我试图转换3gp文件到MP3使用Lame,但如果想使用差劲,我需要NDK。我试图在不使用NDK(参考)的情况下转换。有吗?有什么方法可以做到这一点?
  2. 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'

最新更新