我正在使用System.Speech.Synthesis參考使用簡單的文本到語音應用程序。我想嚮應用程序添加一個滑塊控件,並用它控制語音的音量。爲了設置我正在使用的音量:.NET文本到語音音量
speech.Volume = 100;
我是否需要使用某種事件處理程序才能更新此值?順便說一句,我創建這個作爲一個WPF應用程序與C#(請不要VB.NET代碼)。
我正在使用System.Speech.Synthesis參考使用簡單的文本到語音應用程序。我想嚮應用程序添加一個滑塊控件,並用它控制語音的音量。爲了設置我正在使用的音量:.NET文本到語音音量
speech.Volume = 100;
我是否需要使用某種事件處理程序才能更新此值?順便說一句,我創建這個作爲一個WPF應用程序與C#(請不要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;
Slider控件引發事件ValueChanged
每當它的值的變化。如果您處理此事件,您可以通過檢查Value
屬性更新您的語音音量。
似乎沒有這樣做的內置方式。處理SpeakProgress事件將使您可以訪問CharacterPosition屬性。這使您在最後一個單詞讀取開始時的提示位置。如果你在下一個空白字符上做了一個子字符串,並把它作爲新的提示傳遞,那麼提示的其餘部分將從這一點開始講。如果您願意,可以計算提示需要讀取的時間長度,並使用AudioPosition屬性獲取TimeSpan對象的提示符運行時間。
添加兩個滑塊,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);
}
}
這基本上是我以前設置的。我現在知道它爲什麼不更新。文本正在讀取時,音量無法更改。一旦講話停止,我可以將音量設置爲不同的值。然後我再次讀取並設置新的音量值。任何人都可以想到一種方法來改變這個文本正在閱讀? – Dylan