母语文本到语音转换器
本文关键字:转换器 语音 文本 母语 | 更新日期: 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