2014-10-31 105 views
4

我想以AMR文件格式录制音频。我目前使用波纹管代码来录制音频:以AMR文件格式录制音频

outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "Sample.3gp"; 

myRecorder = new MediaRecorder(); 
myRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
myRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
myRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); 
myRecorder.setOutputFile(outputFile); 

但它会生成.3gp文件。我怎样才能得到.amr文件? 将输出文件更改为Sample.amr。但这是一种正确的方式吗?请帮助

编辑 ITS现在问题解决了

这是我愚蠢的错误:我以前myRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);

应该是─

myRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

所以波纹管代码在工作记录AMR格式:

outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "Sample.amr"; 

    myRecorder = new MediaRecorder(); 
    myRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    myRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB); 
    myRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    myRecorder.setOutputFile(outputFile); 

回答

4

参考android OutputFormat document 试试下面的代码:

Log.i(TAG,"Record start"); 
    String outputFile; 
    MediaRecorder myRecorder; 
    outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "Sample.amr"; 
    Log.i(TAG,"file name: " + outputFile); 

    myRecorder = new MediaRecorder(); 
    myRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    myRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB); 
    myRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    myRecorder.setOutputFile(outputFile); 

    try { 
     myRecorder.prepare(); 
     myRecorder.start(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     Thread.sleep(30*1000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    myRecorder.stop(); 
    myRecorder.release(); 
    Log.i(TAG,"Record finished"); 

要点:

  1. 输出文件名使用 “.AMR” 后缀。输出格式使用OutputFormat.AMR_NB参数。
  2. 编码器使用AudioEncoder.AMR_NB 参数。
+0

谢谢。但我已经试过了。当我们开始录制错误时,它强制关闭应用程序:**开始失败-22 ** java.lang.RuntimeException:开始失败 – AnujDeo 2014-11-01 07:38:04

+0

您是否先拨打准备,然后调用开始。如果您可以共享整个文件,这很有帮助。 – lucky1928 2014-11-01 14:22:51

+0

检查我编辑的版本,它适用于moto g设备。你的设备是什么?可能是设备问题。 – lucky1928 2014-11-01 16:06:02