Web Audio - Как мгновенно изменить воспроизведение Rate всех звуков?

При использовании Web Audio вы можете подключить все созданные вами звуки к одному глобально созданному. gainNode и используйте этот узел, чтобы иметь свойство "Master Volume". Это очень удобно, когда вы хотите иметь возможность изменять общую громкость на лету и хотите, чтобы она немедленно влияла на все звуки.

Теперь я пытаюсь сделать то же самое, но для playbackRate, Для справки: это будет для веб-игры, в которой вы можете использовать бонусы для замедления времени, что также должно замедлять всю музыку и звуки.

Каждый звук, который я создаю, является AudioBufferSourceNode связаны с цепочкой узлов обработки. Теперь я знаю, что AudioBufferSourceNode сам по себе имеет playbackRate собственность, которую вы можете изменить. Это здорово, но это потребовало бы от меня кеширования всех AudioBufferSourceNodes Я создаю, зацикливаю их и меняю их playbackRate если бы я хотел изменить "глобальное воспроизведение Rate" на лету. Было бы прекрасно, если бы я мог сделать это так же, как с gainNode, но не смог найти способ сделать это.

Каков был бы правильный способ реализовать такую ​​функцию? Вы бы порекомендовали кешировать все AudioBufferSourceNodes создал (может быть тысячи) и зациклился на них? Это то, как я делаю это с HTML5 Audio, но это кажется хакерским для Web Audio, который намного более продвинут.

Если вам нужна дополнительная информация, пожалуйста, спросите, и я обновлю вопрос!

1 ответ

Решение

Вы не можете сделать это напрямую. Есть некоторые исходные узлы, которые не имеют регуляторов скорости воспроизведения - например, живой ввод. В этом случае вам лучше всего делать то, что вы предлагаете, - вести список активных звуков для циклического прохождения.

Вы можете использовать гранулярный метод для его повторной выборки и изменения высоты тона - как код "pitch bend" в моей демонстрации эффектов ввода звука ( https://webaudiodemos.appspot.com/input/). Это немного дорого, если вы хотите, чтобы эффект был.

Другие вопросы по тегам