提高Android中录制声音的质量

时间:2012-06-11 14:04:39

标签: android audio-recording

  

可能重复:
  Improve Audio Recording quality in android?

我想将音频录制到3gp文件中。我可以毫无问题地做到这一点,并能听到声音。但我能听到的声音很慢而且不清楚。为了提高语音质量,我写了一个程序,但得到java.lang.RuntimeException:start failed

public void onClick(View arg0) 
        {
            root=Environment.getExternalStorageDirectory();
            audiofile=new File(root,"sound.3gp");
            if(!audiofile.exists())
            {
                Log.w(TAG, "File doesn't exists");
                try 
                {
                    audiofile.createNewFile();

                } catch (IOException e) 
                {
                    Log.w(TAG, "Unable to create audio file",e);
                }                   
            }

            recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
            recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);           
            recorder.setOutputFile(audiofile.getAbsolutePath());

            try 
            {
                recorder.setAudioSamplingRate(10);
                recorder.setAudioEncodingBitRate(20);
                recorder.prepare();

            } catch (IllegalStateException e) 
            {
                Log.w(TAG, "This is IllegalStateException");
            } catch (IOException e) 
            {
                Log.w(TAG, "This is IoException");
            }
            recorder.start();
        }

我的代码有什么问题?感谢。

2 个答案:

答案 0 :(得分:1)

根据我的Existing Answer on Stackoverflow,我提供了以下代码以改善您的音质。

recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setAudioEncoder(MediaRecorder.getAudioSourceMax());
recorder.setAudioEncodingBitRate(16);
recorder.setAudioSamplingRate(44100);
recorder.setOutputFile(path);
recorder.prepare();
recorder.start();

答案 1 :(得分:0)

  

我写了一个程序,但得到java.lang.RuntimeException:start failed

您是否在第一次运行您在onStop上调用的应用程序时确定了

recorder.stop();
recorder.reset();
recorder.release();

我很确定当你试图运行这个程序时,记录器已经被使用了。这就是为什么你得到这个错误。总是确保你在onStop上调用上面的方法。对于Camera也是如此。