Silverlight 4 文本到语音转换实现

文本到语音(Text-to-Speech,简称TTS)技术在计算机领域并不是一个新概念。据所知,自Windows 98起,这项技术就已经存在。然而,在Silverlight中,它却是一项全新的功能。现在,可以使用Silverlight应用程序通过API调用来实现文本到语音的转换。这听起来很不错吧?通过COM API,可以实现这一点。

在本文中,将介绍如何使用COM API调用SAPI引擎来实现文本到语音的转换。阅读完本文后,将能够编写自己的代码,开发具有文本到语音功能的Silverlight 4应用程序。

先决条件

要开发这个应用程序,需要以下工具:

  • Microsoft Visual Studio 2010
  • SilverlightTools for Visual Studio 2010

设置好开发环境后,创建一个Silverlight项目。如果是Silverlight应用程序开发的新手,并且想了解Silverlight以及如何创建一个新的Silverlight应用程序,请阅读。

设置OOB项目

在开始之前,需要进行一些配置。因为COM API只在Silverlight Out-of-Browser(OOB)应用程序中工作,需要更改项目设置。

右键点击Silverlight项目,打开属性。点击“启用在浏览器外运行应用程序”复选框,然后点击“Out-of-Browser设置”按钮。

一旦设置页面打开,从屏幕上设置所需的选项。确保勾选了“显示安装菜单”和“在浏览器外运行时需要提升权限”。

完成这些设置后,将能够将这个Web版本安装为Out-of-Browser应用程序。

设置动态关键字项目

现在,需要向项目添加一个DLL程序集引用。因为将在示例中使用动态关键字,需要添加“Microsoft.CSharp”程序集引用。

要这样做,请右键点击Silverlight项目,然后从菜单中选择“添加引用”。

现在从“添加引用”对话框中找到“Microsoft.CSharp”,选择它并点击确定。这将向项目添加程序集引用。

设计UI

一旦所有设置都完成,是时候设计用户界面了。在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”按钮。将听到有人朗读文本。是的,就是这样。应用程序现在支持文本到语音

如果喜欢这个功能,请下载示例应用程序并在本地机器上运行以查看实时演示。本文的源代码也可用。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485