Ворклог по задаче "Исследовать качественный программный синтез человеческого голоса в браузере"
Прогресс исследования
Проверили гипотезу о том, что для нашей задачи должен существовать практически применимый пример вида:
реальная запись звука/слога → автоматический анализ → компактная параметрическая траектория универсального генератора → обратный синтез узнаваемого звука
Почему такой пример казался вполне существующим
-
Процедурный синтез сам по себе существует. Web Audio даёт осцилляторы, шум, фильтры и AudioWorklet; Pink Trombone показывает browser-native physical vocal tract; формантные демо позволяют получать отдельные гласноподобные звуки из малого числа параметров.
-
Обычное waveform-представление очень велико. Около 1 секунды записи с микрофона может занимать порядка 200 KB в
Float32Array. Даже после агрессивного μ-law @ 8 kHz остаётся около 11 KB и более 10 000 значений на секунду, хотя речь всё ещё воспринимается нормально. Это создаёт сильную интуицию, что воспринимаемая структура звука должна иметь существенно более компактное представление. -
В литературе есть много методов анализа речи. LPC, source-filter analysis, formant tracking, spectral-envelope estimation, vocoders, analysis-by-synthesis и др. По названиям и описаниям они выглядят близко к нужному механизму.
-
LLM первоначально оценивали задачу слишком оптимистично. Концептуальная схема выглядит простой:
generator + parameters + target sound + optimizer. Это создало ложное впечатление, что практический inverse mapping должен быть давно решён и доступен в открытых проектах.
Что удалось найти
Формантные/Web Audio демо
Есть множество примеров, где sawtooth/impulse source проходит через несколько band-pass фильтров и получается звук, напоминающий гласную.
Это доказывает только прямую генерацию из заранее известных параметров. Нужной нам обратной дешифровки такие примеры не дают.
Pink Trombone / Modular Pink Trombone
Это наиболее интересный из найденных генераторов, потому что:
- звук создаётся процедурно;
- ядро не обязано оперировать буквами;
- состояние голосового тракта можно менять непрерывно;
- реализация работает в браузере;
- можно получать промежуточные звуки вне фиксированного словаря.
Но для нашей задачи не хватает главного:
- нет найденного механизма
recording → tract trajectory; - нет автоматического восстановления траектории параметров из реального
МАили любого другого звука; - качество самого синтеза остаётся заметно синтетическим и не демонстрирует естественную речь даже при ручном управлении.
То есть Pink Trombone даёт генератор, но не дешифратор.
Klatt и Klatt-подобные реализации
Не являются архитектурным ориентиром для нашей задачи.
Причины:
- многие реализации уже строят интерфейс вокруг фонем, ARPABET, пресетов и языковых правил;
- язык и буквы становятся частью архитектуры ядра;
- параметры часто handcrafted;
- качество близко к старым синтезаторам;
- нет универсального inverse mapping из произвольного звука в параметры;
- нет демонстрации автоматического восстановления качественной реальной речи.
Для нас это слишком узкий слой: мы ищем универсальную дешифровку звука, а не таблицу фонем.
LPC / source-filter analysis
Позволяют оценивать отдельные характеристики: спектральную огибающую, резонансы, источник возбуждения и т.п.
Но не найден end-to-end кейс, где эти характеристики автоматически превращаются в компактную управляющую программу достаточно универсального генератора, после чего воспроизводится звук, близкий к исходному.
То есть это отдельные части решения, а не готовая система.
Analysis-by-synthesis
Нашлись работы, где параметры синтезатора подбираются по естественной речи оптимизацией.
Это полезно не как готовое решение, а как подтверждение инженерной сложности: обратное отображение нелинейно, неоднозначно и требует поиска в большом пространстве параметров.
Готового универсального browser-friendly решения нужного качества при этом не найдено.
Neural TTS / codec models
Высокое качество есть, но это другой класс решения:
- внутреннее представление скрыто внутри обученной модели;
- нет явного универсального управляемого
VoiceState; - невозможно использовать систему как прозрачный физический/процедурный генератор;
- это не отвечает исследовательской цели дешифровки звука в компактную понятную программу управления.
Чего не удалось найти
Не найден ни один убедительный открытый технический пример, который одновременно:
- Берёт реальную запись конкретного звука или короткого слога.
- Не требует заранее знать букву/фонему/язык.
- Автоматически восстанавливает компактную временную траекторию параметров.
- Использует универсальный процедурный генератор, а не neural TTS/codec decoder.
- Обратно синтезирует звук с качеством, достаточным хотя бы для нормальной узнаваемой речи и заметно лучшим, чем демонстрационные физические синтезаторы.
- Позволяет увидеть и изучить реализацию дешифровки.
- Реалистично переносится в браузерный стек.
Это сейчас главный отрицательный результат исследования.
Почему задача оказалась сложной инженерно
Обратная задача неоднозначна
Похожий выходной waveform может быть получен разными внутренними состояниями генератора. Из записи нельзя просто однозначно восстановить один «правильный» набор параметров.
Нужна метрика восприятия, а не просто waveform error
Два waveform могут иметь большую sample-by-sample разницу, но звучать почти одинаково. И наоборот, небольшая ошибка в критической временной или спектральной области может сильно менять восприятие.
Значит, обычный MSE не является достаточной целевой функцией.
Искать нужно не вектор, а траекторию
Звук — динамический процесс. Меняются источник возбуждения, резонансы, шум, атака, закрытия и раскрытия, носовой канал и другие параметры.
Поэтому реальная переменная поиска — временная программа параметров, а не одна статическая точка.
Генератор сам может не уметь воспроизвести нужный звук
Если выбранная модель недостаточно выразительна, никакой оптимизатор не восстановит исходный звук. Чем выразительнее генератор, тем больше пространство параметров и сложнее обратный поиск.
Голос сложнее нескольких формант
Для качественной речи могут быть существенны glottal source, spectral tilt, aspiration, turbulence, antiresonances, nasal coupling, jitter/shimmer, динамика vocal tract, source-filter interaction и другие механизмы.
Добавление каждого механизма улучшает выразительность, но одновременно усложняет дешифровку.
Ручная настройка не масштабируется
Подобрать параметры одного А вручную можно. Универсально восстанавливать произвольный звук таким методом невозможно.
Это похоже на ручной подбор точного цвета через CMYK без преобразования из целевого цвета в параметры: можно добиться отдельных примеров, но это не решает общую задачу.
Уточнённая постановка ключевой проблемы
Главная задача теперь формулируется не как «сделать синтезатор русских букв» и не как «подобрать хорошие пресеты».
Она универсальнее:
Научиться автоматически находить компактную временную программу параметров достаточно универсального генератора для заданного реального звука.
Буквы, фонемы и языки должны быть только возможными категориями поверх найденного звукового пространства, а не частью ядра.
Мета-вывод по работе с LLM
Кейс показал отдельный риск: LLM легко принимают понятную архитектурную декомпозицию за признак низкой инженерной сложности.
Несколько моделей первоначально описывали задачу как практически простую, потому что все компоненты по отдельности знакомы: Web Audio, filters, interpolation, optimization.
Но наличие понятных компонентов не доказывает существование работающей системы из них.
Только попытка найти конкретный воспроизводимый end-to-end кейс показала, что критический inverse mapping среди найденных решений фактически отсутствует.
Для дальнейшей работы техническую реализуемость нужно проверять минимальными proof-of-feasibility экспериментами, а не уверенностью LLM.
Найти и изучить браузерные проекты и DSP-подходы, которые программно воспроизводят хотя бы несколько человеческих слогов или голосовых звуков с высоким качеством, без генеративного TTS и без привязки ядра к буквам/слогам.