.NET文本到语音音量
本文关键字:语音 文本 NET | 更新日期: 2023-09-27 18:00:08
我正在使用System.Speech.Synthesis引用处理一个简单的文本到语音应用程序。我想在应用程序中添加一个滑块控件,并用它控制语音的音量。为了设置音量,我正在使用:
speech.Volume = 100;
我是否需要使用某种事件处理程序来更新此值?顺便说一下,我用C#创建了一个WPF应用程序(请不要使用VB.NET代码)。
<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;
添加两个滑块,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);
}
}
ValueChanged
。如果您处理此事件,您可以通过检查Value
属性来更新您的语音音量。
似乎没有内置的方法。处理SpeakProgress事件将允许您访问CharacterPosition属性。这将使您在最后一个单词阅读开始时的提示中处于位置。如果在下一个空白字符上执行子字符串,并将其作为新的提示传递,则提示的其余部分将从此处开始。如果您能够做到这一点,您可以计算读取提示所需的时间,并使用AudioPosition属性获取一个TimeSpan对象,以了解提示运行的时间。