Сфинкс 4 Индекс времени транскрипции

Как получить индекс времени (или номер кадра) в Sphinx 4, когда я настраиваю его для записи аудиофайла?

Код, который я использую, выглядит следующим образом:

audioURL = ...
AudioFileDataSource dataSource = (AudioFileDataSource) cm.lookup("audioFileDataSource");
dataSource.setAudioFile(audioURL, null);

Result result;
while ((result = Recognizer.recognize()) != null) {
  Token token = result.getBestToken();
  //DoubleData data = (DoubleData) token.getData();
  //long frameNum = data.getFirstSampleNumber(); // data seem always null
  String resultText = token.getWordPath(false, false);
  ...
}

Я пытался получить время транскрипции из объектов результата / токена, например, аналогично тому, что делают субтитры. Я нашел Result.getFrameNumber() и Token.getFrameNumber(), но они, похоже, возвращают количество декодированных кадров, а не время (или кадр), в котором был найден результат в контексте всего аудиофайла.

Я посмотрел на AudioFileDataSource.getDuration()[=private] и классы Recognizer, но не понял, как получить необходимый транскрибированный временной индекс.

Идеи?:)

1 ответ

Номер кадра - это время, умноженное на частоту кадров, которая составляет 100 кадров в секунду.

В любом случае, пожалуйста, найдите патч для демонстрации субтитров, который возвращает время здесь:

http://sourceforge.net/mailarchive/forum.php?thread_name=1380033926.26218.12.camel%40localhost.localdomain&forum_name=cmusphinx-devel

Патч применяется к транку Subversion, а не к версии 1.0-бета.

Обратите внимание, что эта часть подвергается серьезному рефакторингу, поэтому API скоро устареет. Тем не менее, я надеюсь, что вы сможете создавать субтитры всего за несколько звонков без всяких текущих сложностей.

Другие вопросы по тегам