Tag Archives: Telekom Tropo

Schnelleinstieg Sprachdialogsystem Telekom Tropo, Teil 2

Nachdem wir im ersten Teil der Telekom Tropo Einführung die ersten Schritte bis zum obligatorischen Hallo-Welt-Beispiel durchgeführt haben, geht es nun darum, dem gesprochenen Text ein wenig mehr Ausdruck zu geben. Sprich: Wie kann ich die Sprachausgabe und die eigentliche Stimme genauer beeinflussen?

Neben der Sprachsynthese Text2Speech lassen sich auch eigene Aufnahmen in Form von Audio-Dateien einbinden. Für diese offensichtlich freiste Form der Tonausgabe muss im Text nur die entsprechende URL referenziert werden:

1
2
3
4
5
6
7
<?php
// Include Tropo classes.
require('tropo.class.php');
$tropo = new Tropo();
$tropo->say("Hello Tropo! http://www.phono.com/audio/troporocks.mp3");
$tropo->renderJson();
?>

Wichtig ist jedoch, dass die Tonqualität in der Ausgabe möglicherweise von der Ausgangsqualität abweicht. Denn Tropo nutzt für die Ausgabe das für Telefonie optimierte Audioformat u-law (8bit, 8Khz).

Aber auch die Text2Speech-Funktion von Tropo verfügt über umfangreiche Stellschrauben. Die eigentliche Stimme wird abhängig von Sprache und Geschlecht (ich mag die britischen Stimmen Elizabeth, Kate und Simon) als einfacher Parameter namens voice angegeben:

1
2
3
4
5
6
7
8
9
<?php
// Include Tropo classes.
require('tropo.class.php');
// Say it with voice
$tropo = new Tropo();
$options = array("voice" => "Katrin");
$tropo->say("Hallo Welt!", $options);
$tropo->renderJson();
?>

Noch mehr Einfluss erlaubt die XML basierte Speech Synthesis Markup Language (SSML). Damit lassen sich u. a. Pausen definieren, der Satzrhythmus (Geschwindigkeit) variieren, Maßeinheiten (Währung) festlegen, Zeitangaben kontrollieren und Phoneme nutzen:

1
2
3
4
5
6
7
8
9
10
<?php
// Include Tropo classes.
require('tropo.class.php');
// Say as XML
$tropo = new Tropo();
$options = array("voice" => "Katrin");
$tropo->say("<speak><break time='1000ms' /><prosody rate='200%'>"Herzlich Willkommen!</prosody></speak>", $options);
$tropo->say("<?xml version='1.0'?><speak>Heute ist der <say-as interpret-as='vxml:date'>20121213</say-as></speak>", $options);
$tropo->renderJson();
?>

Übrigens: Falls man in einer Anwendung häufiger die Sprechgeschwindigkeit und Pausen beeinflussen muss, dann reicht es normalerweise aus, den Text in ein speak-Element zu packen.

1
2
3
4
<speak>
   <break time='1000ms' />
   <prosody rate='200%'>"Herzlich Willkommen!</prosody>
</speak>