MediaRecorder を使用してマイクからの音声を AMR 形式で録音し、MediaPlayer を使用してデータを再生するアプリを作成しています。
とにかくそれが目標です。
MediaRecorder 側が機能していることにはかなりの自信があります。適切なデータ レートで適切な場所にデータ ファイルを生成しています。MediaRecorder を開始および停止する方法は次のとおりです。
public void OnStartRecord(View v )
{
System.out.println( "StartRecord");
try {
audioFile = File.createTempFile("amrtmp", ".amr", getApplicationContext().getFilesDir());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println( "Recording to " + audioFile.getAbsolutePath());
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setAudioEncodingBitRate(4750);
mRecorder.setAudioSamplingRate(8000);
mRecorder.setOutputFile(audioFile.getAbsolutePath());
try {
mRecorder.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mRecorder.start();
}
public void OnStopRecord(View v )
{
System.out.println( "StopRecord");
mRecorder.stop();
mRecorder.release();
}
これは魅力のように機能します。典型的な出力は次のようなものです
StartRecord
Recording to /data/data/com.test.playback/files/amrtmp-235967797.amr
録画を開始してから停止すると、ファイルが作成され、設定に適切に対応する一定量のデータが含まれていることがわかります。
補足: これを実行している間、スピーカーで奇妙なブーンという音を検出しました。それが何であるか分かりますか?
ファイルを再生しようとすると、問題が解決しません。私は次のことを試しました:
public void OnPlay(View v )
{
MediaPlayer mPlayer = new MediaPlayer();
mPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
FileInputStream FIS = null;
try {
FIS = new FileInputStream(audioFile.getAbsolutePath());
mPlayer.setDataSource(FIS.getFD());
mPlayer.prepare();
}
catch( Exception e )
{
e.printStackTrace();
}
mPlayer.start();
}
これにより、何も再生されず、MediaPlayer からの次の出力が表示されます。
start() mURI が null です
私も同じコードを試しましたが、mPlayer のデータ ソースの設定が異なります。
mPlayer.setDataSource(audioFile.getAbsolutePath());
これは、prepare が java.io.IOException ステータス 0x1 で呼び出された場合に失敗します。
MediaPlayer を適切に設定するには、他に何かする必要があると想像する必要があります。助言がありますか?