Kolumne: Silverlight Expertise

Text-to-Speech via Cloud und OOB sowie WP7-Tastatur mittels Input Scope
Kommentare

Die Silverlight-Kolumne „Silverlight Expertise“ des dot.NET Magazins präsentiert monatlich zwei leckere Top-How-tos zum Thema Silverlight, sodass Einsteiger und fortgeschrittene Silverlight-Experten durch geballtes Wissen gesättigt werden. Heute stehen auf der Menükarte Text-to-Speech via Cloud, Text-to-Speech via OOB und die richtige Tastatur mittels Input Scope. Viel Spaß!

Menü 1 für Einsteiger: Text-to-Speech via Cloud

Wieso sollte man eine Silverlight-Anwendung sprechen lassen? Mitmenschen mit Sehbehinderungen, zum Beispiel Grauem Star oder altersbedingter Makuladegeneration, nutzen bereits Softwarelösungen, um sich Texte direkt am Bildschirm vorlesen zu lassen. Aber auch für interaktive Features, wie zum Beispiel ein einkommendes Produkt, könnte von der Anwendung angesagt werden. Silverlight selbst bietet allerdings kein Sprachfeature. Dazu kann man sich selbst einen Web Service schreiben, der vom .NET Framework die System.Speech-Klasse nutzt. Oder man behilft sich mit fertigen Cloud-Diensten wie dem Translation-Service des Microsoft Translaters. Dieser bietet nicht nur das Übersetzen von Texten in andere Sprachen an, sondern kann diese auch sprechen. Das API ist REST-basiert und liefert als Antwort einen WAV-Stream. Silverlight selbst unterstützt vorerst keine WAV-Streams, nur das MP3- und WMA-Format. Um dennoch mit einem WAV-Stream arbeiten zu können, muss nur die WaveMediaStreamSource Library heruntergeladen und eingebunden werden. Diese konvertiert den WAV-Stream zu einem MediaElement-freundlichen Format. Als Beispiel soll eine einfache Silverlight-Oberfläche mit einem MediaElement, einer TextBox und einem Button dienen (Listing 1). In der Code-Behind-Datei wird mit dem leichtgewichtigen WebClient proxy eine Instanz erzeugt. Zum Aufrufen von Stream-Inhalten eignet sich die OpenReadAsync-Methode. Diese ruft den URL des REST-Dienstes auf. Damit der Microsoft-Translator-Service genutzt werden kann, muss vorher durch eine kostenfreie Registrierung ein App Key bezogen werden. Bei der Antwort des Servers wird der WAV-Stream durch die WaveMediaStreamSource-Klasse geleitet. Diese kommt dann direkt bei der SetSource-Methode vom MediaElement zum Einsatz. Listing 2 demonstriert den passenden Sourcecode dazu.

Listing 1: MainPage.xaml mit MediaElement, TextBox und Button


    
    
        
        

Listing 2: REST-Aufruf bei Microsoft Translator V2

private void Button_Click(object sender, RoutedEventArgs e)
{
    WebClient proxy = new WebClient();
    proxy.OpenReadCompleted += (s, args) =>
                                   {
                                       WaveMediaStreamSource waveMediaStream = new WaveMediaStreamSource(args.Result);
                                       mePlayer.SetSource(waveMediaStream);
                                       mePlayer.Play();
                                   };

    proxy.OpenReadAsync(new Uri(string.Format("http://api.microsofttranslator.com/V2/http.svc/Speak?appId= HIER ERSETZTEN MIT APP ID VON [1] &text={0}&language=de&format=audio%2fwav", HttpUtility.UrlEncode(tbUserInput.Text))));
}  
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -