Я могу анализировать аудиоданные с помощью AudioContext API в JavaScript и рисовать сигнал на холсте.
Вопрос в том, что после загрузки аудиоданных у меня есть около 1024 точек данных Uint8Array, представляющих длину волны (на кадр), как мне угадать, какие звуки это издает (из выбора фонетики, упомянутой здесь, а именно:
Ⓐ
Лиза А
Закрытый рот для звуков «П», «Б» и «М». Это почти идентично форме Ⓧ, но между губами очень легкое давление.
Ⓑ
Лиза Б
Слегка приоткрытый рот со стиснутыми зубами. Эта форма рта используется для большинства согласных («К», «С», «Т» и т. д.). Он также используется для обозначения некоторых гласных, таких как звук «ЕЕ» в слове «пчела».
Ⓒ
Лиза С
Открытый рот. Эта форма рта используется для гласных, таких как «EH», как у мужчин, и «AE», как у летучей мыши. Он также используется для некоторых согласных, в зависимости от контекста.
Эта фигура также используется как промежуточная при анимации от Ⓐ или Ⓑ к Ⓓ. Поэтому убедитесь, что анимации ⒶⒸⒹ и ⒷⒸⒹ выглядят плавно!
Ⓓ
Лиза Д
Широко открытый рот. Эта форма рта используется для гласных, таких как «АА», как в слове «отец».
Ⓔ
Лиза Э
Слегка округлый рот. Эта форма рта используется для гласных, таких как «AO» в слове «off» и «ER» в слове «птица».
Эта фигура также используется как промежуточная при анимации от Ⓒ или Ⓓ до Ⓕ. Убедитесь, что рот открыт не шире, чем для Ⓒ. И ⒸⒺⒻ, и ⒹⒺⒻ должны привести к плавной анимации.
Ⓕ
Лиза Ф
Сморщенные губы. Эта форма рта используется для «UW», как для вас, «OW», как для шоу, и «W», как для пути.
Ⓖ
Лиза Г
Верхние зубы касаются нижней губы в слове «F» в слове for и «V» в слове very.
Эта удлиненная форма рта не является обязательной. Если ваш художественный стиль достаточно детализирован, это значительно улучшит общий вид анимации. Если вы решите не использовать его, вы можете указать это с помощью параметра extendedShapes.
Ⓗ
Лиза Х
Эта форма используется для долгих звуков «Л» с поднятым за верхние зубы языком. Рот должен быть как минимум широко открыт, как в Ⓒ, но не настолько, как в Ⓓ.
Эта удлиненная форма рта не является обязательной. В зависимости от вашего художественного стиля и угла наклона головы язык может быть вообще не виден. В этом случае нет смысла рисовать эту лишнюю форму. Если вы решите не использовать его, вы можете указать это с помощью параметра extendedShapes.
Ⓧ
Лиза Х
Холостой положение. Эта форма рта используется для пауз в речи. Это должен быть тот же рисунок рта, который вы используете, когда ваш персонаж ходит, не разговаривая. Это почти идентично Ⓐ, но с немного меньшим давлением между губами: для Ⓧ губы должны быть сомкнуты, но расслаблены.
Эта удлиненная форма рта не является обязательной. Должна ли быть видимая разница между позицией покоя Ⓧ и закрытым говорящим ртом Ⓐ зависит от вашего художественного стиля и личного вкуса. Если вы решите не использовать его, вы можете указать это с помощью параметра extendedShapes.
)?
Я знаю, что существует множество вариантов машинного обучения, таких как Meyda и Tensorflow и другие методы машинного обучения, но мне нужен алгоритм для определения вышеуказанной фонетики в настоящее время. Это не обязательно должно быть на 100% точным, просто немного лучше, чем случайный выбор определенных значений для ртов... На этом этапе подойдет что-то лучше, чем случайное.
Я знаю, что распознавание звука можно выполнить с помощью PocketSphinx.js, и это используется в поверхности ревеня для расчетов, но все, что я ищу, это очень простой алгоритм, с учетом массива данных 1024 длины волны на кадр, того, как получить фонетику, опять же, он не должен быть точным на 100%, но он должно быть в реальном времени и лучше, чем случайное.
По сути, проблема с pocketsphinx заключается в том, что его целью является преобразование речи в слово, поэтому в нем много дополнительного кода, предназначенного для перевода звуков в слова, которые он скомпилировал в словарях, но мне это не нужно. что мне нужно только извлечь сами звуки, не преобразовывая их в какой-либо словарь, поэтому теоретически не должно быть так много подслушано.
Мне просто нужен простой алгоритм, который может брать уже полученные данные из AudioContext, чтобы просто предположить относительно, какой звук из вышеупомянутого списка воспроизводится Опять же, чтобы быть очень ясно:
Я не ищу решение PocketSphinx или любую другую "готовую к работе" библиотеку, все, что мне нужно, это математическая формула для каждого из уникальных звуков, упомянутых выше, которую можно адаптировать на любой язык программирования