1

MediaRecord クラスで録音したばかりのものを再生する際に問題が発生しました。

コード:

                    try {
                        audioSample = File.createTempFile("sample", ".wav", PlayScreen.this.getCacheDir());
                    } catch (IOException e) {
                        Toast.makeText(PlayScreen.this, "ERROR: unable to create temp audio file!" + e.toString(), Toast.LENGTH_LONG).show();
                        return;
                    }

                    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                    recorder.setOutputFile(audioSample.getAbsolutePath());
                    try {
                        recorder.prepare();
                    } catch (Exception e) {
                        Toast.makeText(PlayScreen.this, "RECORDER ERROR: " + e.toString(), Toast.LENGTH_LONG).show();
                        Log.e("PLAYSCREEN", e.toString());
                        return;
                    }
                    recorder.start();

それが録音です。エラーをキャッチしていないので、機能していると思います;)

再生コードは次のとおりです。

                   try {
                        mp.setDataSource(audioSample.getAbsolutePath());
                        mp.prepare();
                        mp.start();
                    } catch (Exception e) {
                        Toast.makeText(PlayScreen.this, "PLAYBACK TEST FAIL: " + e.toString(), Toast.LENGTH_LONG).show();
                    }

私がキャッチするこの例外:java.io.IOException: prepare failed

ここで何が起こっているのでしょうか?setDataSource呼び出しが間違っていると思います。

編集 - stackTrace から:

01-08 12:35:35.609: W/System.err(24730): java.io.IOException: Prepare failed.: status=0xFFFFFFFC
01-08 12:35:35.609: W/System.err(24730):    at android.media.MediaPlayer.prepare(Native Method)
01-08 12:35:35.609: W/System.err(24730):    at com.jsx.audiotech.PlayScreen$1.onClick(PlayScreen.java:125)
01-08 12:35:35.609: W/System.err(24730):    at android.view.View.performClick(View.java:2461)
01-08 12:35:35.609: W/System.err(24730):    at android.view.View$PerformClick.run(View.java:8890)
01-08 12:35:35.609: W/System.err(24730):    at android.os.Handler.handleCallback(Handler.java:587)
01-08 12:35:35.609: W/System.err(24730):    at android.os.Handler.dispatchMessage(Handler.java:92)
01-08 12:35:35.609: W/System.err(24730):    at android.os.Looper.loop(Looper.java:123)
01-08 12:35:35.609: W/System.err(24730):    at android.app.ActivityThread.main(ActivityThread.java:4627)
01-08 12:35:35.613: W/System.err(24730):    at java.lang.reflect.Method.invokeNative(Native Method)
01-08 12:35:35.613: W/System.err(24730):    at java.lang.reflect.Method.invoke(Method.java:521)
01-08 12:35:35.613: W/System.err(24730):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
01-08 12:35:35.613: W/System.err(24730):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-08 12:35:35.617: W/System.err(24730):    at dalvik.system.NativeStart.main(Native Method)
4

1 に答える 1

1

作成された.wavファイルをダウンロードして(エミュレーター経由でDDMSを使用すると簡単です)、有効な.wavファイルがあることを確認することをお勧めします。おそらくイベントでMediaRecorderで.stopを呼び出したと思います。そうでない場合は、MediaRecorderによってまだ開いているオーディオファイルを準備しようとしている可能性があります。

于 2013-01-08T22:42:51.940 に答える