kankoといいます。よろしくおねがいします。
エミュレータ上でMediaRecorderを使って録音しようとしています。
ActivityからボタンAクリック時録音、Bクリック時に再生させようとしています。
<2>を有効にしてエミュレータで実施した場合、録音でき、再生もできたのですが
<1>を有効にしてでエミュレータのDDMS機能で通話状態にしたあと、Aボタンを押すとExceptionが発生して困っています。
E/MediaRecorder(826): start failed: -
2147483648D/AndroidRuntime(826): Shutting down VM
W/dalvikvm(826): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
E/AndroidRuntime(826): FATAL EXCEPTION: main
E/AndroidRuntime(826): java.lang.RuntimeException: start failed.
E/AndroidRuntime(826): at android.media.MediaRecorder.start(Native Method)
E/AndroidRuntime(826): at com.example.soundtest.MainActivity$1.onClick(MainActivity.java:54)
通話の録音は「setAudioSource」に「MediaRecorder.AudioSource.VOICE_DOWNLINK」を
指定するだけでいいのではと思っていたのですが、何か必要な処理などあるのでしょうか。。。
WEB上でも探してみたのですが、何が自分に足りていないのかわかりませんでした。
上記の数値も気になるのですがどうやって調べていいものかわかりません。
何か悪い箇所などありましたらアドバイス願えないでしょうか。
===============================================
◆ボタンAを押した時の処理
recorder = new MediaRecorder();
// recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_DOWNLINK);//受話のみ録音<1>
// recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//マイクから録音<2>
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//保存先
String filePath = Environment.getExternalStorageDirectory() + "/audio.wav";
Log.d(TAG, "filePath"+filePath);
recorder.setOutputFile(filePath);
try {
recorder.prepare();
Log.d(TAG, "start");
recorder.start(); //録音開始
} catch (IllegalStateException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
◆ボタンBを押した時の処理
recorder.stop();
//保存先
String filePath = Environment.getExternalStorageDirectory() + "/audio.wav";
Log.d(TAG, "filePath"+filePath);
try {
player.setDataSource(filePath);
player.prepare();
player.start();
} catch (IllegalArgumentException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (SecurityException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
===============================================