Обработка аудио никогда не запускается в Pocketsphinx-Android
Я пытался реализовать распознавание речи на управляемых 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): не удалось открыть для потока D
После завершения асинхронной задачи, которая устанавливает rcognizer, приложение завершает работу с ошибкой:
09-26 15:26:27.779 9059-9059 / edu.cmu.sphinx.pocketsphinx A / libc: фатальный сигнал 11 (SIGSEGV), код 1, адрес ошибки 0xc в tid 9059 (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: пользователь / 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 /? Отладка: xcs 00000023 xds 0000002b x 0000002b xfs 00000007 xss 0000002b
09-26 15:26:27,915 293-293/? A/DEBUG: eip f3aed3bf ebp ffd1bcb8 esp ffd1bc20 flags 00210292
09-26 15:26:27,920 293-293/? A/DEBUG: backtrace:
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 (смещение 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; ERRNO = 2
И когда я вхожу в public boolean startListening(String searchName){}
Метод в классе SpeechRecognizer.class Я начинаю получать эту ошибку, если:
E / AudioStreamIn: setDevice: неверное устройство ввода 4
E / AudioIntelHal: чтение: не найден дескриптор звукового триггера для входного источника 6E / AudioFlinger: чтение не удалось: framesRead = -22
как я ударил этот код: this.recognizerThread.start();
Дело в том, что стандартный Android AudioRecord отлично работает на очках, никаких проблем с микро-событиями, но Pocketsphinx не просто видит или обрабатывает аудиопоток. Все разрешения предоставлены, декодер установлен и готов, но безуспешно.
Минимальная версия SDK: API 23: Android 6.0 (Зефир)
Версия скомпилированного SDK: Vuzix M300 SDK (API 23)
Версия Build Tools: 26.0.1
(Также пробовал min API 19, Compile SDK API 25, инструмент сборки 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. Там у меня нет никаких подсказок..
1 ответ
Как сказал Николай, проблема возникла из-за источника звука. Встроенная система распознавания голоса нашего устройства как-то блокирует источник VOICE_RECOGNITION, даже будучи выключенным. После замены VOICE_RECOGNITION на источник MIC в инициализации AudioRecord в источниках Android Pocketsphinxe все заработало.