Мурлыканье кошки на javascript

в 3:49, , рубрики: javascript, Веб-разработка, котики, ненормальное программирование, метки: , ,

Недавно появилась идея сгенерировать кошачье мурлыканье на javascript. Поискав в интернете эту тему — ничего не было найдено, значит надо реализовать!
Исследовав каким образом это вообще можно сделать — решил использовать такую замечательную вещь, как Web Audio API.
Современные браузеры уже более-менее нормально поддерживают эту технологию.

Идея работы Web Audi API предельно проста — создаем ноды, и подключаем их друг другу, при этом каждая нода может являться источником звука, генератором сигнала, задержкой, анализатором, фильтром, регулятором громкости, «выходной» точкой (откуда звук уже попадает в звуковую карту).

Сначала я взял mp3`шку мурлыканья, и решил проанализировать спектр, чтобы в дальнейшем синтезировать что-то похожее. Схема подключения была следующая:
image
Но получившиеся красивые харектеристики сигнала мне никак не помогли. Поэтому пришлось подбирать параметры для генерации экпериментально.

Для генерации звука была реализована следующая схема:
image

И так, мой алгоритм:
1. Создаем глобальные ноды управления громкостью, анализатор, выход
2. Создаем блоки с нодами — генераторами, громкостями, фильтрами, задержками:
image
3. Подключаем все к «главной» громкости
4. Синусоидальное управление «главной» громкостью

Таким образом экспериментально были подобраны параметры для мурлыканья следующие:
1-й блок: прямоугольный, синусоидальный, пилообразный сигналы на 11Гц с НЧ фильтром на 600Гц и задержкой 0.001с
2-й блок: теже сигналы с 0.0013с задержкой
2-й блок: теже сигналы с 0.0012с задержкой

Получилось непрерывное мурлыканье. Но кошки мурлыкают громко на выдохе, и тихо на вдохе, поэтому нужно периодическое увеличение и уменьшение громкости. Для этого я взял синусоиду с ограничением максимальной громкости:
image

В итоге получилось мурлыканье «сферической кошки в вакууме» — очень ровное, и как будто микрофон держали прямо возле рта кошки, но очень похожее на то, пример которого у меня был в mp3. Конечно, все кошки мурлыкают по разному (и моя тоже мурлыкает не так), но я все же результатом доволен.

Ссылка на jsfiddle

Автор: ova777

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js