Ответ 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 месяцев в своей игре (так как это вероятное время, которое потребуется для того, чтобы реализации могли даже стабилизироваться в полезной точке),