母语文本到语音转换器

本文关键字:转换器 语音 文本 母语 | 更新日期: 2023-09-27 17:49:18

我正在尝试创建我的母语文本到语音转换器。

我把每个字母都录在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();
            }
        }
    }

问题是它只播放最后一个。

母语文本到语音转换器

您需要确保文件已完成播放。要做到这一点,您需要对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