アプリで MediaRecorder を使用してデシベルを測定しています。このため、新しい MediaRecorder-Object が 10 秒ごとに作成され、1 秒間実行され、その間に getMaxAmplitude() が 10 回呼び出され、平均が計算されます。この後、MediaRecorder オブジェクトは停止され、削除されます。
レコーダーを起動するメソッドは次のようになります
public boolean start()
{
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setOutputFile("/dev/null");
try
{
mRecorder.prepare();
}
catch (IllegalStateException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
catch(Exception e)
{
e.printStackTrace();
return false;
}
mRecorder.start();
mRecorder.getMaxAmplitude();
return true;
}
停止する方法は次のようになります
public void stop()
{
//Log.d("SPLService", "stop()");
mRecorder.stop();
mRecorder.reset();
mRecorder.release();
mRecorder=null;
}
これは、Android Web サイトのチュートリアルで説明されている方法とほぼ同じです。
Android の Mediaplayer など、メディアを使用する他のアプリと並行してこのアプリを使用すると、問題が発生します。私のアプリを使用してサウンド測定が行われると、他のメディア アプリは停止したりクラッシュしたりします。
MediaRecorder の代わりに AudioRecord を使用してみましたが、他のアプリとの干渉は同じでした。
私の質問は次のようになると思います: どうすればそのような干渉を避けることができますか?