Фонетика анализа аудио JavaScript

Я могу анализировать аудиоданные с помощью 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 или любую другую "готовую к работе" библиотеку, все, что мне нужно, это математическая формула для каждого из уникальных звуков, упомянутых выше, которую можно адаптировать на любой язык программирования


person bluejayke    schedule 31.05.2020    source источник


Ответы (1)


Я не уверен, почему это помечено tensorflow, если вам не нужен ответ TensorFlow. Если все, что вам нужно, это что-то лучше, чем случайное, вам почти наверняка лучше использовать пакет, такой как PocketSphinx, и разбивать возвращаемые слова на их фонетику. То, о чем вы просите, довольно сложно: см. обсуждения, почему здесь и здесь.

Однако, если вы абсолютно привязаны к поиску алгоритма для этого...

При поиске большинство элементов, которые я обнаружил, использовали машинное обучение, за исключением нескольких: эта статья от 2008 г., этот от 1993 года, который был расширен до полного докторская диссертация и эта исследование Массачусетского технологического института за 1997 год. Вот пример алгоритма, который авторы использовали в последнем, только для звука /R/:

алгоритм

В документе говорится, что они реализовали свой алгоритм на C++, но, к сожалению, код не включен.

В итоге я бы рекомендовал придерживаться PocketSphinx, если это не является частью вашего собственного исследования доктора философии!

ОБНОВИТЬ:

Добавление более подробной информации здесь по запросу. Pocketsphinx объясняет, если вы прокрутите до раздела 8 в их readme, что они используют платформу машинного обучения под названием Sphinxtrain, которая также доступен на французском и китайском языках. Но в верхней части страницы Sphinxtrain есть ссылка на их новую библиотеку под названием Vosk.

Vosk поддерживает 9 языков и достаточно мал, чтобы поместиться на Raspberry Pi, поэтому он может быть ближе к тому, что вы ищете. Он, в свою очередь, использует инструментарий распознавания речи C++ с открытым исходным кодом, который называется Kaldi. также использует машинное обучение.

Arduinos значительно более ограничены, чем Raspberry Pi, как я уверен, вы знаете, поэтому вы можете серьезно захотеть обратиться к авторам статьи MIT, если вы идете в этом направлении. Авторы использовали процессор Pentium Pro с тактовой частотой 200 МГц и 32 МБ ОЗУ, что соответствует уровню мощности лучших Arduino: Arduino Yun 2 включает микропроцессор Linux с частотой 400 МГц и 64 МБ ОЗУ.

Надеюсь, это даст вам достаточно, чтобы пережевать. Удачи!

person jdaz    schedule 02.06.2020
comment
Хорошо, спасибо за исследовательские работы, есть идеи, из чего сделан карманный сфинкс? они используют машинное обучение или алгоритмы? И, кстати, теоретически это может быть для статьи PHD, но мне ДЕЙСТВИТЕЛЬНО нужен алгоритм, потому что я мог бы захотеть реализовать это в arduino и других вещах, где pocketsphinx слишком много накладных расходов, также в браузере pocketsphinx занимает около 10 МБ, потому что он должен включить все словари, и он работает только для английских слов, и его основная функция заключается в преобразовании речи в текст, что меня не волнует, поэтому я хочу удалить эти накладные расходы - person bluejayke; 03.06.2020
comment
также как вы смогли получить эту формулу по последней ссылке, я не смог найти ни одной статьи 1997 года, а те, которые я нашел, требуют входа в систему? - person bluejayke; 03.06.2020
comment
Рядом с ним есть небольшая ссылка с PDF. Здесь находится прямая ссылка. - person jdaz; 03.06.2020
comment
Я обновил свой ответ более подробно на основе ваших вопросов. - person jdaz; 03.06.2020
comment
привет, спасибо, хотя на самом деле все, что я ищу, это только алгоритмы, на самом деле никакого машинного обучения, первое изображение звука R было действительно хорошим и именно то, что я ищу, хотя я искал в эту бумагу и ничего не нашел для других звуков, если вы можете предоставить какую-то ссылку на то, где я могу их найти, тогда это будет принятый ответ - person bluejayke; 11.06.2020
comment
arduino — это одно, но я также в основном пытаюсь реализовать его в браузере, но он должен быть очень легким, pocketsphinx, js весит более 10 МБ, и даже самая примитивная версия слишком излишняя и вызывает массу задержек, это должно быть в реальном времени даже на старых устройствах vosk не соответствует тому, что мне нужно, потому что мне нужно просто использовать API uadiocontext с javascript на стороне клиента браузера, в то время как vosk является двоичной зависимостью (и слишком большой (50 МБ) в любом случае ), и он предназначен для определения языка, а это не то, что мне нужно - person bluejayke; 11.06.2020