19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * --------------------------------------------------------------------------- 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognizer.java 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright 2007 Nuance Communciations, Inc. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the 'License'); you may not 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * use this file except in compliance with the License. 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * License for the specific language governing permissions and limitations under 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the License. 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * --------------------------------------------------------------------------- 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.speech.srec; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.File; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.InputStream; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Locale; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Simple, synchronous speech recognizer, using the Nuance SREC package. 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Usages proceeds as follows: 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>Create a <code>Recognizer</code>. 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>Create a <code>Recognizer.Grammar</code>. 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>Setup the <code>Recognizer.Grammar</code>. 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>Reset the <code>Recognizer.Grammar</code> slots, if needed. 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>Fill the <code>Recognizer.Grammar</code> slots, if needed. 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>Compile the <code>Recognizer.Grammar</code>, if needed. 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>Save the filled <code>Recognizer.Grammar</code>, if needed. 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>Start the <code>Recognizer</code>. 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>Loop over <code>advance</code> and <code>putAudio</code> until recognition complete. 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>Fetch and process results, or notify of failure. 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>Stop the <code>Recognizer</code>. 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>Destroy the <code>Recognizer</code>. 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Below is example code</p> 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre class="prettyprint"> 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // create and start audio input 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * InputStream audio = new MicrophoneInputStream(11025, 11025*5); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // create a Recognizer 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * String cdir = Recognizer.getConfigDir(null); 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognizer recognizer = new Recognizer(cdir + "/baseline11k.par"); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // create and load a Grammar 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognizer.Grammar grammar = recognizer.new Grammar(cdir + "/grammars/VoiceDialer.g2g"); 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // setup the Grammar to work with the Recognizer 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * grammar.setupRecognizer(); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // fill the Grammar slots with names and save, if required 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * grammar.resetAllSlots(); 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for (String name : names) grammar.addWordToSlot("@Names", name, null, 1, "V=1"); 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * grammar.compile(); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * grammar.save(".../foo.g2g"); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // start the Recognizer 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * recognizer.start(); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // loop over Recognizer events 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * while (true) { 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * switch (recognizer.advance()) { 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * case Recognizer.EVENT_INCOMPLETE: 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * case Recognizer.EVENT_STARTED: 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * case Recognizer.EVENT_START_OF_VOICING: 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * case Recognizer.EVENT_END_OF_VOICING: 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // let the Recognizer continue to run 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * continue; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * case Recognizer.EVENT_RECOGNITION_RESULT: 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // success, so fetch results here! 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for (int i = 0; i < recognizer.getResultCount(); i++) { 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * String result = recognizer.getResult(i, Recognizer.KEY_LITERAL); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * break; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * case Recognizer.EVENT_NEED_MORE_AUDIO: 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // put more audio in the Recognizer 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * recognizer.putAudio(audio); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * continue; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * default: 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * notifyFailure(); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * break; 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * break; 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // stop the Recognizer 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * recognizer.stop(); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // destroy the Recognizer 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * recognizer.destroy(); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // stop the audio device 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * audio.close(); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </pre> 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class Recognizer { 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static { 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project System.loadLibrary("srec_jni"); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static String TAG = "Recognizer"; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Result key corresponding to confidence score. 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String KEY_CONFIDENCE = "conf"; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Result key corresponding to literal text. 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String KEY_LITERAL = "literal"; 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Result key corresponding to semantic meaning text. 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String KEY_MEANING = "meaning"; 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // handle to SR_Vocabulary object 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mVocabulary = 0; 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // handle to SR_Recognizer object 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mRecognizer = 0; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Grammar currently associated with Recognizer via SR_GrammarSetupRecognizer 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Grammar mActiveGrammar = null; 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the pathname of the SREC configuration directory corresponding to the 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * language indicated by the Locale. 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This directory contains dictionaries, speech models, 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * configuration files, and other data needed by the Recognizer. 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param locale <code>Locale</code> corresponding to the desired language, 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or null for default, currently <code>Locale.US</code>. 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Pathname of the configuration directory. 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static String getConfigDir(Locale locale) { 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (locale == null) locale = Locale.US; 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String dir = "/system/usr/srec/config/" + 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project locale.toString().replace('_', '.').toLowerCase(); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((new File(dir)).isDirectory()) return dir; 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create an instance of a SREC speech recognizer. 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param configFile pathname of the baseline*.par configuration file, 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which in turn contains references to dictionaries, speech models, 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and other data needed to configure and operate the recognizer. 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A separate config file is needed for each audio sample rate. 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Two files, baseline11k.par and baseline8k.par, which correspond to 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11025 and 8000 hz, are present in the directory indicated by 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getConfigDir}. 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IOException 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Recognizer(String configFile) throws IOException { 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PMemInit(); 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SR_SessionCreate(configFile); 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecognizer = SR_RecognizerCreate(); 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SR_RecognizerSetup(mRecognizer); 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mVocabulary = SR_VocabularyLoad(); 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Represents a grammar loaded into the Recognizer. 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public class Grammar { 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mGrammar = 0; 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a <code>Grammar</code> instance. 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param g2gFileName pathname of g2g file. 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Grammar(String g2gFileName) throws IOException { 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mGrammar = SR_GrammarLoad(g2gFileName); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SR_GrammarSetupVocabulary(mGrammar, mVocabulary); 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Reset all slots. 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void resetAllSlots() { 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SR_GrammarResetAllSlots(mGrammar); 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Add a word to a slot. 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param slot slot name. 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param word word to insert. 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pron pronunciation, or null to derive from word. 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param weight weight to give the word. One is normal, 50 is low. 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param tag semantic meaning tag string. 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void addWordToSlot(String slot, String word, String pron, int weight, String tag) { 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SR_GrammarAddWordToSlot(mGrammar, slot, word, pron, weight, tag); 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Compile all slots. 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void compile() { 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SR_GrammarCompile(mGrammar); 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Setup <code>Grammar</code> with <code>Recognizer</code>. 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setupRecognizer() { 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SR_GrammarSetupRecognizer(mGrammar, mRecognizer); 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mActiveGrammar = this; 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Save <code>Grammar</code> to g2g file. 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param g2gFileName 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IOException 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void save(String g2gFileName) throws IOException { 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SR_GrammarSave(mGrammar, g2gFileName); 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Release resources associated with this <code>Grammar</code>. 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void destroy() { 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // TODO: need to do cleanup and disassociation with Recognizer 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mGrammar != 0) { 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SR_GrammarDestroy(mGrammar); 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mGrammar = 0; 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Clean up resources. 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void finalize() { 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mGrammar != 0) { 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project destroy(); 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalStateException("someone forgot to destroy Grammar"); 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Start recognition 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void start() { 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // TODO: shouldn't be here? 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SR_RecognizerActivateRule(mRecognizer, mActiveGrammar.mGrammar, "trash", 1); 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SR_RecognizerStart(mRecognizer); 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Process some audio and return the current status. 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return recognition event, one of: 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><code>EVENT_INVALID</code> 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><code>EVENT_NO_MATCH</code> 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><code>EVENT_INCOMPLETE</code> 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><code>EVENT_STARTED</code> 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><code>EVENT_STOPPED</code> 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><code>EVENT_START_OF_VOICING</code> 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><code>EVENT_END_OF_VOICING</code> 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><code>EVENT_SPOKE_TOO_SOON</code> 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><code>EVENT_RECOGNITION_RESULT</code> 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><code>EVENT_START_OF_UTTERANCE_TIMEOUT</code> 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><code>EVENT_RECOGNITION_TIMEOUT</code> 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><code>EVENT_NEED_MORE_AUDIO</code> 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><code>EVENT_MAX_SPEECH</code> 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int advance() { 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SR_RecognizerAdvance(mRecognizer); 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Put audio samples into the <code>Recognizer</code>. 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param buf holds the audio samples. 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param offset offset of the first sample. 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param length number of bytes containing samples. 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param isLast indicates no more audio data, normally false. 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return number of bytes accepted. 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int putAudio(byte[] buf, int offset, int length, boolean isLast) { 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SR_RecognizerPutAudio(mRecognizer, buf, offset, length, isLast); 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Read audio samples from an <code>InputStream</code> and put them in the 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>Recognizer</code>. 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param audio <code>InputStream</code> containing PCM audio samples. 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void putAudio(InputStream audio) throws IOException { 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // make sure the audio buffer is allocated 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mPutAudioBuffer == null) mPutAudioBuffer = new byte[512]; 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // read some data 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int nbytes = audio.read(mPutAudioBuffer); 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // eof, so signal Recognizer 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (nbytes == -1) { 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SR_RecognizerPutAudio(mRecognizer, mPutAudioBuffer, 0, 0, true); 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // put it into the Recognizer 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else if (nbytes != SR_RecognizerPutAudio(mRecognizer, mPutAudioBuffer, 0, nbytes, false)) { 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IOException("SR_RecognizerPutAudio failed nbytes=" + nbytes); 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // audio buffer for putAudio(InputStream) 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private byte[] mPutAudioBuffer = null; 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the number of recognition results. Must be called after 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>EVENT_RECOGNITION_RESULT</code> is returned by 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>advance</code>, but before <code>stop</code>. 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return number of results in nbest list. 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getResultCount() { 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SR_RecognizerResultGetSize(mRecognizer); 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get a set of keys for the result. Must be called after 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>EVENT_RECOGNITION_RESULT</code> is returned by 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>advance</code>, but before <code>stop</code>. 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param index index of result. 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return array of keys. 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String[] getResultKeys(int index) { 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SR_RecognizerResultGetKeyList(mRecognizer, index); 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get a result value. Must be called after 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>EVENT_RECOGNITION_RESULT</code> is returned by 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>advance</code>, but before <code>stop</code>. 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param index index of the result. 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param key key of the result. This is typically one of 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>KEY_CONFIDENCE</code>, <code>KEY_LITERAL</code>, or 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>KEY_MEANING</code>, but the user can also define their own keys 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in a grxml file, or in the <code>tag</code> slot of 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>Grammar.addWordToSlot</code>. 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the result. 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getResult(int index, String key) { 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SR_RecognizerResultGetValue(mRecognizer, index, key); 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Stop the <code>Recognizer</code>. 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void stop() { 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SR_RecognizerStop(mRecognizer); 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SR_RecognizerDeactivateRule(mRecognizer, mActiveGrammar.mGrammar, "trash"); 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Reset the acoustic state vectorto it's default value. 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void resetAcousticState() { 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SR_AcousticStateReset(mRecognizer); 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the acoustic state vector. 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param state String containing the acoustic state vector. 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setAcousticState(String state) { 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SR_AcousticStateSet(mRecognizer, state); 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the acoustic state vector. 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return String containing the acoustic state vector. 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getAcousticState() { 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SR_AcousticStateGet(mRecognizer); 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Clean up resources. 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void destroy() { 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mVocabulary != 0) SR_VocabularyDestroy(mVocabulary); 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mVocabulary = 0; 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mRecognizer != 0) SR_RecognizerUnsetup(mRecognizer); 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mRecognizer != 0) SR_RecognizerDestroy(mRecognizer); 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecognizer = 0; 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SR_SessionDestroy(); 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PMemShutdown(); 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Clean up resources. 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void finalize() throws Throwable { 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mVocabulary != 0 || mRecognizer != 0) { 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project destroy(); 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalStateException("someone forgot to destroy Recognizer"); 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* an example session captured, for reference 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void doall() { 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (PMemInit ( ) 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || lhs_audioinOpen ( WAVE_MAPPER, SREC_TEST_DEFAULT_AUDIO_FREQUENCY, &audio_in_handle ) 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || srec_test_init_application_data ( &applicationData, argc, argv ) 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_SessionCreate ( "/system/usr/srec/config/en.us/baseline11k.par" ) 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_RecognizerCreate ( &applicationData.recognizer ) 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_RecognizerSetup ( applicationData.recognizer) 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || ESR_SessionGetLCHAR ( L("cmdline.vocabulary"), filename, &flen ) 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_VocabularyLoad ( filename, &applicationData.vocabulary ) 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_VocabularyGetLanguage ( applicationData.vocabulary, &applicationData.locale ) 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || (applicationData.nametag = NULL) 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_NametagsCreate ( &applicationData.nametags ) 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || (LSTRCPY ( applicationData.grammars [0].grammar_path, "/system/usr/srec/config/en.us/grammars/VoiceDialer.g2g" ), 0) 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || (LSTRCPY ( applicationData.grammars [0].grammarID, "BothTags" ), 0) 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || (LSTRCPY ( applicationData.grammars [0].ruleName, "trash" ), 0) 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || (applicationData.grammars [0].is_ve_grammar = ESR_FALSE, 0) 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_GrammarLoad (applicationData.grammars [0].grammar_path, &applicationData.grammars [applicationData.grammarCount].grammar ) 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_GrammarSetupVocabulary ( applicationData.grammars [0].grammar, applicationData.vocabulary ) 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_GrammarSetupRecognizer( applicationData.grammars [0].grammar, applicationData.recognizer ) 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_GrammarSetDispatchFunction ( applicationData.grammars [0].grammar, L("myDSMCallback"), NULL, myDSMCallback ) 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || (applicationData.grammarCount++, 0) 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_RecognizerActivateRule ( applicationData.recognizer, applicationData.grammars [0].grammar, 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project applicationData.grammars [0].ruleName, 1 ) 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || (applicationData.active_grammar_num = 0, 0) 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || lhs_audioinStart ( audio_in_handle ) 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_RecognizerStart ( applicationData.recognizer ) 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || strl ( applicationData.grammars [0].grammar, &applicationData, audio_in_handle, &recognition_count ) 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_RecognizerStop ( applicationData.recognizer ) 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || lhs_audioinStop ( audio_in_handle ) 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_RecognizerDeactivateRule ( applicationData.recognizer, applicationData.grammars [0].grammar, applicationData.grammars [0].ruleName ) 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || (applicationData.active_grammar_num = -1, 0) 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_GrammarDestroy ( applicationData.grammars [0].grammar ) 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || (applicationData.grammarCount--, 0) 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_NametagsDestroy ( applicationData.nametags ) 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || (applicationData.nametags = NULL, 0) 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_VocabularyDestroy ( applicationData.vocabulary ) 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || (applicationData.vocabulary = NULL) 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_RecognizerUnsetup ( applicationData.recognizer) // releases acoustic models 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_RecognizerDestroy ( applicationData.recognizer ) 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || (applicationData.recognizer = NULL) 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || SR_SessionDestroy ( ) 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || srec_test_shutdown_application_data ( &applicationData ) 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || lhs_audioinClose ( &audio_in_handle ) 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || PMemShutdown ( ) 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // PMem native methods 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void PMemInit(); 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void PMemShutdown(); 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // SR_Session native methods 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_SessionCreate(String filename); 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_SessionDestroy(); 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // SR_Recognizer native methods 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Reserved value. 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static int EVENT_INVALID = 0; 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>Recognizer</code> could not find a match for the utterance. 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static int EVENT_NO_MATCH = 1; 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>Recognizer</code> processed one frame of audio. 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static int EVENT_INCOMPLETE = 2; 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>Recognizer</code> has just been started. 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static int EVENT_STARTED = 3; 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>Recognizer</code> is stopped. 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static int EVENT_STOPPED = 4; 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Beginning of speech detected. 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static int EVENT_START_OF_VOICING = 5; 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * End of speech detected. 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static int EVENT_END_OF_VOICING = 6; 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Beginning of utterance occured too soon. 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static int EVENT_SPOKE_TOO_SOON = 7; 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognition match detected. 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static int EVENT_RECOGNITION_RESULT = 8; 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Timeout occured before beginning of utterance. 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static int EVENT_START_OF_UTTERANCE_TIMEOUT = 9; 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Timeout occured before speech recognition could complete. 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static int EVENT_RECOGNITION_TIMEOUT = 10; 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Not enough samples to process one frame. 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static int EVENT_NEED_MORE_AUDIO = 11; 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * More audio encountered than is allowed by 'swirec_max_speech_duration'. 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final static int EVENT_MAX_SPEECH = 12; 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Produce a displayable string from an <code>advance</code> event. 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return String representing the event. 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static String eventToString(int event) { 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (event) { 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_INVALID: 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "EVENT_INVALID"; 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_NO_MATCH: 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "EVENT_NO_MATCH"; 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_INCOMPLETE: 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "EVENT_INCOMPLETE"; 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_STARTED: 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "EVENT_STARTED"; 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_STOPPED: 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "EVENT_STOPPED"; 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_START_OF_VOICING: 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "EVENT_START_OF_VOICING"; 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_END_OF_VOICING: 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "EVENT_END_OF_VOICING"; 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_SPOKE_TOO_SOON: 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "EVENT_SPOKE_TOO_SOON"; 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_RECOGNITION_RESULT: 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "EVENT_RECOGNITION_RESULT"; 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_START_OF_UTTERANCE_TIMEOUT: 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "EVENT_START_OF_UTTERANCE_TIMEOUT"; 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_RECOGNITION_TIMEOUT: 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "EVENT_RECOGNITION_TIMEOUT"; 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_NEED_MORE_AUDIO: 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "EVENT_NEED_MORE_AUDIO"; 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_MAX_SPEECH: 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "EVENT_MAX_SPEECH"; 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "EVENT_" + event; 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // SR_Recognizer methods 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_RecognizerStart(int recognizer); 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_RecognizerStop(int recognizer); 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int SR_RecognizerCreate(); 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_RecognizerDestroy(int recognizer); 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_RecognizerSetup(int recognizer); 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_RecognizerUnsetup(int recognizer); 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean SR_RecognizerIsSetup(int recognizer); 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native String SR_RecognizerGetParameter(int recognizer, String key); 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int SR_RecognizerGetSize_tParameter(int recognizer, String key); 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean SR_RecognizerGetBoolParameter(int recognizer, String key); 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_RecognizerSetParameter(int recognizer, String key, String value); 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_RecognizerSetSize_tParameter(int recognizer, 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String key, int value); 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_RecognizerSetBoolParameter(int recognizer, String key, 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean value); 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_RecognizerSetupRule(int recognizer, int grammar, 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String ruleName); 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean SR_RecognizerHasSetupRules(int recognizer); 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_RecognizerActivateRule(int recognizer, int grammar, 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String ruleName, int weight); 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_RecognizerDeactivateRule(int recognizer, int grammar, 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String ruleName); 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_RecognizerDeactivateAllRules(int recognizer); 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean SR_RecognizerIsActiveRule(int recognizer, int grammar, 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String ruleName); 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean SR_RecognizerCheckGrammarConsistency(int recognizer, 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int grammar); 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int SR_RecognizerPutAudio(int recognizer, byte[] buffer, int offset, 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int length, boolean isLast); 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int SR_RecognizerAdvance(int recognizer); 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private static native void SR_RecognizerLoadUtterance(int recognizer, 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // const LCHAR* filename); 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private static native void SR_RecognizerLoadWaveFile(int recognizer, 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // const LCHAR* filename); 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private static native void SR_RecognizerSetLockFunction(int recognizer, 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // SR_RecognizerLockFunction function, void* data); 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean SR_RecognizerIsSignalClipping(int recognizer); 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean SR_RecognizerIsSignalDCOffset(int recognizer); 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean SR_RecognizerIsSignalNoisy(int recognizer); 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean SR_RecognizerIsSignalTooQuiet(int recognizer); 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean SR_RecognizerIsSignalTooFewSamples(int recognizer); 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native boolean SR_RecognizerIsSignalTooManySamples(int recognizer); 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private static native void SR_Recognizer_Change_Sample_Rate (size_t new_sample_rate); 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // SR_AcousticState native methods 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_AcousticStateReset(int recognizer); 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_AcousticStateSet(int recognizer, String state); 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native String SR_AcousticStateGet(int recognizer); 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // SR_Grammar native methods 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_GrammarCompile(int grammar); 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_GrammarAddWordToSlot(int grammar, String slot, 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String word, String pronunciation, int weight, String tag); 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_GrammarResetAllSlots(int grammar); 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private static native void SR_GrammarAddNametagToSlot(int grammar, String slot, 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // const struct SR_Nametag_t* nametag, int weight, String tag); 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_GrammarSetupVocabulary(int grammar, int vocabulary); 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private static native void SR_GrammarSetupModels(int grammar, SR_AcousticModels* models); 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_GrammarSetupRecognizer(int grammar, int recognizer); 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_GrammarUnsetupRecognizer(int grammar); 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private static native void SR_GrammarGetModels(int grammar,SR_AcousticModels** models); 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int SR_GrammarCreate(); 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_GrammarDestroy(int grammar); 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int SR_GrammarLoad(String filename); 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_GrammarSave(int grammar, String filename); 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private static native void SR_GrammarSetDispatchFunction(int grammar, 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // const LCHAR* name, void* userData, SR_GrammarDispatchFunction function); 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private static native void SR_GrammarSetParameter(int grammar, const 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // LCHAR* key, void* value); 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private static native void SR_GrammarSetSize_tParameter(int grammar, 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // const LCHAR* key, size_t value); 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private static native void SR_GrammarGetParameter(int grammar, const 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // LCHAR* key, void** value); 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private static native void SR_GrammarGetSize_tParameter(int grammar, 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // const LCHAR* key, size_t* value); 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private static native void SR_GrammarCheckParse(int grammar, const LCHAR* 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // transcription, SR_SemanticResult** result, size_t* resultCount); 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_GrammarAllowOnly(int grammar, String transcription); 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_GrammarAllowAll(int grammar); 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // SR_Vocabulary native methods 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private static native int SR_VocabularyCreate(); 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int SR_VocabularyLoad(); 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private static native void SR_VocabularySave(SR_Vocabulary* self, 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // const LCHAR* filename); 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private static native void SR_VocabularyAddWord(SR_Vocabulary* self, 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // const LCHAR* word); 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private static native void SR_VocabularyGetLanguage(SR_Vocabulary* self, 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ESR_Locale* locale); 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void SR_VocabularyDestroy(int vocabulary); 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native String SR_VocabularyGetPronunciation(int vocabulary, String word); 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // SR_RecognizerResult native methods 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native byte[] SR_RecognizerResultGetWaveform(int recognizer); 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int SR_RecognizerResultGetSize(int recognizer); 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int SR_RecognizerResultGetKeyCount(int recognizer, int nbest); 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native String[] SR_RecognizerResultGetKeyList(int recognizer, int nbest); 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native String SR_RecognizerResultGetValue(int recognizer, 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int nbest, String key); 7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // private static native void SR_RecognizerResultGetLocale(int recognizer, ESR_Locale* locale); 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 719