14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------* 24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * android_speech_srec_Recognizer.cpp * 34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Copyright 2007 Nuance Communciations, Inc. * 54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the 'License'); * 74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * you may not use this file except in compliance with the License. * 84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * You may obtain a copy of the License at * 104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 * 114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Unless required by applicable law or agreed to in writing, software * 134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * distributed under the License is distributed on an 'AS IS' BASIS, * 144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * See the License for the specific language governing permissions and * 164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * limitations under the License. * 174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/ 194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <string.h> 224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <stdio.h> 234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <stdlib.h> 244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <jni.h> 254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define LOG_TAG "srec_jni" 274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "utils/Log.h" 284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "passert.h" 304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ESR_CommandLine.h" 314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ESR_Session.h" 324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "LCHAR.h" 334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PFile.h" 344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PFileSystem.h" 354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PANSIFileSystem.h" 364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//#include "PMemoryFileSystem.h" 374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "plog.h" 384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pmemory.h" 394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ptypes.h" 404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_Grammar.h" 414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_Recognizer.h" 424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_RecognizerImpl.h" 434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_RecognizerResult.h" 444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_Session.h" 454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_Vocabulary.h" 464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_AcousticState.h" 474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_Nametag.h" 484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PStackSize.h" 494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// 534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// helper function to throw an exception 544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// 554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic void JNU_ThrowByName(JNIEnv *env, const char* name, const char* msg) { 564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project jclass cls = env->FindClass(name); 574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (cls != NULL) { 584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env->ThrowNew(cls, msg); 594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env->DeleteLocalRef(cls); 614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic void unimplemented(JNIEnv* env) { 644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project JNU_ThrowByName(env, "java/lang/IllegalStateException", "unimplemented!!!"); 654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic void checkEsrError(JNIEnv* env, ESR_ReturnCode esr_status) { 684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (esr_status != ESR_SUCCESS) { 694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project JNU_ThrowByName(env, "java/lang/IllegalStateException", ESR_rc2str(esr_status)); 704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/////////////////////////////////////////////////////////////////////////// 754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// PMem JNI implementations 764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/////////////////////////////////////////////////////////////////////////// 774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_PMemInit 794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (JNIEnv *env, jclass clazz) { 804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, PMemInit()); 814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_PMemShutdown 844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (JNIEnv *env, jclass clazz) { 854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, PMemShutdown()); 864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project////////////////////////////////////////////////////////////////////////// 904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// SR_Session JNI implementations 914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project////////////////////////////////////////////////////////////////////////// 924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1SessionCreate 944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (JNIEnv *env, jclass clazz, jstring fileName) { 954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // TODO: check for fileName NPE 964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const char* fn = env->GetStringUTFChars(fileName, 0); 974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_SessionCreate(fn)); // TODO: can I post this before freeing the string? 984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env->ReleaseStringUTFChars(fileName, fn); 994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1SessionDestroy 1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (JNIEnv *env, jclass clazz) { 1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_SessionDestroy()); 1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project////////////////////////////////////////////////////////////////////////// 1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// SR_Recognizer JNI implementations 1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project////////////////////////////////////////////////////////////////////////// 1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerStart 112b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerStart((SR_Recognizer*)recognizer)); 1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerStop 117b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerStop((SR_Recognizer*)recognizer)); 1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 121b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oaklandstatic JNIEXPORT jlong JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerCreate 1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (JNIEnv *env, jclass clazz) { 1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_Recognizer* recognizer = NULL; 1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // TODO: do we need to clean up the recognizer if this fails? 1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerCreate(&recognizer)); 126b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland return (jlong)recognizer; 1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerDestroy 130b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerDestroy((SR_Recognizer*)recognizer)); 1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerSetup 136b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerSetup((SR_Recognizer*)recognizer)); 1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerUnsetup 142b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerUnsetup((SR_Recognizer*)recognizer)); 1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerIsSetup 148b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL rtn = ESR_FALSE; 1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerIsSetup((SR_Recognizer*)recognizer, &rtn)); 1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rtn; 1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jstring JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerGetParameter 155b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer, jstring key) { 1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project unimplemented(env); 1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return 0; 1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jint JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerGetSize_1tParameter 161b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer, jstring key) { 1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project unimplemented(env); 1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return 0; 1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerGetBoolParameter 167b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer, jstring key) { 1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project unimplemented(env); 1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return JNI_FALSE; 1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerSetParameter 173b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer, jstring key, jstring value) { 1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project unimplemented(env); 1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerSetSize_1tParameter 179b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer, jstring key, jint value) { 1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project unimplemented(env); 1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerSetBoolParameter 185b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer, jstring key , jboolean value) { 1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project unimplemented(env); 1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return; 1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerSetupRule 191b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer, jlong grammar, jstring ruleName) { 1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const char* rn = env->GetStringUTFChars(ruleName, 0); 1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerSetupRule((SR_Recognizer*)recognizer, (SR_Grammar*)grammar, rn)); 1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env->ReleaseStringUTFChars(ruleName, rn); 1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerHasSetupRules 198b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL rtn = ESR_FALSE; 2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerHasSetupRules((SR_Recognizer*)recognizer, &rtn)); 2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rtn; 2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerActivateRule 205b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer, jlong grammar, jstring ruleName, jint weight) { 2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const char* rn = env->GetStringUTFChars(ruleName, 0); 2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerActivateRule((SR_Recognizer*)recognizer, (SR_Grammar*)grammar, rn, weight)); 2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env->ReleaseStringUTFChars(ruleName, rn); 2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerDeactivateRule 212b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer, jlong grammar, jstring ruleName) { 2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const char* rn = env->GetStringUTFChars(ruleName, 0); 2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerDeactivateRule((SR_Recognizer*)recognizer, (SR_Grammar*)grammar, rn)); 2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env->ReleaseStringUTFChars(ruleName, rn); 2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerDeactivateAllRules 219b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerDeactivateAllRules((SR_Recognizer*)recognizer)); 2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerIsActiveRule 224b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer, jlong grammar, jstring ruleName) { 2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL rtn = ESR_FALSE; 2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const char* rn = env->GetStringUTFChars(ruleName, 0); 2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerIsActiveRule((SR_Recognizer*)recognizer, (SR_Grammar*)grammar, rn, &rtn)); 2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env->ReleaseStringUTFChars(ruleName, rn); 2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rtn; 2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerCheckGrammarConsistency 233b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer, jlong grammar) { 2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL rtn = ESR_FALSE; 2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerCheckGrammarConsistency((SR_Recognizer*)recognizer, (SR_Grammar*)grammar, &rtn)); 2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rtn; 2374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jint JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerPutAudio 240b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer, jbyteArray audio, jint offset, jint length, jboolean isLast) { 2414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // set the length 2424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project jbyte buffer[1024]; 2434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (length > (int)sizeof(buffer)) length = sizeof(buffer); 2444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t samples = length / sizeof(asr_int16_t); 2454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project length = samples * sizeof(asr_int16_t); 2464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // fetch data from java 2484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env->GetByteArrayRegion(audio, offset, length, buffer); 2494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // put the samples into the recognizer 2514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerPutAudio((SR_Recognizer*)recognizer, 2524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (asr_int16_t*)buffer, &samples, isLast ? ESR_TRUE : ESR_FALSE)); 2534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (samples != length / sizeof(asr_int16_t)) { 2544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, ESR_READ_ERROR); 2554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return 0; 2564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return samples * sizeof(asr_int16_t); 2594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jint JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerAdvance 262b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 2634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerStatus status = SR_RECOGNIZER_EVENT_INVALID; 2644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResultType type = SR_RECOGNIZER_RESULT_TYPE_INVALID; 2654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerResult* recognizerResult = NULL; 2664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerAdvance((SR_Recognizer*)recognizer, &status, &type, &recognizerResult)); 2674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return status; 2684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalClipping 271b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 2724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL rtn = ESR_FALSE; 2734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerIsSignalClipping((SR_Recognizer*)recognizer, &rtn)); 2744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rtn; 2754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalDCOffset 278b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 2794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL rtn = ESR_FALSE; 2804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerIsSignalDCOffset((SR_Recognizer*)recognizer, &rtn)); 2814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rtn; 2824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalNoisy 285b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 2864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL rtn = ESR_FALSE; 2874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerIsSignalNoisy((SR_Recognizer*)recognizer, &rtn)); 2884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rtn; 2894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalTooQuiet 292b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 2934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL rtn = ESR_FALSE; 2944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerIsSignalTooQuiet((SR_Recognizer*)recognizer, &rtn)); 2954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rtn; 2964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalTooFewSamples 299b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 3004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL rtn = ESR_FALSE; 3014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerIsSignalTooFewSamples((SR_Recognizer*)recognizer, &rtn)); 3024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rtn; 3034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jboolean JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalTooManySamples 306b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 3074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL rtn = ESR_FALSE; 3084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerIsSignalTooManySamples((SR_Recognizer*)recognizer, &rtn)); 3094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rtn; 3104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project////////////////////////////////////////////////////////////////////////// 3144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// SR_AcousticState JNI implementations 3154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project////////////////////////////////////////////////////////////////////////// 3164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1AcousticStateReset 318b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 3194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_AcousticStateReset((SR_Recognizer*)recognizer)); 3204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1AcousticStateSet 323b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer, jstring state) { 3244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const char* st = env->GetStringUTFChars(state, 0); 3254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_AcousticStateSet((SR_Recognizer*)recognizer, st)); 3264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env->ReleaseStringUTFChars(state, st); 3274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jstring JNICALL Java_android_speech_srec_Recognizer_SR_1AcousticStateGet 330b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 3314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project char rtn[1000]; 3324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t rtnLength = sizeof(rtn) - 1; 3334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode esr_status = SR_AcousticStateGet((SR_Recognizer*)recognizer, rtn, &rtnLength); 3344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (esr_status) { 3354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, esr_status); 3364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return NULL; 3374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rtn[rtnLength] = 0; 3394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return env->NewStringUTF(rtn); 3404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project////////////////////////////////////////////////////////////////////////// 3444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// SR_Grammar JNI implementations 3454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project////////////////////////////////////////////////////////////////////////// 3464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarCompile 348b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong grammar) { 3494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_GrammarCompile((SR_Grammar*)grammar)); 3504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarAddWordToSlot 353b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong grammar, jstring slot, jstring word, jstring pronunciation, jint weight, jstring tag) { 3544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const char* sl = 0; 3554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const char* wo = 0; 3564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const char* pr = 0; 3574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const char* ta = 0; 3584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ((sl = env->GetStringUTFChars(slot, 0)) && 3594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (wo = env->GetStringUTFChars(word, 0)) && 3604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (!pronunciation || (pr = env->GetStringUTFChars(pronunciation, 0))) && 3614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (ta = env->GetStringUTFChars(tag, 0))) { 3624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_GrammarAddWordToSlot((SR_Grammar*)grammar, sl, wo, pr, weight, ta)); 3634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (ta) env->ReleaseStringUTFChars(tag, ta); 3654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (pr) env->ReleaseStringUTFChars(pronunciation, pr); 3664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (wo) env->ReleaseStringUTFChars(word, wo); 3674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (sl) env->ReleaseStringUTFChars(slot, sl); 3684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarResetAllSlots 371b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong grammar) { 3724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_GrammarResetAllSlots((SR_Grammar*)grammar)); 3734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarSetupVocabulary 376b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong grammar, jlong vocabulary) { 3774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_GrammarSetupVocabulary((SR_Grammar*)grammar, (SR_Vocabulary*)vocabulary)); 3784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarSetupRecognizer 381b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong grammar, jlong recognizer) { 3824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_GrammarSetupRecognizer((SR_Grammar*)grammar, (SR_Recognizer*)recognizer)); 3834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarUnsetupRecognizer 386b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong grammar) { 3874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_GrammarUnsetupRecognizer((SR_Grammar*)grammar)); 3884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 390b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oaklandstatic JNIEXPORT jlong JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarCreate 3914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (JNIEnv *env, jclass clazz) { 3924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_Grammar* grammar = 0; 3934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_GrammarCreate(&grammar)); 394b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland return (jlong)grammar; 3954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarDestroy 398b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong grammar) { 3994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_GrammarDestroy((SR_Grammar*)grammar)); 4004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 4014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 402b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oaklandstatic JNIEXPORT jlong JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarLoad 4034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (JNIEnv *env, jclass clazz, jstring fileName) { 4044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // TODO: check for fileName NPE 4054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_Grammar* grammar = 0; 4064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const char* fn = env->GetStringUTFChars(fileName, 0); 4074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_GrammarLoad(fn, &grammar)); 4084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env->ReleaseStringUTFChars(fileName, fn); 409b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland return (jlong)grammar; 4104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 4114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarSave 413b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong grammar, jstring fileName) { 4144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const char* fn = env->GetStringUTFChars(fileName, 0); 4154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_GrammarSave((SR_Grammar*)grammar, fn)); 4164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env->ReleaseStringUTFChars(fileName, fn); 4174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 4184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarAllowOnly 420b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong grammar, jstring transcription) { 4214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const char* tr = env->GetStringUTFChars(transcription, 0); 4224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_GrammarSave((SR_Grammar*)grammar, tr)); 4234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env->ReleaseStringUTFChars(transcription, tr); 4244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 4254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1GrammarAllowAll 427b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong grammar) { 4284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_GrammarAllowAll((SR_Grammar*)grammar)); 4294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 4304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project////////////////////////////////////////////////////////////////////////// 4334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// SR_Vocabulary JNI implementations 4344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project////////////////////////////////////////////////////////////////////////// 4354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 436b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oaklandstatic JNIEXPORT jlong JNICALL Java_android_speech_srec_Recognizer_SR_1VocabularyLoad 4374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (JNIEnv *env, jclass clazz) { 4384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project char filename[P_PATH_MAX]; 4394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t flen = sizeof(filename) - 1; 4404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, ESR_SessionGetLCHAR ( L("cmdline.vocabulary"), filename, &flen )); 4414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project filename[sizeof(filename) - 1] = 0; 4424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // TODO: do we need to clean up the recognizer if this fails? 4434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_Vocabulary* vocabulary = NULL; 4444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_VocabularyLoad(filename, &vocabulary)); 445b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland return (jlong)vocabulary; 4464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 4474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT void JNICALL Java_android_speech_srec_Recognizer_SR_1VocabularyDestroy 449b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong vocabulary) { 4504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // TODO: do we need to clean up the recognizer if this fails? 4514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_VocabularyDestroy((SR_Vocabulary*)vocabulary)); 4524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 4534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jstring JNICALL Java_android_speech_srec_Recognizer_SR_1VocabularyGetPronunciation 455b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong vocabulary, jstring word) { 4564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project char rtn[1000]; 4574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t rtnLength = sizeof(rtn) - 1; 4584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const char* wo = env->GetStringUTFChars(word, 0); 4594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode esr_status = SR_VocabularyGetPronunciation((SR_Vocabulary*)vocabulary, wo, rtn, &rtnLength); 4604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env->ReleaseStringUTFChars(word, wo); 4614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (esr_status) { 4624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, esr_status); 4634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return NULL; 4644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 4654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rtn[rtnLength] = 0; 4664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return env->NewStringUTF(rtn); 4674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 4684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project////////////////////////////////////////////////////////////////////////// 4714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// SR_RecognizerResult JNI implementations 4724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project////////////////////////////////////////////////////////////////////////// 4734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jbyteArray JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetWaveform 475b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 4764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project unimplemented(env); 4774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return 0; 4784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 4794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jint JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetSize 481b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer) { 4824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t size = 0; 4834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerResultGetSize(((SR_RecognizerImpl*)recognizer)->result, &size)); 4844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return size; 4854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 4864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jint JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetKeyCount 488b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer, jint nbest) { 4894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t size = 0; 4904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, SR_RecognizerResultGetKeyCount(((SR_RecognizerImpl*)recognizer)->result, nbest, &size)); 4914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return size; 4924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 4934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jobjectArray JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetKeyList 495b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer, jint nbest) { 4964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // fetch list 4974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* list[200]; 4984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t listSize = sizeof(list) / sizeof(list[0]); 4994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode esr_status = SR_RecognizerResultGetKeyList(((SR_RecognizerImpl*)recognizer)->result, nbest, list, &listSize); 5004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (esr_status) { 5014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, esr_status); 5024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return NULL; 5034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 5044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // create String[] of keys 506af6bc004589c456d52a8858ec8e3b448d17077bcJohn Eckerdal jclass stringClass = env->FindClass("java/lang/String"); 5074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!stringClass) return NULL; 5084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project jobjectArray array = env->NewObjectArray(listSize, stringClass, NULL); 5094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!array) return NULL; 5104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // fill it 5124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (size_t i = 0; i < listSize; i++) { 5134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // generate new String for key 5144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project jstring key = env->NewStringUTF(list[i]); 5154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!key) return NULL; 5164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // set the array 5174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env->SetObjectArrayElement(array, i, key); 5184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env->DeleteLocalRef(key); 5194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 5204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return array; 5224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 5234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNIEXPORT jstring JNICALL Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetValue 525b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland (JNIEnv *env, jclass clazz, jlong recognizer, jint nbest, jstring key) { 5264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project char rtn[1000]; 5274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t rtnLength = sizeof(rtn) - 1; 5284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const char* ke = env->GetStringUTFChars(key, 0); 5294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode esr_status = SR_RecognizerResultGetValue(((SR_RecognizerImpl*)recognizer)->result, nbest, ke, rtn, &rtnLength); 5304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env->ReleaseStringUTFChars(key, ke); 5314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (esr_status) { 5324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project checkEsrError(env, esr_status); 5334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return NULL; 5344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 5354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rtn[rtnLength] = 0; 5364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return env->NewStringUTF(rtn); 5374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 5384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* 5414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Table of methods associated with a single class. 5424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 5434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic JNINativeMethod gMethods[] = { 5444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* name, signature, funcPtr */ 5454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // PMem 5464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project {"PMemInit", "()V", (void*)Java_android_speech_srec_Recognizer_PMemInit}, 5474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project {"PMemShutdown", "()V", (void*)Java_android_speech_srec_Recognizer_PMemShutdown}, 5484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // SR_Session 5494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project {"SR_SessionCreate", "(Ljava/lang/String;)V", (void*)Java_android_speech_srec_Recognizer_SR_1SessionCreate}, 5504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project {"SR_SessionDestroy", "()V", (void*)Java_android_speech_srec_Recognizer_SR_1SessionDestroy}, 5514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // SR_Recognizer 552b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerStart", "(J)V", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerStart}, 553b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerStop", "(J)V", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerStop}, 554b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerCreate", "()J", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerCreate}, 555b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerDestroy", "(J)V", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerDestroy}, 556b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerSetup", "(J)V", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerSetup}, 557b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerUnsetup", "(J)V", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerUnsetup}, 558b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerIsSetup", "(J)Z", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerIsSetup}, 559b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerGetParameter", "(JLjava/lang/String;)Ljava/lang/String;", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerGetParameter}, 560b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerGetSize_tParameter", "(JLjava/lang/String;)I", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerGetSize_1tParameter}, 561b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerGetBoolParameter", "(JLjava/lang/String;)Z", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerGetBoolParameter}, 562b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerSetParameter", "(JLjava/lang/String;Ljava/lang/String;)V", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerSetParameter}, 563b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerSetSize_tParameter", "(JLjava/lang/String;I)V", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerSetSize_1tParameter}, 564b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerSetBoolParameter", "(JLjava/lang/String;Z)V", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerSetBoolParameter}, 565b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerSetupRule", "(JJLjava/lang/String;)V", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerSetupRule}, 566b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerHasSetupRules", "(J)Z", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerHasSetupRules}, 567b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerActivateRule", "(JJLjava/lang/String;I)V", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerActivateRule}, 568b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerDeactivateRule", "(JJLjava/lang/String;)V", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerDeactivateRule}, 569b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerDeactivateAllRules", "(J)V", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerDeactivateAllRules}, 570b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerIsActiveRule", "(JJLjava/lang/String;)Z", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerIsActiveRule}, 571b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerCheckGrammarConsistency", "(JJ)Z", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerCheckGrammarConsistency}, 572b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerPutAudio", "(J[BIIZ)I", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerPutAudio}, 573b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerAdvance", "(J)I", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerAdvance}, 574b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerIsSignalClipping", "(J)Z", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalClipping}, 575b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerIsSignalDCOffset", "(J)Z", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalDCOffset}, 576b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerIsSignalNoisy", "(J)Z", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalNoisy}, 577b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerIsSignalTooQuiet", "(J)Z", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalTooQuiet}, 578b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerIsSignalTooFewSamples", "(J)Z", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalTooFewSamples}, 579b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerIsSignalTooManySamples", "(J)Z", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerIsSignalTooManySamples}, 5804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // SR_AcousticState 581b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_AcousticStateReset", "(J)V", (void*)Java_android_speech_srec_Recognizer_SR_1AcousticStateReset}, 582b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_AcousticStateSet", "(JLjava/lang/String;)V", (void*)Java_android_speech_srec_Recognizer_SR_1AcousticStateSet}, 583b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_AcousticStateGet", "(J)Ljava/lang/String;", (void*)Java_android_speech_srec_Recognizer_SR_1AcousticStateGet}, 5844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // SR_Grammar 585b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_GrammarCompile", "(J)V", (void*)Java_android_speech_srec_Recognizer_SR_1GrammarCompile}, 586b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_GrammarAddWordToSlot", "(JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V", (void*)Java_android_speech_srec_Recognizer_SR_1GrammarAddWordToSlot}, 587b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_GrammarResetAllSlots", "(J)V", (void*)Java_android_speech_srec_Recognizer_SR_1GrammarResetAllSlots}, 588b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_GrammarSetupVocabulary", "(JJ)V", (void*)Java_android_speech_srec_Recognizer_SR_1GrammarSetupVocabulary}, 589b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_GrammarSetupRecognizer", "(JJ)V", (void*)Java_android_speech_srec_Recognizer_SR_1GrammarSetupRecognizer}, 590b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_GrammarUnsetupRecognizer", "(J)V", (void*)Java_android_speech_srec_Recognizer_SR_1GrammarUnsetupRecognizer}, 591b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_GrammarCreate", "()J", (void*)Java_android_speech_srec_Recognizer_SR_1GrammarCreate}, 592b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_GrammarDestroy", "(J)V", (void*)Java_android_speech_srec_Recognizer_SR_1GrammarDestroy}, 593b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_GrammarLoad", "(Ljava/lang/String;)J", (void*)Java_android_speech_srec_Recognizer_SR_1GrammarLoad}, 594b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_GrammarSave", "(JLjava/lang/String;)V", (void*)Java_android_speech_srec_Recognizer_SR_1GrammarSave}, 595b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_GrammarAllowOnly", "(JLjava/lang/String;)V", (void*)Java_android_speech_srec_Recognizer_SR_1GrammarAllowOnly}, 596b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_GrammarAllowAll", "(J)V", (void*)Java_android_speech_srec_Recognizer_SR_1GrammarAllowAll}, 5974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // SR_Vocabulary 598b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_VocabularyLoad", "()J", (void*)Java_android_speech_srec_Recognizer_SR_1VocabularyLoad}, 599b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_VocabularyDestroy", "(J)V", (void*)Java_android_speech_srec_Recognizer_SR_1VocabularyDestroy}, 600b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_VocabularyGetPronunciation", "(JLjava/lang/String;)Ljava/lang/String;", (void*)Java_android_speech_srec_Recognizer_SR_1VocabularyGetPronunciation}, 6014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // SR_RecognizerResult 602b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerResultGetWaveform", "(J)[B", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetWaveform}, 603b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerResultGetSize", "(J)I", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetSize}, 604b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerResultGetKeyCount", "(JI)I", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetKeyCount}, 605b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerResultGetKeyList", "(JI)[Ljava/lang/String;", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetKeyList}, 606b3adea6f471d03c5bd728725adc7ca1cea89edfdMarcus Oakland {"SR_RecognizerResultGetValue", "(JILjava/lang/String;)Ljava/lang/String;", (void*)Java_android_speech_srec_Recognizer_SR_1RecognizerResultGetValue}, 6074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}; 6084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* 6104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Returns the JNI version on success, -1 on failure. 6114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 6124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectjint register_android_speech_srec_Recognizer(JavaVM* vm, void* reserved) 6134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 6144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project JNIEnv* env = NULL; 6154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project jclass clazz = NULL; 6164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const char* className = "android/speech/srec/Recognizer"; 6174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { 619040dcc36996cded4371cc59dfc3a9e53247a61f5Steve Block ALOGE("ERROR: GetEnv failed\n"); 6204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return -1; 6214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 6224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project assert(env != NULL); 6234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project clazz = env->FindClass(className); 6254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (clazz == NULL) { 626040dcc36996cded4371cc59dfc3a9e53247a61f5Steve Block ALOGE("Native registration unable to find class '%s'\n", className); 6274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return -1; 6284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 6294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (env->RegisterNatives(clazz, gMethods, 6304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project sizeof(gMethods) / sizeof(gMethods[0])) < 0) { 631040dcc36996cded4371cc59dfc3a9e53247a61f5Steve Block ALOGE("RegisterNatives failed for '%s'\n", className); 6324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return -1; 6334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 6344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* success -- return valid version number */ 6364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return JNI_VERSION_1_4; 6374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 6384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectextern jint register_android_speech_srec_MicrophoneInputStream(JavaVM* vm, void* reserved); 6414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectjint JNI_OnLoad(JavaVM* vm, void* reserved) 6434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 6444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (register_android_speech_srec_MicrophoneInputStream(vm, reserved) != JNI_VERSION_1_4 || 6454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project register_android_speech_srec_Recognizer(vm, reserved) != JNI_VERSION_1_4) return -1; 6464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return JNI_VERSION_1_4; 6474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 648