【问题标题】:Why My Recorded Audio Bit rate is always Zero when recording with Mediarecorder Android为什么使用 Mediarecorder Android 录制时我录制的音频比特率始终为零
【发布时间】:2013-11-26 06:33:37
【问题描述】:

我有一个应用程序可以录制音频并将其保存在 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();

请提出可能是什么问题以及解决方案是什么。谢谢。

【问题讨论】:

  • 您如何确定比特率?数据是否写入文件? 0kbps 意味着文件将为空。
  • @Zharf 当我在 Windows 7 中专注于文件时,我可以看到比特率。它显示为 0 kbps。文件仍在播放。
  • 我会说 Windows 更有可能无法测量比特率,mp3 就是这样狡猾的,尤其是可变比特率的。尝试在 foobar2000 或其他东西中打开文件,看看它说了什么。在任何情况下,如果你得到一个包含可播放数据的文件,它肯定不是 0 kbps,因为这意味着音频每秒需要 0 位,这将导致一个空文件......
  • 我在 foobar2000 中打开了音频,它播放得很好。
  • @Zharf 谢谢。您的评论就是答案。音频文件没有正常显示比特率,但是当我在 foobar2000 中打开它时,它在播放时显示了比特率。再次感谢。请发布以上评论作为答案,我会接受答案。

标签: android android-audiomanager


【解决方案1】:

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

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

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

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

如果你有比特率,这里有你的答案!

【讨论】:

    【解决方案2】:

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

    对于检查音乐文件,我通常建议在 Windows 上使用 foobar2000,在其余部分使用 ffmpeg

    【讨论】:

      【解决方案3】:

      这样做

      声明

      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) {
              }
      
          }
      

      Stro 录音

      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" /> 
      

      【讨论】:

      • 比特率还是0kbps :(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      相关资源
      最近更新 更多