DIPLOMARBEIT
DIPLOMARBEIT
DIPLOMARBEIT
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
3.5 Anpassung<br />
Ein Blick in den Quellcode zeigt, dass das Programm auf die Signalverarbeitungsroutinen des Asterisk<br />
Projektes 22 zurückgreift. Dabei handelt es sich um ein bekanntes Open‐Source‐Toolkit zum erstellen<br />
von Telefonanwendungen.<br />
Damit das Ergebnis an den Demonstrator übermittelt werden kann, wurde das Programm um die<br />
Fähigkeit erweitert, die erkannte Nummernfolge in einer Datei zu speichern.<br />
Bevor der Demonstrator DTMF2NUM verwenden kann, muss er mitgeteilt bekommen, wann denn<br />
das Programm aufgerufen werden soll. Dazu wird ein neues Element eingeführt, welches die<br />
DTMF‐Erkennung für das umgebende Element aktivieren soll. Wird das ‐Element beispielswei‐<br />
se innerhalb eines ‐Elements platziert, so sollen bei dieser Eingabe auch DTMF‐Töne akzeptiert<br />
werden.<br />
In der Klasse VxItem, die für alle Elemente zuständig ist, wird eine neue Variable erstellt, welche<br />
festhält, ob eine DTMF‐Erkennung für das aktuelle Element gewünscht ist:<br />
Damit der VoiceXML‐Parser das neue ‐Element auch verarbeiten kann, wird die Funktion<br />
startElement() der Klasse S1 um eine entsprechende Abfrage erweitert:<br />
Die Funktion recognize() der Klasse Recognizer, die das Aufzeichnen und Auswerten einer<br />
Äußerung veranlasst, wird nun um den Parameter dtmf erweitert. Der Funktionsaufruf in der Klasse<br />
VxField sieht nun folgendermaßen aus:<br />
Der Aufruf von DTMF2NUM kann jetzt in der Funktion recognize() direkt nach der Aufzeichnung<br />
einer Äußerung durchgeführt werden:<br />
22 URL: http://www.asterisk.org/<br />
82<br />
boolean dtmf = false;<br />
[…]<br />
else if ( matchesType( "dtmf", localname, qName ) ) {<br />
active.dtmf = true;<br />
} […]<br />
erkannt = recognizer.recognize(dtmf);<br />
if (dtmf) {<br />
String dtmfFile = saveWave.replaceAll( "wav$", "dtmf");<br />
String cmdline = "dtmf2num -f " + dtmfFile + " " + saveWave;<br />
Process p = Runtime.getRuntime().exec(cmdline);<br />
p.waitFor();<br />
}<br />
FileReader reader = new FileReader(dtmfFile);<br />
int result = reader.read();<br />
reader.close();<br />
if (result != -1) return "dtmf_" + (char)result;