使用Mediarecorder Android录制时,为什么我的录制音频比特率始终为零

时间:2013-11-26 06:33:37

标签: android android-audiomanager

我有一个应用程序,它记录音频并将其保存在SD卡中。当我检查录制的音频时,录制的音频文件的比特率始终为零(0 kbps)。文件格式为MP3。以下是我的代码

 mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
mRecorder.setOutputFile(mFileName);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mRecorder.setMaxDuration(60000);
mRecorder.setAudioSamplingRate(44100);
    mRecorder.setAudioEncodingBitRate(96000);   

try {
    mRecorder.prepare();
} catch (IOException e) {
    Log.e(LOG_TAG, "prepare() failed");
}

mRecorder.start();

请建议可能是什么问题,解决方案是什么。谢谢。

3 个答案:

答案 0 :(得分:2)

我尝试了你的规格,我在我的系统中找到了解决方案。

可能你只有这个我能观察到的简单问题:

您正在使用默认编码器和默认输出格式。如果你使用默认编码器,它对我没问题。 但我可以猜到,你的默认输出格式是3gpp,你将文件保存为.mp3

如果你这样做,许多玩家将完美地播放它,但从文件中提取任何其他信息几乎是不可能的。所以,我的建议是,将文件扩展名更改为3gp,并检查属性。

如果你有一点比特,那么你有答案!

答案 1 :(得分:1)

这里的问题是你检查比特率的方式,而不是代码。相当多的应用程序无法正确报告MP3比特率,但是如果您观察文件的大小并且可以使用任何播放器播放它,您可以确定它 0kbps,因为每秒0比特意味着文件将是空的(好吧,它可能有一些标题,但你不能播放它。)

要检查音乐文件,我通常会在Windows上推荐foobar2000,其余时间推荐ffmpeg

答案 2 :(得分:0)

这样做

宣言

private MediaRecorder mRecorder = null;
private String mFileName;

生成唯一文件名

private String getRecordDefaultFileName() {
        String fileName;
        File wallpaperDirectory = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "MyRecordings" + "/");
        if (!wallpaperDirectory.exists()) {
            wallpaperDirectory.mkdirs();
        }
        if (wallpaperDirectory.listFiles() != null) {
            fileName = "record" + wallpaperDirectory.listFiles().length;
        } else {
            fileName = "record" + 1;
        }

        return wallpaperDirectory.getAbsolutePath() + File.separator + fileName + ".3gp";
    }

开始录制

private void startRecording() {
        try {
            mRecorder = new MediaRecorder();
            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            mFileName = getRecordDefaultFileName();
            mRecorder.setOutputFile(mFileName);
            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

            try {
                mRecorder.prepare();
            } catch (IOException e) {
                System.out.println("prepare() failed");
            }

            mRecorder.start();
        } catch (Exception e) {
        }

    }

Strop录音

private void stopRecording() {
    try {
        if (mRecorder != null) {
            mRecorder.stop();
            mRecorder.release();
            mRecorder = null;
        }
    } catch (Exception e) {
    }
}

mainfest.xml中需要的权限

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />