Недавно появилась идея сгенерировать кошачье мурлыканье на javascript. Поискав в интернете эту тему — ничего не было найдено, значит надо реализовать!
Исследовав каким образом это вообще можно сделать — решил использовать такую замечательную вещь, как Web Audio API.
Современные браузеры уже более-менее нормально поддерживают эту технологию.
Идея работы Web Audi API предельно проста — создаем ноды, и подключаем их друг другу, при этом каждая нода может являться источником звука, генератором сигнала, задержкой, анализатором, фильтром, регулятором громкости, «выходной» точкой (откуда звук уже попадает в звуковую карту).
Сначала я взял mp3`шку мурлыканья, и решил проанализировать спектр, чтобы в дальнейшем синтезировать что-то похожее. Схема подключения была следующая:
Но получившиеся красивые харектеристики сигнала мне никак не помогли. Поэтому пришлось подбирать параметры для генерации экпериментально.
Для генерации звука была реализована следующая схема:
И так, мой алгоритм:
1. Создаем глобальные ноды управления громкостью, анализатор, выход
2. Создаем блоки с нодами — генераторами, громкостями, фильтрами, задержками:
3. Подключаем все к «главной» громкости
4. Синусоидальное управление «главной» громкостью
Таким образом экспериментально были подобраны параметры для мурлыканья следующие:
1-й блок: прямоугольный, синусоидальный, пилообразный сигналы на 11Гц с НЧ фильтром на 600Гц и задержкой 0.001с
2-й блок: теже сигналы с 0.0013с задержкой
2-й блок: теже сигналы с 0.0012с задержкой
Получилось непрерывное мурлыканье. Но кошки мурлыкают громко на выдохе, и тихо на вдохе, поэтому нужно периодическое увеличение и уменьшение громкости. Для этого я взял синусоиду с ограничением максимальной громкости:
В итоге получилось мурлыканье «сферической кошки в вакууме» — очень ровное, и как будто микрофон держали прямо возле рта кошки, но очень похожее на то, пример которого у меня был в mp3. Конечно, все кошки мурлыкают по разному (и моя тоже мурлыкает не так), но я все же результатом доволен.
Ссылка на jsfiddle
Автор: ova777