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/). Это немного дорого, если вы хотите, чтобы эффект был.