Задача: Исследовать параметрический синтез русских звуков и переходов между ними
Исследовать параметрический синтез русских звуков и переходов между ними
Исследовать параметрический синтез русских звуков и переходов между ними.
Цель
Исследовать возможность детерминированно синтезировать русские звуки и переходы между ними в браузере через управляемые акустические параметры, без генеративной модели во время исполнения.
Основная гипотеза
Звук следует описывать не как специальный тип буквы, фонемы или слога, а как сценарий изменения универсальных параметров звуковой системы во времени.
Буквы, фонемы, слоги и слова могут использоваться как метаданные и названия примеров, но не должны определять архитектуру DSP-ядра.
Что исследовать
- какие универсальные параметры достаточны для описания человеческих речевых звуков;
- как описывать устойчивые звуки, быстрые переходы и кратковременные взрывные события одной временной моделью;
- как воспроизводить переходы между звуками без переключения специальных renderer-ов;
- как переиспользовать и композировать уже найденные сценарии в более длинные последовательности;
- как сравнивать синтез с живыми примерами и итеративно приближать параметры;
- какие ограничения текущего программного синтеза мешают приблизиться к естественному человеческому звучанию.
Подход
Использовать цикл:
живая запись → измерение → анализ → сценарий параметров → синтез → повторное измерение → сравнение → корректировка
Неудачные попытки также считать полезным результатом: они уточняют отображение между управляющими параметрами и наблюдаемым звуком.
Ограничения направления
- не строить ядро вокруг каталога фонем, букв или слогов;
- не использовать генеративный TTS как механизм синтеза;
- сохранять детерминированность и явную управляемость параметрами;
- добавлять новые DSP-механизмы только как универсальные средства формирования звука, а не как специальные реализации конкретных букв.
Ожидаемый результат
Понять, можно ли построить универсальный браузерный движок, в котором произвольный человеческий звук задаётся программой изменения параметров во времени, а более длинные последовательности получаются композиционно из уже найденных сценариев.
Ворклоги
Прогресс исследования
Зафиксирован и экспериментально проверен основной архитектурный подход: человеческий звук описывается как непрерывный сценарий изменения универсального состояния DSP во времени, а не как специальный renderer буквы/фонемы.
Реализовано
VoiceScenarioсinitialи общейtimeline.- Команды
setиanimate, включая cubic bezier. - Непрерывное состояние с параметрами возбуждения, периодичности, шума, F0, формы источника, трёх универсальных резонансных каналов и итогового уровня.
- Новая команда по одному параметру начинает движение от его текущего значения и заменяет прежнюю будущую automation.
- Синтезатор принимает как один
VoiceScenario, так иVoiceScenario[]. - Массив сценариев разворачивается в одну временную шкалу без сброса фазы источника и DSP-состояния между элементами.
- Это позволило собирать
Приветкак[PRI_SCENARIO, VET_SCENARIO], а не создавать отдельный сценарий слова. - Шумовой источник переведён на seeded PRNG для повторяемого PCM.
- Синтетический звук проходит через тот же VoiceLogger, что и живые записи.
Экспериментальный цикл
Используется схема:
живая запись → лог → анализ → сценарий → синтез → тот же логгер → сравнение → корректировка
Текущий logger измеряет RMS, peak, ZCR, spectral centroid, spectral flatness, dominant frequency и несколько энергетических диапазонов. Он пока грубый: анализ на 128 samples даёт частотный шаг около 375 Hz, поэтому его нужно в дальнейшем улучшать.
Результаты по отдельным звукам
А
Протяжное А уже получилось относительно естественным. Это подтвердило, что timeline + периодический источник + универсальные резонансы в принципе подходят для части устойчивых голосовых состояний.
С
После нескольких итераций выяснилось, что субъективное «шипение» нельзя сводить к избытку высоких частот. Живая сильная С имеет одновременно высокий ZCR, высокий spectral centroid и интенсивную высокочастотную турбулентность. Усиление только общей амплитуды не решает задачу качества источника.
Ш
Ш рассматривается как близкое к С непрерывное шумовое состояние, но с более низким и широким распределением спектральной энергии.
Т
Т подтвердило наличие кратковременных событий, которые нельзя тянуть как устойчивое состояние. Для живой Т характерен очень короткий высокочастотный выброс и быстрое затухание; в нескольких записях основной максимум часто оказывался около 15–16 kHz. Это удалось выразить той же timeline-моделью без специального типа T.
Составные сценарии
Созданы сценарии При и Вет, затем проверена их композиция через массив сценариев. Они уже узнаваемы, но качество звучания остаётся явно компьютерным.
После сравнения с живым Привет выявлено:
- первоначальные сценарии были сильно растянуты по времени;
- ручные глубокие колебания
sourceLevelдляРзвучат механически; - финальный
Тв одном из вариантов доходил доpeak = 1, то есть попадал в hard clamp; - сценарии были сокращены до более разговорных длительностей и финальный
Тослаблен.
Текущие ограничения DSP
Основной риск сейчас находится не в сценарной архитектуре, а в качестве самого звукового двигателя. Возможные недостающие универсальные механизмы:
- более реалистичный glottal source;
- spectral tilt;
- aspiration / breathiness;
- broadband/direct noise path;
- более физичная модель турбулентности;
- antiresonances;
- nasal tract;
- source-filter interaction;
- более богатая модель голосового тракта;
- возможно jitter/shimmer и другие малые вариации;
- контроль клиппинга вместо скрывающего причины hard clamp.
Архитектурные выводы
- буквы, фонемы и слоги должны оставаться метаданными, а не онтологией DSP;
- устойчивые, переходные и взрывные явления пока удаётся выражать одной timeline-моделью;
- композиция сценариев выглядит правильным направлением;
- генеративный TTS не подходит как предмет исследования, поскольку задача требует явного программирования новых звуков, включая ранее не встречавшиеся;
- Pink Trombone и подобные физические модели полезны как ориентиры, но их качество показывает, что одной непрерывной модели тракта недостаточно.
Следующий шаг
Создана отдельная связанная исследовательская задача cmtzxmokp085eqw0qtb7vg7c2 про качественный программный синтез человеческого голоса в браузере. В ней нужно найти browser-native/browser-capable проекты и DSP-подходы, которые без генеративного TTS качественно воспроизводят хотя бы несколько человеческих звуков или слогов, и понять, какие универсальные механизмы стоит перенести в текущий движок.
Новый прогресс: структурное представление звука и цикл человек ↔ ИИ
Зафиксированы несколько обнадёживающих признаков текущего прототипа.
1. Мы уже работаем не с waveform, а с компактной программой
Текущий синтезатор оперирует отдельными переменными начального состояния и отдельными сценариями на общей timeline. Это принципиально отличается от прямого хранения нескольких тысяч/десятков тысяч отсчётов.
Несмотря на грубость модели, из сравнительно малого числа параметров уже получаются звуки, которые человек иногда распознаёт как буквы/фонемные фрагменты или слоги. Это ещё не доказывает достаточность модели для естественной речи, но показывает, что параметрическое пространство не является полностью хаотичным.
2. Человек фактически выполняет роль perceptual validator
ИИ не имеет надёжного эталона того, насколько натурально звучит синтез. Поэтому текущий рабочий цикл выглядит так:
ожидаемый звук → сценарий → синтез → человек слушает → оценивает качество → ИИ предлагает изменения параметров → новый синтез.
Человек здесь даёт финальную perceptual feedback, а ИИ помогает анализировать структурные различия и двигаться по пространству параметров.
3. Использование реальной записи как локального ориентира
При поиске звука Ха была использована запись слова/фразы КуХаРе, где нужный участок реально присутствует. ИИ получил:
- лог синтетического варианта;
- лог реальной записи;
- информацию о том, где в записи находится целевой фрагмент.
Далее он сравнивает структурные признаки и предлагает, какие параметры сценария можно изменить, чтобы приблизиться к нужному участку.
Это не даёт мгновенного результата, но выглядит как рабочий человеко-ИИ цикл приближения к целевому звуку.
4. Возможно, текущие логи слишком сильно сжаты
Есть подозрение, что качество аналитических логов недостаточно для точного сравнения. Если человек слышит различия, которых ИИ не может вывести из лога, bottleneck может находиться не только в генераторе, но и в разрешении анализа.
Нужно отдельно проверять, как меняется качество предложений ИИ при уменьшении сжатия логов и увеличении числа временных/спектральных признаков.
5. Случайно найденные реальные звуки — тоже знание
При поиске Ха один из вариантов был воспринят как Ва.
Это полезно по двум причинам:
- найденный звук сам по себе может быть нужен позже;
- переход от предыдущего «шипения» к воспринимаемому
Вапоказывает направление в параметрическом пространстве.
Такие случайные находки нужно сохранять вместе с изменениями параметров, потому что они помогают картировать пространство возможных звуков.
6. Пространство пока остаётся в области speech-like sounds
Несмотря на потенциальную универсальность AudioContext, при изменениях параметров текущего voice-oriented генератора мы пока в основном сталкиваемся со звуками, которые воспринимаются как голосовые/фонетические или близкие к ним, а не как случайные реальные звуки вроде лая, птичьего пения или стука копыт.
Это не доказывает универсальность и не доказывает полноту покрытия человеческой речи. Более осторожный вывод:
текущая архитектура генератора уже содержит сильный inductive bias в сторону voice-like sound space.
Это может быть полезным свойством, потому что поиск происходит не по всему возможному аудиопространству, а по более узкой области.
7. Уточнённая практическая цель
Теперь основной вопрос не только «какие параметры нужны для синтеза речи», а:
насколько компактно можно описать нужную область человеческой речи, не возвращаясь обратно к тысячам samples.
Крайние точки уже понятны:
- waveform / μ-law — высокое качество и универсальность, но тысячи значений в секунду;
VoiceScenario— компактность и управляемость, но пока неизвестные пределы качества.
Дальнейшая работа должна исследовать промежуток между ними и зависимость:
качество ↑ ↔ сложность/размер представления ↑.
Возможный путь — постепенно добавлять только те механизмы, которые дают заметный perceptual gain, сохраняя структурность модели.
Новые выводы по устройству синтезатора и обратимости
Проведён разбор полного пути VoiceScenario -> PCM.
1. Синтез полностью находится в нашем коде
Уточнено, что никакого внешнего скрытого звукового движка, который формирует PCM, нет. Конечный массив звуковой дорожки целиком вычисляется внутри synthesizeScenario:
VoiceScenario -> VoiceControlState(t) -> excitation -> resonators -> value -> Float32Array.
На каждом sample код самостоятельно вычисляет итоговое значение и записывает его в output[sampleIndex]. Браузерный AudioBufferSourceNode затем лишь воспроизводит уже готовый PCM.
Это означает, что весь DSP можно инструментировать и исследовать на каждом шаге.
2. Управляющие параметры и измеряемые акустические метрики — разные уровни
После исправления представления сценария стало видно, что даже почти постоянные управляющие параметры дают высокочастотные изменения в измеряемом аудио. Это ожидаемо.
Причины:
- постоянный
f0Hzзадаёт скорость измененияvoicePhase, а не постоянное значение waveform; - постоянный
noiseLevelуправляет амплитудой случайного источника, который меняется каждый sample; - резонаторы имеют внутреннее stateful-состояние (
low,band) и продолжают динамически изменяться даже при постоянных параметрах; - RMS, spectralFlatness и dominantFrequency зависят сразу от нескольких управляющих параметров и внутреннего DSP-состояния.
Поэтому control curve != measured acoustic curve.
3. Найден дополнительный скрытый для сценария слой: внутреннее DSP-состояние
Между VoiceControlState и PCM существуют внутренние состояния:
voicePhase;resonator1/2/3.low;resonator1/2/3.band;- состояние детерминированного PRNG;
- активные automation.
Именно этот слой объясняет, почему почти горизонтальные управляющие линии могут приводить к сложному высокочастотному waveform и неровным акустическим метрикам.
4. Следующее направление исследования
Нужно перейти от вопроса "какая метрика лога соответствует параметру" к задаче идентификации системы:
как изменение каждого параметра VoiceControlState влияет на waveform и на измеримые акустические признаки?
Предлагаемый эксперимент: parameter sweep по каждому управляющему параметру при фиксированных остальных и сбор waveform + спектральных/временных характеристик. Это позволит построить карту control -> acoustic features и понять, какие параметры реально наблюдаемы из аудио, какие зависят от комбинаций параметров, а какие текущим логгером вообще не видны.
Также обсуждена базовая теория PCM: постоянный unsigned 8-bit PCM уровень (например 255,255,255,...) не даёт устойчивого тона, потому что нет периодического изменения; слышимы в основном переходы. Это подчёркивает, что отдельное значение PCM — мгновенная амплитуда, а частота/тембр/громкость являются свойствами структуры последовательности во времени.