文本到语音(Text-to-Speech,简称TTS)技术在计算机领域并不是一个新概念。据所知,自Windows 98起,这项技术就已经存在。然而,在Silverlight中,它却是一项全新的功能。现在,可以使用Silverlight应用程序通过API调用来实现文本到语音的转换。这听起来很不错吧?通过COM API,可以实现这一点。
在本文中,将介绍如何使用COM API调用SAPI引擎来实现文本到语音的转换。阅读完本文后,将能够编写自己的代码,开发具有文本到语音功能的Silverlight 4应用程序。
要开发这个应用程序,需要以下工具:
设置好开发环境后,创建一个Silverlight项目。如果是Silverlight应用程序开发的新手,并且想了解Silverlight以及如何创建一个新的Silverlight应用程序,请阅读。
在开始之前,需要进行一些配置。因为COM API只在Silverlight Out-of-Browser(OOB)应用程序中工作,需要更改项目设置。
右键点击Silverlight项目,打开属性。点击“启用在浏览器外运行应用程序”复选框,然后点击“Out-of-Browser设置”按钮。
一旦设置页面打开,从屏幕上设置所需的选项。确保勾选了“显示安装菜单”和“在浏览器外运行时需要提升权限”。
完成这些设置后,将能够将这个Web版本安装为Out-of-Browser应用程序。
现在,需要向项目添加一个DLL程序集引用。因为将在示例中使用动态关键字,需要添加“Microsoft.CSharp”程序集引用。
要这样做,请右键点击Silverlight项目,然后从菜单中选择“添加引用”。
现在从“添加引用”对话框中找到“Microsoft.CSharp”,选择它并点击确定。这将向项目添加程序集引用。
一旦所有设置都完成,是时候设计用户界面了。在MainPage.xaml文件中添加一个TextBox和一个Button,并为它们设置名称。在示例中,使用“txtMessage”作为TextBox的名称,使用“btnSpeak”作为Button的名称。
以下是XAML代码:
<UserControl x:Class="Silverlight_4_Text_To_Speech_Demo.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
<StackPanel x:Name="LayoutRoot" Orientation="Vertical" Width="320">
<TextBlock FontWeight="Bold" FontSize="14" Text="Silverlight 4 Text-To-Speech Demo" Margin="10" TextAlignment="Center" />
<TextBlock Text="Enter some text and click on the 'Speak' button to read out the entered text." Margin="10" TextWrapping="Wrap" />
<StackPanel Orientation="Horizontal">
<TextBox x:Name="txtMessage" Width="200" Height="100" Margin="5" AcceptsReturn="True" TextWrapping="Wrap" />
<Button x:Name="btnSpeak" Content="Speak" Width="100" Height="100" Margin="5" Click="btnSpeak_Click" />
</StackPanel>
</StackPanel>
</UserControl>
如果运行这个,它将看起来像下面的截图:
在这里,将使用TextBox输入一些文本,一旦点击“Speak”按钮,它将开始朗读输入的文本。为此,注册按钮点击事件,并在代码后台文件中实现文本到语音的功能。
现在让开始玩代码。打开MainPage.xaml.cs,并在按钮点击事件中,首先创建一个Sapi.SpVoice对象,从AutomationFactory分配给它一个动态变量。
dynamic textToSpeech = AutomationFactory.CreateObject("Sapi.SpVoice");
通过设置Sapi对象实例的Volume属性为100来设置朗读文本的音量。这将产生全音量。然后通过将插入的文本作为参数传递给Speak()方法来调用Speak()方法。
private void btnSpeak_Click(object sender, RoutedEventArgs e)
{
if (App.Current.IsRunningOutOfBrowser && App.Current.HasElevatedPermissions)
{
dynamic textToSpeech = AutomationFactory.CreateObject("Sapi.SpVoice");
textToSpeech.Volume = 100;
textToSpeech.Speak(txtMessage.Text);
}
else
{
MessageBox.Show("Please install it as Trusted Out-of-Browser application.");
}
}
哈哈,应用程序现在可以运行了。构建解决方案以检查任何错误。如果成功,通过按CTRL + F5运行应用程序。首先将应用程序安装为Silverlight Out-of-Browser应用程序。为此,请右键点击Silverlight UI并从上下文菜单中点击“安装”。现在按照设置UI中提到的步骤操作。
一旦成功安装为Out of Browser,它将从本地驱动器打开已安装的应用程序。在TextBox中输入一些文本,然后点击“Speak”按钮。将听到有人朗读文本。是的,就是这样。应用程序现在支持文本到语音。
如果喜欢这个功能,请下载示例应用程序并在本地机器上运行以查看实时演示。本文的源代码也可用。