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

    UPD. В firefox`е не работает. В chrome работает.
    UPD 2. Как выяснилось, звучание очень сильно различается в разных наушниках. В одних звучит как мурлыканье, в других вообще как вертолет!
    UPD 3. Вариант мурлыканья из комментариев: jsfiddle — по-моему более похоже на настоящее!
    UPD 4. Подправил фидл — выставил настройки, подобранные пользователем grinchy
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 38

      +19
      Простите, но это — не кошка. Ни одна кошка так не мурлыкает.
      +4
      В ФФ слышно только какое-то потрескивание.
        +1
        Действительно… в ФФ не работает, возможно, как раз из-за не полной поддержки Web Audio API. В хроме работает.
          0
          В мозиле на данный момент нет полной поддержки фильтров, во всяком случае в стабильной версии. Интересно то, что сами фильтры там есть, они создаются, работают, но ведут себя все как lowpass, независимо от указанного типа…
          +17
          попытка завести дизельный двигатель — да
          кошка — нет
            +5
            А на моего хриплого кота похоже :)
              0
              ага мой так же трещит, да еще громко зараза, всех ночью будит
              +2
              клево :) только хотелось, чтобы запись была не цикличной, или хотя бы что это не было так заметно. Будет более натурально)
              У меня Chrome, звучит как кот)
                +5
                точно не кот мурлыкал, но за попытку плюс =)
                  0
                  В Safari звучно, только это не кошка, а кот.
                    +4
                    Не мурлыканье, а урчание. Да и не урчание это, а генератор какой-то.
                      +1
                      Да сколько можно то уже!
                        +6
                        Вертолет больше напомнило )
                          +3
                          С audioContext в современных браузерах все фигово, а не «современные браузеры уже более-менее нормально поддерживают эту технологию».
                            0
                            Будет больше похоже, если будет цикличность, но с перепадами. То есть мурлыкание, это ведь дахание, а там вдох/выдох и они звучат по-разному)
                              0
                              Моей фантазии не хватило, чтобы представить себе кота, который так «мурлыкает».
                                0
                                Мда, представляются скорее какие-то агрегаты на космическом корабле, чем кошки. Плюс ещё почему-то слышны какие-то щелчки.

                                UPD: Firefox же… «Мурлыки» слышны, но щелчки совсем всё портят. Забыл что теперь с лисы сижу.
                                  +2
                                  purr.org.ua вот вам натуральное
                                    +1
                                    потому что там просто аудио запись
                                      +1
                                      Истинно так!
                                      –1
                                      Спасибо огромное за линк :)
                                        +1
                                        Автор есть на Хабре, но пока в read-only.
                                        +4
                                        Ощущение, что я сижу в бункере, а снаружи на улице идет перестрелка. Не хватает только взрывов снарядов.
                                          +3
                                          Странные у вас кошки.
                                            +4
                                            Определенное сходство с мурлыканьем кота есть. Но до настоящего теплого лампового мурлыканья не дотягивает.
                                              +2
                                              Отличная идея, я тоже думал о реализации такого синтеза на микроконтроллере)
                                              Потом, правда, купил себе кота, решив, что электронный кот это штука такого же уровня, что резиновая женщина)

                                              Может, лучше на базе семплов сделать? Я не имею в виду чисто воспроизводить семпл, а взять несколько разных, смешивать в разных пропорциях и через разные фильтры. И изменяя pitch (вот это важно) — так, вроде бы, и делают подобные штуки. Где-то тут проскакивала ссылка на аналогичный проект, со звуками природы, огня и прочего, там именно на семплах сделано.
                                                0
                                                На базе сэмплов определенно лучше будет, но я хотел сделать именно на чистом javascript.
                                                  0
                                                  Ну если не просто запись выводить, а именно смешивать и менять частоты компонентов, то, я думаю, будет не менее «честно», чем с чистым JS.
                                                  Кстати, кошки урчат на выдохе и на вдохе, это тоже можно учитывать)
                                                +1
                                                jsfiddle.net/3aXB7/17/embedded/result/
                                                Попробовал с частотой поиграться. Так чуть больше похоже, на мой взгляд.
                                                  0
                                                  Согласен, значительно лучше! После этого оригинал вообще как непонятно что звучит)
                                                  +1
                                                  Хотелось бы полушать как было в оригинале :)
                                                    0
                                                    А нельзя, используя преобразование Фурье (как, например, было описано в этом топике), примененное к реальной записи урчания, получить набор сигналов для более реалистичной имитации?
                                                      +1
                                                      Не знаю, настоящее там оно или нет, но кошка, спящая на столе, проснулась и начала искать источник звука.
                                                        0
                                                        Такая же фигня :)
                                                        +2
                                                        сигналы на 11Гц


                                                        Были бы у вас большие напольные колонки — вы бы никогда не использовали такую частоту. Это инфразвук, который во-первых вреден, во-вторых издается большими объектами в природе и кошка не может его издавать.

                                                        Поэтому это звучит как шахта.
                                                          0
                                                          а вдруг это попытка воспроизвести урчание гигантского саблезубого тигра затаившегося в своем пещерном логове? Откуда вы знаете какой звук издает гигантский саблезубый тигр? Вы явно от нас что-то скрываете!

                                                        Only users with full accounts can post comments. Log in, please.