我一直在尝试在 android 驱动的智能眼镜 Vuzix M300 上实现语音识别(已经有一个内置的解决方案,但它不支持我需要的语言)。我正在尝试仅运行一个 pocketsphinx-android 演示应用程序(在该配置中,它在我的智能手机上运行良好。顺便说一句,我已经禁用了磨损模块)。问题是永远不会调用 onPartialResult() 方法,也不会处理音频流。我立即得到的错误是:
E/sound_trigger_hw: int sound_trigger_open_for_streaming(): DSP 当前没有流式传输 E/AudioStreamIn: intel_audio::StreamIn::StreamIn(intel_audio::Device*, audio_io_handle_t, uint32_t, audio_source_t, audio_devices_t): 无法打开 DSP 进行流式传输
设置 rcognizer 的异步任务完成后,应用程序崩溃并出现错误:
09-26 15:26:27.779 9059-9059/edu.cmu.sphinx.pocketsphinx A/libc:致命信号 11 (SIGSEGV),代码 1,tid 9059 (nx.pocketsphinx) 中的故障地址 0xc
09-26 15:26:27.881 293-293/? 一个/调试:* *
09-26 15:26:27.882 293-293/? A/DEBUG:构建指纹:'intel/m300/vm300:6.0.1/MMB29M/201709151537:user/1.2.2'
09-26 15:26:27.882 293-293/? A/DEBUG:修订:'0'
09-26 15:26:27.882 293-293/? A/调试:ABI:'x86'
09-26 15:26:27.882 293-293/? A/DEBUG:pid:9059,tid:9059,名称:nx.pocketsphinx >>> edu.cmu.sphinx.pocketsphinx <<<
09-26 15:26:27.882 293-293/? A/DEBUG:信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR),故障地址 0xc
09-26 15:26:27.914 293-293/? A/DEBUG: eax f7ba6650 ebx f3d15964 ecx 00000000 edx ffd1bc78
09-26 15:26:27.914 293-293/? A/调试:esi ffd1bc78 edi f7ba66dc
09-26 15:26:27.914 293-293/? A/调试:xcs 00000023 xds 0000002b xes 0000002b xfs 00000007 xss 0000002b
09-26 15:26:27.915 293-293/? A/DEBUG:eip f3aed3bf ebp ffd1bcb8 esp ffd1bc20 标志 00210292
09-26 15:26:27.920 293-293/? A/DEBUG:回溯:
09-26 15:26:27.921 293-293/? A/DEBUG: #00 pc 005603bf /system/lib/libart.so (_ZN3art6Thread28PopDeoptimizationReturnValueEv+31)
09-26 15:26:27.921 293-293/? A/DEBUG: #01 pc 0014536b /system/lib/libart.so (_ZN3art9ArtMethod6InvokeEPNS_6ThreadEPjjPNS_6JValueEPKc+667)
09-26 15:26:27.921 293-293/? A/DEBUG: #02 pc 0052feb8 /system/lib/libart.so (_ZN3art12InvokeMethodERKNS_33ScopedObjectAccessAlreadyRunnableEP8_jobjectS4_S4_j+1752)
09-26 15:26:27.921 293-293/? A/DEBUG: #03 pc 004a7e41 /system/lib/libart.so (_ZN3artL13Method_invokeEP7_JNIEnvP8_jobjectS3_S3_+81)
09-26 15:26:27.921 293-293/? A/DEBUG: #04 pc 72a83ca4 /data/dalvik-cache/x86/system@framework@boot.oat (offset 0x1f10000)
09-26 15:26:28.052 293-293/? A/DEBUG:Tombstone 写入:/data/tombstones/tombstone_03
09-26 15:26:28.052 293-293/? E/DEBUG:AM 写入失败:管道损坏
09-26 15:26:28.379 205-205/? E/lowmemorykiller:打开 /proc/9059/oom_score_adj 时出错;错误号=2
当我进入public boolean startListening(String searchName){}
SpeechRecognizer.class 类中的方法时,我开始收到这个错误:
E/AudioStreamIn: setDevice: 无效输入设备 4
E/AudioIntelHal: 读取: 找不到输入源 6 的声音触发句柄E/AudioFlinger:读取失败:frameRead=-22
当我点击这段代码时:this.recognizerThread.start();
关键是标准的 android AudioRecord 在眼镜上运行良好,不会出现 micro 问题,但 pocketsphinx 并不简单地查看或处理音频流。授予所有权限,解码器已设置并准备就绪,但没有成功。
最低 SDK 版本:API 23:Android 6.0 (Marshmallow)
编译 SDK 版本:Vuzix M300 SDK (API 23)
构建工具版本:26.0.1
(还尝试过 min API 19,Compile SDK API 25,Build tool 25.0.0 在 smatphone 上成功,在眼镜上没有成功)
非常感谢任何帮助!
UPD:
好吧,如果在我点击时一切都冻结audioRecord.read(buffer, 0, buffer.length);
后调用audioRecord.startRecording();
native_read_in_short_array(audioData, offsetInShorts, sizeInShorts,
readMode == READ_BLOCKING);
在 AudioRecord 类中。那里我没有线索..