Сфинкс 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 кадров в секунду.
В любом случае, пожалуйста, найдите патч для демонстрации субтитров, который возвращает время здесь:
Патч применяется к транку Subversion, а не к версии 1.0-бета.
Обратите внимание, что эта часть подвергается серьезному рефакторингу, поэтому API скоро устареет. Тем не менее, я надеюсь, что вы сможете создавать субтитры всего за несколько звонков без всяких текущих сложностей.