Какая структура данных для связи текста со звуком в Java - PullRequest
2 голосов
/ 05 октября 2008

Я хочу написать программу, в которой воспроизводится аудиофайл, который читает текст. Я хочу выделить текущий слог, который аудиофайл играет зеленым, а остальное текущее слово красным. Какую структуру данных я должен использовать для хранения аудиофайла и информации, которая сообщает программе, когда следует переключиться на следующее слово / слог?

Ответы [ 4 ]

3 голосов
/ 21 октября 2008

Это предложение немного левого поля, но вы смотрели на программное обеспечение караоке? Это может показаться недостаточно серьезным, но звучит очень похоже на то, что вы делаете. Например, Aegisub - это программа субтитров, которая позволяет создавать субтитры в формате SSA / ASS. В нем есть инструменты караоке для подсвечивания выбранного слова или части.

Чаще всего он используется для субтитров аниме, но он также работает для аудио, если у вас есть подходящий плеер. К сожалению, они довольно редки на Mac.

Формат выглядит аналогично формату, предложенному Ювалом А:

{\K132}Unmei {\K34}no {\K54}tobira
{\K60}{\K132}yukkuri {\K36}to {\K142}hirakareta

Длины - это длительности, а не абсолютные смещения. Это облегчает смещение начала строки без пересчета всех смещений. Двойная запись указывает на паузу.

Есть ли веская причина, по которой это должно быть частью вашей Java-программы, или возможно готовое решение?

1 голос
/ 12 октября 2008

Как насчет простой структуры данных, которая описывает, какой следующий набор букв состоит из следующего слога и метки времени для переключения на этот слог?

Просто быстрый пример:

[0:00] Этот [0:02] является [0:05] [0:07] экс- [0:08] утра- [0:10] пл

1 голос
/ 21 октября 2008

Для выделения части слова звучит так, как будто вы попадаете в фонетику , то есть звуки, из которых состоят слова. Будет действительно трудно превратить звуковой файл во что-то, что будет «читать» текст. Лучше всего использовать сам текст для управления движком на основе фонетики, например FreeTTS, основанным на Java Speech API .

Для этого вам понадобится взять текст, который нужно прочитать, разбить его на каждый фонетический слог и воспроизвести. так что «слог» - это «syl», «la», «ble». Играть будет; выделите syl, произнесите это и перейдите к следующему.

Это действительно "старая школа", она была сделана на оригинальном Apple II таким же образом.

0 голосов
/ 05 октября 2008

Возможно, вы захотите познакомиться с FreeTTS - этим инструментом с открытым исходным кодом: http://freetts.sourceforge.net/docs/index.php -

Возможно, вы захотите передать только несколько слов в движок TTS в определенный момент времени - выделите их, и как только они будут ВЫКЛЮЧЕНЫ, отмените выделение и перейдите к следующей партии слов.

BR
~ A

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...