问题
I downloaded the source code of pocket sphinx demo. I'm trying to run it but it is throwing a runtime exception. I've posted the logcat of my code.
09-09 11:45:38.980: I/System.out(7912): Sending WAIT chunk 09-09 11:45:38.980: W/ActivityThread(7912): Application edu.cmu.pocketsphinx.demo is waiting for the debugger on port 8100...
09-09 11:45:39.030: I/dalvikvm(7912): Debugger is active
09-09 11:45:39.210: I/System.out(7912): Debugger has connected
09-09 11:45:39.210: I/System.out(7912): waiting for debugger to settle...
09-09 11:45:39.400: I/System.out(7912): waiting for debugger to settle...
09-09 11:45:39.600: I/System.out(7912): waiting for debugger to settle...
09-09 11:45:39.810: I/System.out(7912): waiting for debugger to settle...
09-09 11:45:40.000: I/System.out(7912): waiting for debugger to settle...
09-09 11:45:40.210: I/System.out(7912): waiting for debugger to settle...
09-09 11:45:40.400: I/System.out(7912): waiting for debugger to settle...
09-09 11:45:40.600: I/System.out(7912): waiting for debugger to settle...
09-09 11:45:40.810: I/System.out(7912): waiting for debugger to settle...
09-09 11:45:41.010: I/System.out(7912): debugger has settled (1359)
09-09 11:45:41.930: D/dalvikvm(7912): threadid=1: still suspended after undo (sc=1 dc=1)
09-09 11:45:48.960: I/dalvikvm(7912): threadid=4: reacting to signal 3
09-09 11:45:48.960: D/dalvikvm(7912): threadid=1: still suspended after undo (sc=1 dc=1)
09-09 11:45:48.960: I/dalvikvm(7912): Wrote stack traces to '/data/anr/traces.txt'
09-09 11:45:52.310: D/dalvikvm(7912): GC_EXTERNAL_ALLOC freed 44K, 49% free 2778K/5379K, external 0K/0K, paused 26ms
09-09 11:45:58.770: D/CLIPBOARD(7912): Hide Clipboard dialog at Starting input: finished by someone else... !
09-09 11:46:05.860: D/dalvikvm(7912): GC_CONCURRENT freed 366K, 50% free 2845K/5639K, external 7K/1286K, paused 2ms+3ms
09-09 11:46:05.870: I/Assets(7912): Skipping asset models/grammar/menu.gram: checksums are equal
09-09 11:46:05.870: I/Assets(7912): Skipping asset models/grammar/digits.gram: checksums are equal
09-09 11:46:05.880: I/Assets(7912): Skipping asset models/lm/3015.lm: checksums are equal
09-09 11:46:05.890: I/Assets(7912): Skipping asset models/hmm/en-us/noisedict: checksums are equal
09-09 11:46:05.900: I/Assets(7912): Skipping asset models/hmm/en-us/mixture_weights: checksums are equal
09-09 11:46:05.900: I/Assets(7912): Skipping asset models/hmm/en-us/means: checksums are equal
09-09 11:46:05.900: I/Assets(7912): Skipping asset models/hmm/en-us/variances: checksums are equal
09-09 11:46:05.900: I/Assets(7912): Skipping asset models/hmm/en-us/transition_matrices: checksums are equal
09-09 11:46:05.910: I/Assets(7912): Skipping asset models/dict/5497.dic: checksums are equal
09-09 11:46:05.910: I/Assets(7912): Skipping asset models/hmm/en-us/feature_transform: checksums are equal
09-09 11:46:05.910: I/Assets(7912): Skipping asset models/hmm/en-us/mdef: checksums are equal
09-09 11:46:05.910: I/Assets(7912): Skipping asset models/hmm/en-us/feat.params: checksums are equal
09-09 11:46:05.910: I/Assets(7912): Skipping asset models/hmm/en-us/README: checksums are equal
09-09 11:46:15.670: D/dalvikvm(7912): Trying to load lib /data/data/edu.cmu.pocketsphinx.demo/lib/libpocketsphinx_jni.so 0x4051cbd0
09-09 11:46:15.680: D/dalvikvm(7912): Added shared lib /data/data/edu.cmu.pocketsphinx.demo/lib/libpocketsphinx_jni.so 0x4051cbd0
09-09 11:46:15.680: D/dalvikvm(7912): No JNI_OnLoad found in /data/data/edu.cmu.pocketsphinx.demo/lib/libpocketsphinx_jni.so 0x4051cbd0, skipping init
09-09 11:46:15.680: I/cmusphinx(7912): INFO: cmd_ln.c(696): Parsing command line:
09-09 11:46:15.680: I/cmusphinx(7912): Current configuration:
09-09 11:46:31.640: I/cmusphinx(7912): INFO: cmd_ln.c(696): Parsing command line:
09-09 11:46:31.640: I/cmusphinx(7912): \
09-09 11:46:31.640: I/cmusphinx(7912):
09-09 11:46:31.640: I/cmusphinx(7912): -nfilt
09-09 11:46:31.640: I/cmusphinx(7912): 25
09-09 11:46:31.640: I/cmusphinx(7912): \
09-09 11:46:31.640: I/cmusphinx(7912):
09-09 11:46:31.640: I/cmusphinx(7912): -lowerf
09-09 11:46:31.640: I/cmusphinx(7912): 130
09-09 11:46:31.640: I/cmusphinx(7912): \
09-09 11:46:31.640: I/cmusphinx(7912):
09-09 11:46:31.640: I/cmusphinx(7912): -upperf
09-09 11:46:31.640: I/cmusphinx(7912): 6800
09-09 11:46:31.640: I/cmusphinx(7912): \
09-09 11:46:31.640: I/cmusphinx(7912):
09-09 11:46:31.640: I/cmusphinx(7912): -transform
09-09 11:46:31.640: I/cmusphinx(7912): dct
09-09 11:46:31.640: I/cmusphinx(7912): \
09-09 11:46:31.640: I/cmusphinx(7912):
09-09 11:46:31.640: I/cmusphinx(7912): -lifter
09-09 11:46:31.640: I/cmusphinx(7912): 22
09-09 11:46:31.640: I/cmusphinx(7912): \
09-09 11:46:31.640: I/cmusphinx(7912):
09-09 11:46:31.640: I/cmusphinx(7912): -feat
09-09 11:46:31.640: I/cmusphinx(7912): 1s_c_d_dd
09-09 11:46:31.640: I/cmusphinx(7912): \
09-09 11:46:31.640: I/cmusphinx(7912):
09-09 11:46:31.640: I/cmusphinx(7912): -agc
09-09 11:46:31.640: I/cmusphinx(7912): none
09-09 11:46:31.640: I/cmusphinx(7912): \
09-09 11:46:31.640: I/cmusphinx(7912):
09-09 11:46:31.640: I/cmusphinx(7912): -cmn
09-09 11:46:31.640: I/cmusphinx(7912): current
09-09 11:46:31.640: I/cmusphinx(7912): \
09-09 11:46:31.640: I/cmusphinx(7912):
09-09 11:46:31.640: I/cmusphinx(7912): -varnorm
09-09 11:46:31.640: I/cmusphinx(7912): no
09-09 11:46:31.640: I/cmusphinx(7912): \
09-09 11:46:31.640: I/cmusphinx(7912):
09-09 11:46:31.640: I/cmusphinx(7912): -cmninit
09-09 11:46:31.640: I/cmusphinx(7912): 40
09-09 11:46:31.640: I/cmusphinx(7912): Current configuration:
09-09 11:46:31.640: I/cmusphinx(7912): INFO: acmod.c(251): Parsed model-specific feature parameters from /mnt/sdcard/Android/data/edu.cmu.pocketsphinx.demo/files/sync/models/hmm/en-us/feat.params
09-09 11:46:31.640: I/cmusphinx(7912): INFO: feat.c(715): Initializing feature stream to type: '1s_c_d_dd', ceplen=13, CMN='current', VARNORM='no', AGC='none'
09-09 11:46:31.640: I/cmusphinx(7912): INFO: cmn.c(143): mean[0]= 12.00, mean[1..12]= 0.0
09-09 11:46:31.640: I/cmusphinx(7912): INFO: acmod.c(160): Reading linear feature transformation from /mnt/sdcard/Android/data/edu.cmu.pocketsphinx.demo/files/sync/models/hmm/en-us/feature_transform
09-09 11:46:31.650: I/cmusphinx(7912): INFO: mdef.c(517): Reading model definition: /mnt/sdcard/Android/data/edu.cmu.pocketsphinx.demo/files/sync/models/hmm/en-us/mdef
09-09 11:46:33.430: I/cmusphinx(7912): INFO: bin_mdef.c(181): Allocating 173954 * 8 bytes (1359 KiB) for CD tree
09-09 11:46:33.570: I/cmusphinx(7912): INFO: tmat.c(206): Reading HMM transition probability matrices: /mnt/sdcard/Android/data/edu.cmu.pocketsphinx.demo/files/sync/models/hmm/en-us/transition_matrices
09-09 11:46:33.570: I/cmusphinx(7912): INFO: acmod.c(123): Attempting to use SCHMM computation module
09-09 11:46:33.570: I/cmusphinx(7912): INFO: ms_gauden.c(198): Reading mixture gaussian parameter: /mnt/sdcard/Android/data/edu.cmu.pocketsphinx.demo/files/sync/models/hmm/en-us/means
09-09 11:46:35.110: I/cmusphinx(7912): INFO: ms_gauden.c(292): 6138 codebook, 1 feature, size:
09-09 11:46:35.110: I/cmusphinx(7912): INFO: ms_gauden.c(294): 32x32
09-09 11:46:35.110: I/cmusphinx(7912): INFO: ms_gauden.c(198): Reading mixture gaussian parameter: /mnt/sdcard/Android/data/edu.cmu.pocketsphinx.demo/files/sync/models/hmm/en-us/variances
09-09 11:46:36.890: I/cmusphinx(7912): INFO: ms_gauden.c(292): 6138 codebook, 1 feature, size:
09-09 11:46:36.900: I/cmusphinx(7912): INFO: ms_gauden.c(294): 32x32
09-09 11:46:38.920: I/cmusphinx(7912): INFO: ms_gauden.c(354): 768 variance values floored
09-09 11:46:38.950: I/cmusphinx(7912): INFO: acmod.c(125): Attempting to use PTHMM computation module
09-09 11:46:38.960: I/cmusphinx(7912): INFO: ms_gauden.c(198): Reading mixture gaussian parameter: /mnt/sdcard/Android/data/edu.cmu.pocketsphinx.demo/files/sync/models/hmm/en-us/means
09-09 11:46:40.140: I/cmusphinx(7912): INFO: ms_gauden.c(292): 6138 codebook, 1 feature, size:
09-09 11:46:40.140: I/cmusphinx(7912): INFO: ms_gauden.c(294): 32x32
09-09 11:46:40.140: I/cmusphinx(7912): INFO: ms_gauden.c(198): Reading mixture gaussian parameter: /mnt/sdcard/Android/data/edu.cmu.pocketsphinx.demo/files/sync/models/hmm/en-us/variances
09-09 11:46:40.820: I/cmusphinx(7912): INFO: ms_gauden.c(292): 6138 codebook, 1 feature, size:
09-09 11:46:40.820: I/cmusphinx(7912): INFO: ms_gauden.c(294): 32x32
09-09 11:46:42.850: I/cmusphinx(7912): INFO: ms_gauden.c(354): 768 variance values floored
09-09 11:46:42.850: I/cmusphinx(7912): INFO: ptm_mgau.c(792): Number of codebooks exceeds 256: 6138
09-09 11:46:42.860: I/cmusphinx(7912): INFO: acmod.c(127): Falling back to general multi-stream GMM computation
09-09 11:46:42.860: I/cmusphinx(7912): INFO: ms_gauden.c(198): Reading mixture gaussian parameter: /mnt/sdcard/Android/data/edu.cmu.pocketsphinx.demo/files/sync/models/hmm/en-us/means
09-09 11:46:43.280: I/cmusphinx(7912): INFO: ms_gauden.c(292): 6138 codebook, 1 feature, size:
09-09 11:46:43.280: I/cmusphinx(7912): INFO: ms_gauden.c(294): 32x32
09-09 11:46:43.280: I/cmusphinx(7912): INFO: ms_gauden.c(198): Reading mixture gaussian parameter: /mnt/sdcard/Android/data/edu.cmu.pocketsphinx.demo/files/sync/models/hmm/en-us/variances
09-09 11:46:43.480: I/cmusphinx(7912): INFO: ms_gauden.c(292): 6138 codebook, 1 feature, size:
09-09 11:46:43.480: I/cmusphinx(7912): INFO: ms_gauden.c(294): 32x32
09-09 11:46:45.540: I/cmusphinx(7912): INFO: ms_gauden.c(354): 768 variance values floored
09-09 11:46:45.550: I/cmusphinx(7912): INFO: ms_senone.c(149): Reading senone mixture weights: /mnt/sdcard/Android/data/edu.cmu.pocketsphinx.demo/files/sync/models/hmm/en-us/mixture_weights
09-09 11:46:45.550: I/cmusphinx(7912): INFO: ms_senone.c(200): Truncating senone logs3(pdf) values by 10 bits
09-09 11:46:45.550: I/cmusphinx(7912): INFO: ms_senone.c(207): Not transposing mixture weights in memory
09-09 11:46:45.610: I/cmusphinx(7912): INFO: ms_senone.c(268): Read mixture weights for 6138 senones: 1 features x 32 codewords
09-09 11:46:45.610: I/cmusphinx(7912): INFO: ms_senone.c(320): Mapping senones to individual codebooks
09-09 11:46:45.610: I/cmusphinx(7912): INFO: ms_mgau.c(141): The value of topn: 4
09-09 11:46:45.620: I/cmusphinx(7912): INFO: dict.c(320): Allocating 4181 * 20 bytes (81 KiB) for word entries
09-09 11:46:45.620: I/cmusphinx(7912): INFO: dict.c(333): Reading main dictionary: /mnt/sdcard/Android/data/edu.cmu.pocketsphinx.demo/files/sync/models/dict/5497.dic
09-09 11:46:45.620: I/cmusphinx(7912): INFO: dict.c(213): Allocated 0 KiB for strings, 0 KiB for phones
09-09 11:46:45.620: I/cmusphinx(7912): INFO: dict.c(336): 76 words read
09-09 11:46:45.620: I/cmusphinx(7912): INFO: dict.c(342): Reading filler dictionary: /mnt/sdcard/Android/data/edu.cmu.pocketsphinx.demo/files/sync/models/hmm/en-us/noisedict
09-09 11:46:45.620: I/cmusphinx(7912): INFO: dict.c(213): Allocated 0 KiB for strings, 0 KiB for phones
09-09 11:46:45.620: I/cmusphinx(7912): INFO: dict.c(345): 9 words read
09-09 11:46:45.620: I/cmusphinx(7912): INFO: dict2pid.c(396): Building PID tables for dictionary
09-09 11:46:45.620: I/cmusphinx(7912): INFO: dict2pid.c(406): Allocating 46^3 * 2 bytes (190 KiB) for word-initial triphones
09-09 11:46:45.650: I/cmusphinx(7912): INFO: dict2pid.c(132): Allocated 25576 bytes (24 KiB) for word-final triphones
09-09 11:46:45.650: I/cmusphinx(7912): INFO: dict2pid.c(196): Allocated 25576 bytes (24 KiB) for single-phone word triphones
09-09 11:46:59.750: I/cmusphinx(7912): INFO: kws_search.c(417): KWS(beam: -1080, plp: -23, default threshold -450)
09-09 11:46:59.750: E/cmusphinx(7912): ERROR: "kws_search.c", line 158: The word 'taking' is missing in the dictionary
09-09 11:47:07.390: I/SpeechRecognizer(7912): Load JSGF /mnt/sdcard/Android/data/edu.cmu.pocketsphinx.demo/files/sync/models/grammar/menu.gram
09-09 11:47:07.400: I/cmusphinx(7912): INFO: jsgf.c(664): Defined rule: PUBLIC <menu.item>
09-09 11:47:07.400: I/cmusphinx(7912): INFO: fsg_model.c(215): Computing transitive closure for null transitions
09-09 11:47:07.400: I/cmusphinx(7912): INFO: fsg_model.c(277): 0 null transitions added
09-09 11:47:07.400: I/cmusphinx(7912): INFO: fsg_search.c(227): FSG(beam: -1080, pbeam: -1080, wbeam: -634; wip: -26, pip: 0)
09-09 11:47:07.400: E/cmusphinx(7912): ERROR: "fsg_search.c", line 142: The word 'forecast' is missing in the dictionary
09-09 11:47:26.240: I/SpeechRecognizer(7912): Load JSGF /mnt/sdcard/Android/data/edu.cmu.pocketsphinx.demo/files/sync/models/grammar/digits.gram
09-09 11:47:26.240: I/cmusphinx(7912): INFO: jsgf.c(664): Defined rule: <digits.digit>
09-09 11:47:26.250: I/cmusphinx(7912): INFO: jsgf.c(664): Defined rule: <digits.g00001>
09-09 11:47:26.250: I/cmusphinx(7912): INFO: jsgf.c(664): Defined rule: PUBLIC <digits.digits>
09-09 11:47:26.250: I/cmusphinx(7912): INFO: jsgf.c(381): Right recursion <digits.g00001> 2 => 0
09-09 11:47:26.250: I/cmusphinx(7912): INFO: fsg_model.c(215): Computing transitive closure for null transitions
09-09 11:47:26.250: I/cmusphinx(7912): INFO: fsg_model.c(277): 0 null transitions added
09-09 11:47:26.250: I/cmusphinx(7912): INFO: fsg_search.c(227): FSG(beam: -1080, pbeam: -1080, wbeam: -634; wip: -26, pip: 0)
09-09 11:47:26.250: E/cmusphinx(7912): ERROR: "fsg_search.c", line 142: The word 'nine' is missing in the dictionary
09-09 11:47:36.880: I/SpeechRecognizer(7912): Load N-gram model /mnt/sdcard/Android/data/edu.cmu.pocketsphinx.demo/files/sync/models/lm/3015.lm
09-09 11:47:36.890: I/cmusphinx(7912): INFO: ngram_model_arpa.c(477): ngrams 1=58, 2=117, 3=140
09-09 11:47:36.890: I/cmusphinx(7912): INFO: ngram_model_arpa.c(135): Reading unigrams
09-09 11:47:36.890: I/cmusphinx(7912): INFO: ngram_model_arpa.c(516): 58 = #unigrams created
09-09 11:47:36.890: I/cmusphinx(7912): INFO: ngram_model_arpa.c(195): Reading bigrams
09-09 11:47:36.890: I/cmusphinx(7912): INFO: ngram_model_arpa.c(533): 117 = #bigrams created
09-09 11:47:36.890: I/cmusphinx(7912): INFO: ngram_model_arpa.c(534): 26 = #prob2 entries
09-09 11:47:36.890: I/cmusphinx(7912): INFO: ngram_model_arpa.c(542): 19 = #bo_wt2 entries
09-09 11:47:36.890: I/cmusphinx(7912): INFO: ngram_model_arpa.c(292): Reading trigrams
09-09 11:47:36.900: I/cmusphinx(7912): INFO: ngram_model_arpa.c(555): 140 = #trigrams created
09-09 11:47:36.900: I/cmusphinx(7912): INFO: ngram_model_arpa.c(556): 14 = #prob3 entries
09-09 11:47:36.900: I/cmusphinx(7912): INFO: ngram_search_fwdtree.c(99): 55 unique initial diphones
09-09 11:47:36.900: I/cmusphinx(7912): INFO: ngram_search_fwdtree.c(148): 0 root, 0 non-root channels, 11 single-phone words
09-09 11:47:36.900: I/cmusphinx(7912): INFO: ngram_search_fwdtree.c(186): Creating search tree
09-09 11:47:36.900: I/cmusphinx(7912): INFO: ngram_search_fwdtree.c(192): before: 0 root, 0 non-root channels, 11 single-phone words
09-09 11:47:36.900: I/cmusphinx(7912): INFO: ngram_search_fwdtree.c(326): after: max nonroot chan increased to 280
09-09 11:47:36.900: I/cmusphinx(7912): INFO: ngram_search_fwdtree.c(339): after: 55 root, 152 non-root channels, 10 single-phone words
09-09 11:47:36.900: I/cmusphinx(7912): INFO: ngram_search_fwdflat.c(157): fwdflat: min_ef_width = 4, max_sf_win = 25
09-09 11:47:48.380: I/SpeechRecognizer(7912): Start recognition "leave"
09-09 11:49:41.350: W/dalvikvm(7912): threadid=1: thread exiting with uncaught exception (group=0x4001e578)
09-09 11:49:41.450: E/AndroidRuntime(7912): FATAL EXCEPTION: main
09-09 11:49:41.450: E/AndroidRuntime(7912): java.lang.RuntimeException: Decoder_setSearch returned -1
09-09 11:49:41.450: E/AndroidRuntime(7912): at edu.cmu.pocketsphinx.PocketSphinxJNI.Decoder_setSearch(Native Method)
09-09 11:49:41.450: E/AndroidRuntime(7912): at edu.cmu.pocketsphinx.Decoder.setSearch(Unknown Source)
09-09 11:49:41.450: E/AndroidRuntime(7912): at edu.cmu.pocketsphinx.SpeechRecognizer.startListening(Unknown Source)
09-09 11:49:41.450: E/AndroidRuntime(7912): at edu.cmu.pocketsphinx.demo.PocketSphinxActivity.switchSearch(PocketSphinxActivity.java:143)
09-09 11:49:41.450: E/AndroidRuntime(7912): at edu.cmu.pocketsphinx.demo.PocketSphinxActivity.access$1(PocketSphinxActivity.java:141)
09-09 11:49:41.450: E/AndroidRuntime(7912): at edu.cmu.pocketsphinx.demo.PocketSphinxActivity$1.onPostExecute(PocketSphinxActivity.java:102)
09-09 11:49:41.450: E/AndroidRuntime(7912): at edu.cmu.pocketsphinx.demo.PocketSphinxActivity$1.onPostExecute(PocketSphinxActivity.java:1)
09-09 11:49:41.450: E/AndroidRuntime(7912): at android.os.AsyncTask.finish(AsyncTask.java:417)
09-09 11:49:41.450: E/AndroidRuntime(7912): at android.os.AsyncTask.access$300(AsyncTask.java:127)
09-09 11:49:41.450: E/AndroidRuntime(7912): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
09-09 11:49:41.450: E/AndroidRuntime(7912): at android.os.Handler.dispatchMessage(Handler.java:99)
09-09 11:49:41.450: E/AndroidRuntime(7912): at android.os.Looper.loop(Looper.java:130)
09-09 11:49:41.450: E/AndroidRuntime(7912): at android.app.ActivityThread.main(ActivityThread.java:3770)
09-09 11:49:41.450: E/AndroidRuntime(7912): at java.lang.reflect.Method.invokeNative(Native Method)
09-09 11:49:41.450: E/AndroidRuntime(7912): at java.lang.reflect.Method.invoke(Method.java:507)
09-09 11:49:41.450: E/AndroidRuntime(7912): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
09-09 11:49:41.450: E/AndroidRuntime(7912): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
09-09 11:49:41.450: E/AndroidRuntime(7912): at dalvik.system.NativeStart.main(Native Method)
09-09 11:49:43.580: I/dalvikvm(7912): threadid=4: reacting to signal 3
09-09 11:49:43.610: I/dalvikvm(7912): Wrote stack traces to '/data/anr/traces.txt'
回答1:
You could see the following errors in the log:
09-09 11:47:26.250: E/cmusphinx(7912): ERROR: "fsg_search.c", line 142: The word 'nine' is missing in the dictionary
09-09 11:46:59.750: E/cmusphinx(7912): ERROR: "kws_search.c", line 158: The word 'taking' is missing in the dictionary
Looks like your dictionary is incompatible with your changes. You need to make sure dictionary contains all required words.
And, I see you made some changes but most of them are incomplete. For example you commented the code to setup named searches in setupRecognizer but didn't change switch code, so it still tries to switch to older searches. You can try something like this, it should work:
package edu.cmu.pocketsphinx.demo;
import static android.widget.Toast.makeText;
import static edu.cmu.pocketsphinx.SpeechRecognizerSetup.defaultSetup;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import edu.cmu.pocketsphinx.Assets;
import edu.cmu.pocketsphinx.Hypothesis;
import edu.cmu.pocketsphinx.RecognitionListener;
import edu.cmu.pocketsphinx.SpeechRecognizer;
public class PocketSphinxActivity extends Activity implements
RecognitionListener {
private static final String KWS_SEARCH = "KEYPHRASE";
private static final String DICTATION_SEARCH = "DICTATION";
private static final String KEYPHRASE = "MORNING";
private SpeechRecognizer recognizer;
private HashMap<String, Integer> captions;
@Override
public void onCreate(Bundle state) {
super.onCreate(state);
// Prepare the data for UI
captions = new HashMap<String, Integer>();
captions.put(KWS_SEARCH, R.string.kws_caption);
captions.put(DICTATION_SEARCH, R.string.forecast_caption);
setContentView(R.layout.main);
((TextView) findViewById(R.id.caption_text))
.setText("Preparing the recognizer");
// Recognizer initialization is a time-consuming and it involves IO,
// so we execute it in async task
new AsyncTask<Void, Void, Exception>() {
@Override
protected Exception doInBackground(Void... params) {
try {
Assets assets = new Assets(PocketSphinxActivity.this);
File assetDir = assets.syncAssets();
setupRecognizer(assetDir);
recognizer.startListening(KWS_SEARCH);
} catch (IOException e) {
return e;
}
return null;
}
@Override
protected void onPostExecute(Exception result) {
if (result != null) {
((TextView) findViewById(R.id.caption_text))
.setText("Failed to init recognizer " + result);
} else {
switchSearch(KWS_SEARCH);
}
}
}.execute();
}
@Override
public void onPartialResult(Hypothesis hypothesis) {
String text = hypothesis.getHypstr();
Log.d("Spoken text",text);
if (text.equals(KEYPHRASE))
switchSearch(DICTATION_SEARCH);
else
((TextView) findViewById(R.id.result_text)).setText(text);
}
@Override
public void onResult(Hypothesis hypothesis) {
((TextView) findViewById(R.id.result_text)).setText("");
if (hypothesis != null) {
String text = hypothesis.getHypstr();
makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onBeginningOfSpeech() {
}
@Override
public void onEndOfSpeech() {
Log.d("end","In end of speech");
if (DICTATION_SEARCH.equals(recognizer.getSearchName()))
switchSearch(KWS_SEARCH);
}
private void switchSearch(String searchName) {
recognizer.stop();
recognizer.startListening(searchName);
String caption = getResources().getString(captions.get(searchName));
((TextView) findViewById(R.id.caption_text)).setText(caption);
}
private void setupRecognizer(File assetsDir) {
File modelsDir = new File(assetsDir, "models");
recognizer = defaultSetup()
.setAcousticModel(new File(modelsDir, "hmm/en-us"))
.setDictionary(new File(modelsDir, "dict/5497.dic"))
.setRawLogDir(assetsDir).setKeywordThreshold(1e-20f)
.setFloat("-beam", 1e-30f)
.getRecognizer();
recognizer.addListener(this);
// Create keyword-activation search.
recognizer.addKeyphraseSearch(KWS_SEARCH, KEYPHRASE);
// Create language model search.
File languageModel = new File(modelsDir, "lm/3015.lm");
recognizer.addNgramSearch(DICTATION_SEARCH, languageModel);
}
}
来源:https://stackoverflow.com/questions/25738001/pocketsphinx-android-demo-runtime-exception