...

пятница, 20 декабря 2013 г.

Мурлыканье кошки на 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


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.


Комментариев нет:

Отправить комментарий