SpeechSynthesizer в раскадровку
Я создал раскадровку, в которой есть несколько движущихся элементов / объектов, и я хочу добавить SpeechSynthesizer в раскадровку.
Это возможно?? Я работаю на C#.
Storyboard myStoryboard=new Storyboard();
SpeechSynthesizer reader = new SpeechSynthesizer();
reader.Speak("This is my first speech project"); /* instead of speak I want
to add this into the storyboard
.....
myStoryboard.Children.Add(readerAnimation);
Или есть способ добавить аудио в раскадровку?
1 ответ
Решение
Если вы хотите использовать аудиофайл, вы можете использовать MediaTimeLine
Учебный класс. Затем вы можете использовать один из SpeachSynthesizer's SetOutputToWaveFile
Методы создания вашего файла.
Сохранение waveFile, модифицированного из 2nd Link:
using (SpeechSynthesizer synth = new SpeechSynthesizer())
{
synth.SetOutputToWaveFile(@"C:\temp\Sample.wav");
PromptBuilder builder = new PromptBuilder();
builder.AppendText("Hello World !");
synth.Speak(builder);
}
Xaml
модифицировано из First Link для воспроизведения файла
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="100" Width="200">
<StackPanel Background="Black">
<Label Name="clickMe" Content="Click Me" Foreground="White" FontFamily="Arabic Typesetting" FontSize="20" HorizontalContentAlignment ="Center" />
<MediaElement Name="myMediaElement" Width="0" Height="0" />
<StackPanel.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.MouseDown" SourceName="clickMe">
<EventTrigger.Actions>
<BeginStoryboard Name= "myBegin">
<Storyboard x:Name="myStoryBoard" SlipBehavior="Slip">
<MediaTimeline Source="C:\temp\Sample.wav" Storyboard.TargetName="myMediaElement" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</StackPanel.Triggers>
</StackPanel>
</Window>
Имейте в виду, что после того, как раскадровка воспроизведет файл, он сохранит на нем блокировку.