Подтвердить что ты не робот

Пространственный (2D) звук в Javascript

Для нужд моей игры мне нужно иметь 2D-звук. Это означает, что эммитер должен располагаться где-то на двумерной плоскости. Как достичь этого эффекта в Javascript? Нужно ли использовать специальный звуковой формат или я могу контролировать громкость на громкоговорителях?

Я думаю, что могу дойти до того, что у меня есть 2 тома для каждого динамика, но я не знаю, как применять разные тома для одного и того же звука в Javascript.

4b9b3361

Ответ 1

Здесь описывается статья, описывающая именно эту , включая демонстрацию .

Чтобы предотвратить гниение линии связи, я буду ссылаться на наиболее важные части ниже

К счастью, Web Audio API поставляется со встроенными аппаратными ускоренными позиционными звуковыми функциями, которые довольно прямолинейны для использования.

Основная идея продемонстрирована в приведенном ниже коде:

PositionSample.prototype.changePosition = function(position) {
  // Position coordinates are in normalized canvas coordinates
  // with -0.5 < x, y < 0.5
  if (position) {
    if (!this.isPlaying) {
      this.play();
    }
    var mul = 2;
    var x = position.x / this.size.width;
    var y = -position.y / this.size.height;
    this.panner.setPosition(x * mul, y * mul, -0.5);
  } else {
    this.stop();
  }
};

Полный исходный код рабочей демонстрации в первой ссылке выше можно найти здесь.

Offtopic: Я рассмотрел переписывание цитируемой статьи вручную как пользовательский ответ здесь, но это казалось относительно бессмысленным, поскольку статья уже более чем достаточно ясна, и двойная работа кажется бессмысленной


Совместимость мудрая, только комбинация вспышки и ранее упомянутого кода дает истинное решение для позиционирования/панорамирования в кросс-браузере (поскольку на некоторых мобильных устройствах вспышка недоступна). В идеале я бы посоветовал не использовать аудио API, если это можно обойти, так как маловероятно, что в спецификации все изменится, что может привести к поломке вашего кода (+ это маловероятно, чтобы это не работало в любом случае на мобильных устройствах). Единственный сценарий, когда использование более продвинутого веб-аудио api имеет смысл, - это то, что вы ожидаете работать хотя бы на 6-18 месяцев в своей игре (так как это вероятное время, которое потребуется для того, чтобы реализации могли даже стабилизироваться в полезной точке),