2016-06-24 10 views
-1

母国語のテキストを音声変換に変換しようとしています。スピーチコンバーターへの母国語のテキスト

mp3にすべてのアルファベット文字を記録しました。

private void PlayFile(string entertext) 
    { 
     WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer(); 
     char[] charArray = entertext.ToCharArray(); 
     for (int i = 0; i < charArray.Length; i++) 
     { 
      if (charArray[i].ToString() == "a") 
      { 
       wplayer.URL = @"E:\alphabet_audio\01_a.mp3"; 
       wplayer.controls.play(); 
      } 
      else if (charArray[i].ToString() == "b") 
      { 
       wplayer.URL = @"E:\alphabet_audio\02_b.mp3"; 
       wplayer.controls.play(); 
      } 

     } 
    } 

問題はそれだけで最後後者を再生している:

は、ここに私のコードです。

+2

それが完了する前に、オーディオを変更しています。 wplayerがサウンドの再生を完了するまで待つ必要があります –

+0

どうすればいいですか?私を手伝ってくれますか? –

答えて

0

ファイルの再生が完了したことを確認する必要があります。これを行うには、wplayerオブジェクトへのハンドラを必要とし、再帰的に前のファイルの再生が終了していることを確認します。これは、WMPがある時点で再生を終了すると仮定しているため、ベストプラクティスではないかもしれません。暴走した再帰はありませんが、このユースケースでは問題はないと思います。ここで

Private void PlayFile(string entertext) 
    { 
    //Add play state handler 
    WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer(); 
    wplayer.PlayStateChange += new WMPLib._WMPOCXEvents_PlayStateChangeEventHandler(wplayer_PlayStateChange); 
    char[] charArray = entertext.ToCharArray(); 
    for (int i = 0; i < charArray.Length; i++) 
    { 
    //check play state 
     PlaySound(charArray[i].ToString(), wplayer) 
    } 
} 

Private void PlaySound(string letter, WMPLib.WindowsMediaPlayer wplayer) 
{ 
    if (WMPLib.WMPPlayState.wmppsMediaEnded == wplayer.playState) 
    { 
     if (letter == "a") 
     { 
      wplayer.URL = @"E:\alphabet_audio\01_a.mp3"; 
      wplayer.controls.play(); 
     } 
     else if (letter == "b") 
     { 
      wplayer.URL = @"E:\alphabet_audio\02_b.mp3"; 
      wplayer.controls.play(); 
     } 
    } else { 
     PlaySound(letter, wplayer) 
    } 

} 

は、再生状態の列挙にいくつかのドキュメントです:https://msdn.microsoft.com/en-us/library/windows/desktop/dd564085(v=vs.85).aspx

関連する問題