【发布时间】:2017-09-26 13:11:08
【问题描述】:
我一直在尝试在 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 中的故障地址 0xc (nx.pocketsphinx)
09-26 15:26:27.881 293-293/? A/DEBUG: * *
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/DEBUG: 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/DEBUG: 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 尤其是 ffd1bc20 标志 00210292
09-26 15:26:27.920 293-293/? A/DEBUG:回溯:
09-26 15:26:27.921 293-293/? A/调试:#00 pc 005603bf /system/lib/libart.so (_ZN3art6Thread28PopDeoptimizationReturnValueEv+31)
09-26 15:26:27.921 293-293/? A/调试:#01 pc 0014536b /system/lib/libart.so (_ZN3art9ArtMethod6InvokeEPNS_6ThreadEPjjPNS_6JValueEPKc+667)
09-26 15:26:27.921 293-293/? A/调试:#02 pc 0052feb8 /system/lib/libart.so (_ZN3art12InvokeMethodERKNS_33ScopedObjectAccessAlreadyRunnableEP8_jobjectS4_S4_j+1752)
09-26 15:26:27.921 293-293/? A/调试:#03 pc 004a7e41 /system/lib/libart.so (_ZN3artL13Method_invokeEP7_JNIEnvP8_jobjectS3_S3_+81)
09-26 15:26:27.921 293-293/? A/调试:#04 pc 72a83ca4 /data/dalvik-cache/x86/system@framework@boot.oat (offset 0x1f10000)
09-26 15:26:28.052 293-293/? A/DEBUG:墓碑写入: /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
当我进入 SpeechRecognizer.class 类中的 public boolean startListening(String searchName){} 方法时,我开始收到此错误:
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上成功,在眼镜上没有成功)
非常感谢任何帮助!
更新:
好吧,如果在audioRecord.startRecording(); 之后调用audioRecord.read(buffer, 0, buffer.length);,当我点击时,一切都会冻结
native_read_in_short_array(audioData, offsetInShorts, sizeInShorts,
readMode == READ_BLOCKING);
在 AudioRecord 类中。那里我没有线索..
【问题讨论】:
-
@NikolayShmyrev 这对我不起作用。我预装了 microG 服务而不是 google 服务,内置语音识别被禁用并且在运行的服务中不存在,没有设置默认助手应用程序,根本没有任何...
-
有些东西仍在监听并保留对音频设备的访问权限。
-
@NikolayShmyrev,如果是这样,我就不会访问 micro 并使用另一个应用程序录制音频。为什么 android.media.MediaRecorder fnd android.media.AudioRecord 工作,而 pocketsphinx 没有?可能是我的微记录参数有问题吗?比如,立体声/单声道或采样率?那么如何针对pocketsphinx lib进行调整呢?
-
Pocketsphinx 需要 16khz 单声道。您可以轻松检查 AudioRecord 是否可以使用这些参数。
标签: android speech-recognition pocketsphinx pocketsphinx-android vuzix