|
本文将介绍如何在 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 |
|