В кармане руководство, функция ps_process_raw была вызвана с буфером 512 int16s:
int16 buf[512];
while (!feof(fh)) {
size_t nsamp;
nsamp = fread(buf, 2, 512, fh);
ps_process_raw(ps, buf, nsamp, FALSE, FALSE);
}
Однако в их собственный исходный код вызванные интерфейсом командной строки, они использовали 256:
total = 0;
while (!feof(rawfh)) {
int16 data[256];
size_t nread;
nread = fread(data, sizeof(*data), sizeof(data)/sizeof(*data), rawfh);
ps_process_raw(ps, data, nread, FALSE, FALSE);
total += nread;
}
В другом месте я тоже видел 2048. Если я правильно понимаю, данный входной звук предпочтителен в 16 кГц, 512 сэмплов соответствуют примерно 30 мс звука, что соответствует тому, что, по-видимому, предлагает большинство руководств по распознаванию речи.
Мне интересно, знает ли кто-нибудь, как размер буфера выборки влияет на производительность (точность и скорость) и почему он не согласуется с разными «официальными» источниками.
Я использую последнюю версию sphinx, используя C ++ API.
Задача ещё не решена.
Других решений пока нет …