Я пытаюсь использовать Pocketsphinx как часть программы на C ++ и у меня возникла проблема при запуске моего кода. У меня было две проблемы: во-первых, из-за того, что pocketsphinx не распознал мой микрофон, а во-вторых, из-за ошибки сегмента при вызове ps_start_utt. Я запускаю это на Ubuntu 14.04. Вот оригинальный код:
ps_decoder_t *ps;
cmd_ln_t *config;
ad_rec_t *ad;
config = cmd_ln_init(NULL, ps_args(), TRUE,
"-hmm", "/usr/local/share/pocketsphinx/model/en-us/en-us",
"-lm", "../audio/1638.lm",
"-dict", "../audio/1638.dic",
"-logfn", "/dev/null",
NULL);
ps = ps_init(config);
ad = ad_open_dev("sysdefault", (int) cmd_ln_float32_r(config, "-samprate"));
// below is the other thing I tried to use to open the audio device.
// ad = ad_open();
cout << "AAAA" << endl;
ad_start_rec(ad);
cout << "BBBB" << endl;
ps_start_utt(ps);
cout << "CCCC" << endl;
utt_started = FALSE;
При выполнении это выдает две ошибки в командной строке. Первой была ошибка из-за невозможности найти sysdefault
аудиоустройство, а второй был сбой сегмента, который произошел после AAAA
а также BBBB
были выведены (CCCC
никогда не был напечатан).
Это означает, что что-то в ps_start_utt
вызывает ошибку сегмента, но я понятия не имею, что. Первоначально я думал, что эти две ошибки связаны, поэтому я попытался исправить первую. Заменив строку sysdefault
с NULL
в ad_open_dev
первая ошибка больше не появляется, но ошибка сегмента все еще происходит.
С помощью ad_open()
вместо ad_open_dev
это то же самое, что заменить NULL
; первая ошибка больше не присутствует, но ошибка сегмента все еще происходит в том же месте. Тем не менее, самое странное для меня в этом вопросе является то, что pocketsphinx_continuous -inmic yes
Команда отлично работает на той же машине с тем же микрофоном. Я посмотрел на continuous.c
код на cmusphinx
хранилище, но не смог выяснить, в чем разница или как я мог бы ее исправить. Я могу опубликовать больше кода, если это необходимо. Любая помощь будет принята с благодарностью!
ОБНОВЛЕНИЕ: После некоторых проверок я обнаружил, что ошибка, вызывающая ошибку seg, заключается в том, что ps == NULL. Я все еще не уверен, почему это произойдет, как бы то ни было.
Задача ещё не решена.
Других решений пока нет …