蔷薇525 发表于 2015-5-12 10:16:08

在 Windows Phone 7 编写 TTS 程序 (Text to Speech)

  本文将介绍如何在 Windows Phone 7 手机上使用微软的翻译服务。这将会用到微软的 Speech API 。


  下面是详细的步骤:
  1. 首先我们要申请一个 AppID
  访问网址:http://www.bing.com/developers/appids.aspx
  2. 输入必须的信息然后获取可用的 Bind API AppID
  一旦注册成功,我们就可以开始 Windows Phone 7 上的程序开发了。
  3. 创建一个 Windows Phone 7 的项目
  4. 添加对微软翻译服务的 Web 应用,首先需要添加服务引用到项目中。右击项目并选择“ Add Service Reference”,如下图所示:
  http://api.microsofttranslator.com/V2/Soap.svc
  5. 现在添加一个全景页到项目中
Using the XAML Code for UI Construction

   
      
      
            
               
                  
                        
                  
               
                  
                  
            
      
      
      
            
               
               
            
      
      
      
            
               
            
      
   

  7. 接下来需要调用 Web 服务方法:“GetLanguagesForSpeakAsync”. 该方法只返回语言代码,例如 English 会返回 en,而 French 返回 fr,界面和代码如下所示
  void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    try
    {
      FrameworkDispatcher.Update();
      var objTranslator = new ServiceReference1.LanguageServiceClient();
      objTranslator.GetLanguagesForSpeakCompleted +=
          new EventHandler(
          translator_GetLanguagesForSpeakCompleted);
      objTranslator.GetLanguagesForSpeakAsync(AppId, objTranslator);
    }
    catch (Exception ex)
    {
      MessageBox.Show(ex.Message);
    }
}
void translator_GetLanguagesForSpeakCompleted(object sender,
                GetLanguagesForSpeakCompletedEventArgs e)
{
    var objTranslator = e.UserState as ServiceReference1.LanguageServiceClient;
    objTranslator.GetLanguageNamesCompleted +=
      new EventHandler(
      translator_GetLanguageNamesCompleted);
    objTranslator.GetLanguageNamesAsync(AppId, "en", e.Result, e.Result);
}
void translator_GetLanguageNamesCompleted(object sender,
   GetLanguageNamesCompletedEventArgs e)
{
    var codes = e.UserState as ObservableCollection;
    var names = e.Result;
    var languagesData = (from code in codes
                     let cindex = codes.IndexOf(code)
                     from name in names
                     let nindex = names.IndexOf(name)
                     where cindex == nindex
                     select new TranslatorLanguage()
                     {
                         Name = name,
                         Code = code
                     }).ToArray();
    this.Dispatcher.BeginInvoke(() =>
    {
      this.ListLanguages.ItemsSource = languagesData;
    });
}
  8. 第二个界面用来输入要发音的文本:
  private void btnSpeak_Click(object sender, RoutedEventArgs e)
{
    var languageCode = "en";
    var language = this.ListLanguages.SelectedItem as TranslatorLanguage;
    if (language != null)
    {
      languageCode = language.Code;
    }
    var objTranslator = new ServiceReference1.LanguageServiceClient();
    objTranslator.SpeakCompleted += translator_SpeakCompleted;
    objTranslator.SpeakAsync(AppId, this.TextToSpeachText.Text,
                           languageCode, "audio/wav");
    panoSpeech.DefaultItem = panoSpeech.Items[(int)2];            
}
void translator_SpeakCompleted(object sender, ServiceReference1.SpeakCompletedEventArgs e)
{
    var client = new WebClient();
    client.OpenReadCompleted += ((s, args) =>
    {
      SoundEffect se = SoundEffect.FromStream(args.Result);
      se.Play();
    });
            client.OpenReadAsync(new Uri(e.Result));
  9. 接下来就是编译项目并执行了
  英文原文:http://www.codeproject.com/KB/windows-phone-7/Text_to_speech_in_wp7.aspx
页: [1]
查看完整版本: 在 Windows Phone 7 编写 TTS 程序 (Text to Speech)