Речь Google TTS

1

Я пытаюсь заставить речь Google TTS работать, потому что Windows RT/Metro не содержит определения для System.Speech. Код ниже компилируется без ошибок, но ничего не говорится. Я отлаживал и проверял, содержит ли ListBox.SelectedItem текст, и он это делает.

Библиотеки называются:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.UI.Popups;
using System.Net.Http;

Так я называю myMediaElement:

MediaElement myMediaElement = new MediaElement();

Это то, что я пытаюсь сделать:

private void RepeatWord_Click(object sender, RoutedEventArgs e)
{
    string pathx = "http://translate.google.com/translate_tts?tl=en&q=" + ListBox.SelectedItem.ToString();
    myMediaElement.Source = new Uri(pathx, UriKind.RelativeOrAbsolute);
    myMediaElement.Play();
}
Теги:
visual-studio-2012
windows-8

1 ответ

1
Лучший ответ

Похоже, вы создаете MediaElement в коде. Убедитесь, что он добавлен в пользовательский интерфейс. Он не будет воспроизводиться, если он просто ссылается на частное поле. Затем вы можете либо установить LoadedBehavior на "Play" (нет необходимости вызывать Play()), либо вам нужно дождаться загрузки носителя до вызова Play(). Для тестирования я просто использовал Thread.Sleep() но я ожидал бы, что для этого есть обратный вызов.

И последнее, но не менее важное: конструктор Uri обрабатывает большую часть кодировки url для вас, но если вы хотите, чтобы Google услышал высказывание "перетаскивание", вам нужно самому позаботиться об амперсанде.

Кредиты: эти сообщения помогли мне найти этот ответ и могут иметь дополнительную информацию для вас:

http://social.msdn.microsoft.com/Forums/wpapps/en-US/4baec4b9-451e-4727-a182-555bc312b0bb/using-mediaelement-from-external-source-

событие MediaOpened неспособно повысить

  • 0
    Благодарю. Я добавил его в пользовательский интерфейс и добавил код, чтобы добавить его в качестве дочернего элемента в сетку. MainGrid.Children.Add(myMediaElement) и все MainGrid.Children.Add(myMediaElement) .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню