Как стать автором
Обновить

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

Время на прочтение2 мин
Количество просмотров23K
Недавно появилась идея сгенерировать кошачье мурлыканье на 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
Теги:
Хабы:
Всего голосов 54: ↑45 и ↓9+36
Комментарии38

Публикации

Истории

Работа

Ближайшие события

One day offer от ВСК
Дата16 – 17 мая
Время09:00 – 18:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область