.NET文本到语音卷

时间:2011-06-22 17:33:18

标签: c# wpf event-handling slider text-to-speech

我正在使用System.Speech.Synthesis引用处理一个简单的Text to Speech应用程序。我想为应用程序添加一个滑块控件,并用它控制语音的音量。为了设置我正在使用的音量:

speech.Volume = 100;

我是否需要使用某种事件处理程序才能更新此值?顺便说一下,我用C#创建一个WPF应用程序(请不要使用VB.NET代码)。

4 个答案:

答案 0 :(得分:1)

<Slider Ticks="1, 2, 3, 4, 5, 6, 7, 8, 9, 10"
            Value="1"
            Delay="100"
            Interval="5"
            TickPlacement="BottomRight"
            Minimum="1"
            Maximum="10"
            Width="100"
            AutoToolTipPlacement="BottomRight"
            ValueChanged="slider_ValueChanged"
            Grid.Row="1"
            Grid.Column="0">
    Slider>

创建slider_ValueChanged的事件并设置Speech.volume = (int)sliderID.value;

答案 1 :(得分:1)

添加两个滑块,sliderVolume用于音量控制,sliderRate用于速率控制。然后在SpeakProgress事件中,将新音量和速率分配给speech,并使用characterPosition制作原始阅读内容的子字符串。然后使用这个新的子字符串重新启动说话。请参阅以下代码。

    string selectedSpeakData = "Sample Text Sample Text Sample Text Sample Text Sample Text";
    private SpeechSynthesizer speech;

    private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                speech= new SpeechSynthesizer();
                speech.SpeakProgress += new EventHandler<System.Speech.Synthesis.SpeakProgressEventArgs>(speech_SpeakProgress);
                speech.SpeakAsync(selectedSpeakData);
            }

    void speech_SpeakProgress(object sender, System.Speech.Synthesis.SpeakProgressEventArgs e)
            {
                if (speech.Volume != Convert.ToInt32(sliderVolume.Value) || speech.Rate != Convert.ToInt32(sliderRate.Value))
                {
                    speech.Volume = Convert.ToInt32(sliderVolume.Value);
                    speech.Rate = Convert.ToInt32(sliderRate.Value);
                    selectedSpeakData = selectedSpeakData.Remove(0, e.CharacterPosition);
                    speech.SpeakAsyncCancelAll();
                    speech.SpeakAsync(selectedSpeakData);
                }
            }

答案 2 :(得分:0)

Slider控件在其值发生变化时会引发事件ValueChanged。如果您处理此事件,可以通过查看Value属性来更新您的语音量。

答案 3 :(得分:0)

似乎没有内置的方法来做到这一点。处理SpeakProgress事件将允许您访问CharacterPosition属性。这使您可以在最后一个单词读取开头的提示中找到位置。如果在下一个空格字符上执行子字符串并将其作为新提示传递,则会从此处说出提示的其余部分。如果您正在使用它,则可以计算提示读取的时间长度,并使用AudioPosition属性获取TimeSpan对象的提示已运行多长时间。