Mittwoch, 23. Mai 2012


Artikel

Juni 2009 | Artikel

Java Speech API 2.0: Finale Aufräumarbeiten

(Link zum Artikel: http://www.entwickler.de/jaxenter//002392)

Was sich im Major Release getan hat

Text: Dr. Dirk Schnelle-Walka
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share
Heimlich, still und leise wurde die Java Speech API 2 (JSR 113) vom Final Release Candidate überarbeitet und Anfang Mai als Final-Release veröffentlicht. Dennoch hat es an der API noch einige Umbauarbeiten gegeben. Dieser Artikel beschreibt die Änderungen von der Vorgängerversion zu der nun finalisierten Version.
Teil 1   Teil 2   Teil 3   Teil 4   

Im letzten Artikel wurde bereits ein erster Blick auf die Vorabversion der Java Speech API 2, deren Nutzung und die wesentlichen Unterschiede zur JSAPI 1.0 geworfen. Trotz der Bestrebungen von Conversay, dem Specification Lead, wie den Launch einer Entwicklerplattform Conversations und der Verleihung des Java Rock Star Awards auf der Java One 2007 war es eher ruhig um die zweite Version der Java Speech API. Nun aber wurde der JSR 113 beendet und die Java Speech API 2 finalisiert. Das folgende Listing zeigt noch einmal das zusammengefasste Beispiel aus dem letzten Artikel inklusive der Änderungen, die zur Anpassung nötig waren.

  1. import javax.speech.*;
  2. import javax.speech.recognition.*;
  3. import javax.speech.synthesis.*;
  4. public class Jsapi20Demo implements ResultListener {
  5. public void startApp() {
  6. SpeechLocale german = new SpeechLocale("de");
  7. try {
  8. // Deutschen Erkenner erzeugen
  9. RecognizerMode recMode = new RecognizerMode(german);
  10. Recognizer rec = (Recognizer) EngineManager.createEngine(recMode);
  11. // Erkenner starten
  12. rec.allocate();
  13. // Grammatik laden und aktivieren
  14. String grammarMarkup = "<grammar root='sentence' xml:lang='de'"
  15. + "version='1.0' "
  16. + "xmlns='http://www.w3.org/2001/06/grammar'>"
  17. + "<rule id='sentence' scope='public'>"
  18. + "<one-of><item> Erdbeere </item><item> Vanille </item>"
  19. + "<item> Schokolade </item></one-of>"
  20. + "</rule></grammar>";
  21. RuleGrammar gram = rec.loadRuleGrammar("icecream", grammarMarkup);
  22. // Listener bekannt machen, um das Ergebnis zu erhalten
  23. rec.addResultListener(this);
  24. // Fokus auf den Erkenner und lauschen
  25. rec.requestFocus();
  26. rec.resume();
  27. // Anweisungen ausgeben, sobald der Erkenner soweit ist
  28. rec.waitEngineState(Engine.RESUMED);
  29. // Deutschen Synthesizer erzeugen
  30. SynthesizerMode synMode = new SynthesizerMode(german);
  31. Synthesizer synth = (Synthesizer)
  32. EngineManager.createEngine(synMode);
  33. // Bereitmachen, um etwas auszugeben
  34. synth.allocate();
  35. // Sprich!
  36. synth.speakMarkup("<speak version='1.0' xml:lang='de'>"
  37. + "Welches ist Ihr Lieblingseis?></speak>", null);
  38. } catch (Exception e) {
  39. e.printStackTrace();
  40. }
  41. }
  42. public void resultUpdate(ResultEvent event) {
  43. switch (event.getId()) {
  44. case ResultEvent.RESULT_ACCEPTED:
  45. FinalRuleResult result = (FinalRuleResult) event.getSource();
  46. Result r = (Result) (event.getSource());
  47. ResultToken tokens[] = r.getBestTokens();
  48. // Erkannte Antwort ausgeben
  49. for (int i = 0; i < tokens.length; i++) {
  50. System.out.print(tokens[i].getText() + " ");
  51. }
  52. System.out.println();
  53. break;
  54. }
  55. }
  56. }

In diesem Beispiel wird die Benutzerin nach ihrer Lieblingseissorte gefragt, was diese mit einer der gängigen Sorten Erdbeer, Schokolade oder Vanille natürlich sprachlich beantworten kann. Ihre Eingabe wird anschließend auf der Konsole ausgegeben.

Java Speech API: Demo herunterladen

Eine Demo zur Java Speech API im Zip-Format gibt es hier.

Die Änderungen, die mit der finalen Version einhergingen, sind marginal. Dennoch ist seit dem Final Approval Ballot fast ein Jahr ins Land gegangen, bevor die API im JSR 113 die letzte Hürde nahm und nun in der finalen Version vorliegt. Der Final Approval Ballot ist die letzte Stufe im JSR der in der geschlossenen Expertengruppe stattfindet. Innerhalb dieser Runde werden ein TCK (Technology Compatibiltiy Kit) und eine RI (Reference Implementation) entwickelt. Die RI muss entwickelt werden, um zu gewährleisten, dass die API tatsächlich implementierbar ist und dass es keine Lücken in der Spezifikation gibt, die im Allgemeinen als JavaDoc vorliegt. Das TCK stellt eine Testumgebung zur Verfügung, die das Verhalten der Implementierung entsprechend der Spezifikation testet. Anschließend wird das Ergebnis dem PMO (Program Management Office), das ist in der Regel SUN, vorgestellt, um den JSR zu schließen. Genau in dieser Phase scheint es aber Probleme gegeben zu haben. Diese Probleme werden eingefleischte JavaianerInnen beim ersten Blick auf die API-Dokumentation sehen:

Teil 1   Teil 2   Teil 3   Teil 4   

Kommentare