2012-04-03 25 views
1

次のコードを使用して、テキストを音声に変換しました。私のコードでは、私はユーザー入力を.wav形式で保存しました。私はこのコードを実行している間、私はそれが再生されませんファイルを再生するすべてのものは、うまく動作します。ここでAndroid Media Playerで録音された音声は再生されませんか?

TTS_AudioActivity.java

public class TTS_AudioActivity extends Activity implements OnInitListener { 

    private int MY_DATA_CHECK_CODE = 0; 

    private TextToSpeech tts; 
    String destFileName = "/sdcard/wakeUp.wav"; 
    private EditText inputText; 
    private Button speakButton, listen; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     inputText = (EditText) findViewById(R.id.editText1); 
     speakButton = (Button) findViewById(R.id.button1); 
     listen = (Button) findViewById(R.id.button2); 
     speakButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       String text = inputText.getText().toString(); 
       if (text != null && text.length() > 0) { 

        HashMap<String, String> myHashRender = new HashMap(); 
        myHashRender.put(
          TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, text); 
        tts.synthesizeToFile(text, myHashRender, destFileName); 

        Toast.makeText(TTS_AudioActivity.this, "Saying: " + text, 
          Toast.LENGTH_LONG).show(); 
        tts.speak(text, TextToSpeech.QUEUE_ADD, null); 
       } 
      } 
     }); 

     listen.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       if (!Environment.getExternalStorageState().equals(
         Environment.MEDIA_MOUNTED)) { 

       } else { 

        MediaPlayer mpPlayProgram = new MediaPlayer(); 
        try { 
         mpPlayProgram 
           .setDataSource("/sdcard/wakeUp.wav"); 
         mpPlayProgram.prepare(); 
         mpPlayProgram.start(); 
         mpPlayProgram.release(); 

        } catch (IllegalArgumentException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (IllegalStateException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 

       } 

       // MediaPlayer mpPlayProgram = new MediaPlayer(); 
       // try { 
       // mpPlayProgram.setDataSource(destFileName); 
       // mpPlayProgram.prepare(); 
       // mpPlayProgram.start(); 
       // mpPlayProgram.release(); 
       // 
       // } catch (IllegalArgumentException e) { 
       // // TODO Auto-generated catch block 
       // e.printStackTrace(); 
       // } catch (IllegalStateException e) { 
       // // TODO Auto-generated catch block 
       // e.printStackTrace(); 
       // } catch (IOException e) { 
       // // TODO Auto-generated catch block 
       // e.printStackTrace(); 
       // } 

       // tts.addSpeech(null, "/sdcard/wakeUp.wav"); 
      } 
     }); 

     Intent checkIntent = new Intent(); 
     checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
     startActivityForResult(checkIntent, MY_DATA_CHECK_CODE); 

    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == MY_DATA_CHECK_CODE) { 
      if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { 
       // success, create the TTS instance 
       // tts.isLanguageAvailable(Locale.ENGLISH); 
       tts = new TextToSpeech(TTS_AudioActivity.this, this); 
      } else { 
       // missing data, install it 
       Intent installIntent = new Intent(); 
       installIntent 
         .setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
       startActivity(installIntent); 
      } 
     } 

    } 

    @Override 
    public void onInit(int status) { 
     if (status == TextToSpeech.SUCCESS) { 
      Toast.makeText(TTS_AudioActivity.this, 
        "Text-To-Speech engine is initialized", Toast.LENGTH_LONG) 
        .show(); 
     } else if (status == TextToSpeech.ERROR) { 
      Toast.makeText(TTS_AudioActivity.this, 
        "Error occurred while initializing Text-To-Speech engine", 
        Toast.LENGTH_LONG).show(); 
     } 
    } 

} 

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="54dp" 
     android:ems="10" > 

     <requestFocus /> 
    </EditText> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/editText1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="42dp" 
     android:text="Save" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/button1" 
     android:layout_below="@+id/button1" 
     android:layout_marginTop="32dp" 
     android:text="Play" /> 

</RelativeLayout> 

私はSDカードにファイルを保存。私はsdcardからファイルを再生するときは再生されません。どうすればファイルを再生できますか?

+0

レコーダーを停止した直後のリリースからのものです。 –

答えて

0

リリースコールが問題です。

release()start()の直後に呼び出しました。 http://developer.android.com/reference/android/media/MediaPlayer.html

MediaPlayerは(私の意見では)複雑なものなので、このドキュメントをよくお読みください。

ちなみに、Environment.getExternalStorageDirectory()を使ってsdcardにアクセスし、その呼び出しからファイル階層を調べる必要があります。

+0

あなたの提案に応じて変更を加えましたが残念ながら動作しません – Aerrow

+0

デバッグを済ませましたか? logcatのメッセージをいくつか入れてください。 logcatのmediaRecorder.isPlaying()メソッドの戻り値を確認する必要があります。 –

+0

04-04 00:16:56.733:I/System.out(27394):メディアプレイヤーパスは:::::: /mnt/sdcard/wakeUp.wav 04-04 00:16:56.733:D/MediaPlayer (27394):start()in 04-04 00:16:56.733:E/MediaPlayer(27394):状態2で呼び出しが開始されました 04-04 00:16:56.743:E/MediaPlayer(27394) 38/0) 04-04 00:16:56.743:D/MediaPlayer(27394):start()out 04-04 00:16:56.743:E/MediaPlayer(27394):エラー(-38,0) – Aerrow

0

mpPlayProgram.release();という行をコメントし、それが動作するかどうか確認できますか?

リリースメソッドは、再生中ではなくメディアプレーヤーを解放したいときに呼び出す必要があります。

+0

あなたの提案に応じて変更されましたが動作しません – Aerrow