Pull to refresh

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

Reading time2 min
Views23K
Недавно появилась идея сгенерировать кошачье мурлыканье на 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

UPD. В firefox`е не работает. В chrome работает.
UPD 2. Как выяснилось, звучание очень сильно различается в разных наушниках. В одних звучит как мурлыканье, в других вообще как вертолет!
UPD 3. Вариант мурлыканья из комментариев: jsfiddle — по-моему более похоже на настоящее!
UPD 4. Подправил фидл — выставил настройки, подобранные пользователем grinchy
Tags:
Hubs:
Total votes 54: ↑45 and ↓9+36
Comments38

Articles