[Silverlight] Silverlight語音朗讀

  • 11101
  • 0

[Silverlight] Silverlight語音朗讀

Native Extensions for Silverlight (NESL)在上週時發佈了新的版本,NESL讓Silverlight在瀏覽器外執行(Out-of-Browser OOB)時更加增強Silverlight許多功能,它目前有Taskbar的API可以與Windows 7的工作列互相搭配,還有像Speech語音功能相關的API等等,而這篇我就簡單示範一下用NESL來實作Silverlight的語音朗讀功能

 

首先到下面這網址去下載NESL,我選的是第二個Source這包含了程式碼以及相關NESL的Libraries

http://code.msdn.microsoft.com/nesl/Release/ProjectReleases.aspx?ReleaseId=5368

 

接著解壓縮後在NESLSourceV2_Preview資料夾內路徑(SilverlightLibraries\Microsoft.Silverlight.Windows.Speech\Bin\Release)下可以找到Microsoft.Silverlight.Windows.dll及Microsoft.Silverlight.Windows.Speech.dll這兩個檔案,先分別右鍵點選這兩個檔案的內容後,選擇解除封鎖方便等一下使用

image

 

然後在Silverlight專案References中增加Microsoft.Silverlight.Windows和Microsoft.Silverlight.Windows.Speech的引用

image

 

而在介面部分則是很簡單的有一個輸入方塊可以輸入要發音的字,以及可以控制發音速度的ComboBox和開始發音的按鈕,XAML代碼如下:

	<UserControl x:Class="SilverlightSpeech.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"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">
    <Canvas x:Name="LayoutRoot" Background="White">
        <TextBox Canvas.Left="113" Canvas.Top="16" Height="45" Name="SpeechWord" Width="246" />
        <Button Canvas.Left="113" Canvas.Top="122" Content="Speech" Height="27" Name="SpeechButton" Width="72" Click="SpeechButton_Click" />
        <TextBlock Canvas.Left="12" Canvas.Top="34" Height="27" Text="輸入要發音的字" Width="93" />
        <ComboBox Canvas.Left="113" Canvas.Top="75" Height="30" Name="RatecomboBox" Width="129" >
            <ComboBoxItem Content="0" IsSelected="True"/>
            <ComboBoxItem Content="5"/>
            <ComboBoxItem Content="10"/>
            <ComboBoxItem Content="-5"/>
            <ComboBoxItem Content="-10"/>
        </ComboBox>
        <TextBlock Canvas.Left="26" Canvas.Top="82" Height="27" Name="textBlock2" Text="速度" Width="55" />
    </Canvas>
</UserControl>

 

在程式部分先要引用Microsoft.Silverlight.Windows.Speech.Synthesis這個namespace,然後再利用SpeechSynthesizer的Rate屬性來控制發音速度,而要發音時呼叫Speak()方法就可以

	using System.Windows;
using System.Windows.Controls;
using Microsoft.Silverlight.Windows.Speech.Synthesis;

namespace SilverlightSpeech
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }
        private void SpeechButton_Click(object sender, RoutedEventArgs e)
        {
            SpeechSynthesizer syn = new SpeechSynthesizer();
            syn.Rate = int.Parse((RatecomboBox.SelectedItem as ComboBoxItem).Content.ToString());
            syn.Speak(SpeechWord.Text);
        }
    }
}

 

範例程式到這就完成了,不過NESL必須在OOB模式而且是elevated trust模式下才能執行,因此要允許此Silverlight應用程式可以在瀏覽器外執行。右鍵點選到Silverlight專案選擇Properties

image

 

然後Enable running application out of the browser選項打勾,再進入下面OOB settings

image

 

  

在Settings對話方塊中,勾選Require elevated trust when running outside the browser

image

 

接著在執行時,點擊滑鼠右鍵將此Silverlight應用程式安裝到電腦上

image

 

image

 

然後在OOB且為elevated trust模式下,輸入發音的字再按發音鈕就會發音囉!

image

 

在這裡因為我使用的語音是預設的Microsoft Anna,所以並不能發中文音,如果要查看電腦裡有安裝的語音可以到控制台裡找語音辨識再選到文字轉換語音就可以看到電腦裡安裝的語音了

image

  

範例下載

 

 

參考資料:

(MSDN) SpeechSynthesizer Members