通話を録音しようとしたらExceptionが発生します

778 views
Skip to first unread message

kanko

unread,
Oct 11, 2013, 11:53:16 PM10/11/13
to android-g...@googlegroups.com
kankoといいます。よろしくおねがいします。
エミュレータ上でMediaRecorderを使って録音しようとしています。
 
ActivityからボタンAクリック時録音、Bクリック時に再生させようとしています。
<2>を有効にしてエミュレータで実施した場合、録音でき、再生もできたのですが
<1>を有効にしてでエミュレータのDDMS機能で通話状態にしたあと、Aボタンを押すとExceptionが発生して困っています。
 
E/MediaRecorder(826): start failed: -2147483648
D/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上でも探してみたのですが、何が自分に足りていないのかわかりませんでした。
start failed: -2147483648
上記の数値も気になるのですがどうやって調べていいものかわかりません。
何か悪い箇所などありましたらアドバイス願えないでしょうか。
 
===============================================
◆ボタン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();
    }
===============================================

pirai

unread,
Oct 12, 2013, 1:12:39 AM10/12/13
to android-g...@googlegroups.com
本筋とは逸れえますが、拡張子は正確には「.3gp」とかだと思います。
MediaRecorder.OutputFormat.THREE_GPPは3GPPフォーマットで、生のwave形式とは全く異なります。
エラーの原因とは関係ないと思いますが。

また、リファレンス通りにやって実機では問題ないけど
エミュレーターでは必ず落ちるというものがありますので、
特に音関係は実機で試された方が良いと思います。

kanko

unread,
Oct 12, 2013, 2:34:31 AM10/12/13
to android-g...@googlegroups.com
pirai様、アドバイスありがとうございます。

アドバイス通り実機にいれてみたところ動きました。
OutputFormatについてもまったく考えれていかったです。
上記のままのコーディングで再生してもいちよ録音、再生できたのですが
音質といいますか、なんとも微妙な塩梅でした。
もう少し調べてみたいと思います。
 
 
Reply all
Reply to author
Forward
0 new messages