我有一个应用程序,它记录音频并将其保存在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();
请建议可能是什么问题,解决方案是什么。谢谢。
答案 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" />