From 1ead2d99510463c0c92b68c10b4276bd4535c02d Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Wed, 26 Jul 2023 15:02:58 +0200 Subject: [PATCH] Web audio spatialization --- demos/goat.mp3 | Bin 0 -> 37413 bytes demos/missing-goat.html | 78 ++++++++++++++++++++++++++ demos/setup.js | 5 +- packages/cesium-audio/LICENSE | 29 ++++++++++ packages/cesium-audio/cesium-audio.js | 27 +++++++++ packages/cesium-audio/package.json | 14 +++++ 6 files changed, 151 insertions(+), 2 deletions(-) create mode 100644 demos/goat.mp3 create mode 100644 demos/missing-goat.html create mode 100644 packages/cesium-audio/LICENSE create mode 100644 packages/cesium-audio/cesium-audio.js create mode 100644 packages/cesium-audio/package.json diff --git a/demos/goat.mp3 b/demos/goat.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..806871a67e38aea74f8dcd060735d5b59a7cbfd8 GIT binary patch literal 37413 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 literal 0 HcmV?d00001 diff --git a/demos/missing-goat.html b/demos/missing-goat.html new file mode 100644 index 0000000..c258b7b --- /dev/null +++ b/demos/missing-goat.html @@ -0,0 +1,78 @@ + + + + + + + + + + + + +
+ + + + diff --git a/demos/setup.js b/demos/setup.js index d28e8d8..a4dabf6 100644 --- a/demos/setup.js +++ b/demos/setup.js @@ -17,6 +17,7 @@ export async function createViewer(container) { homeButton: false, fullscreenButton: false, scene3DOnly: true, + requestRenderMode: true, baseLayer: new Cesium.ImageryLayer( new Cesium.UrlTemplateImageryProvider({ url: "https://wmts.geo.admin.ch/1.0.0/ch.swisstopo.swissimage/default/current/3857/{z}/{x}/{y}.jpeg", @@ -37,9 +38,9 @@ export async function createViewer(container) { viewer.scene.fog.minimumBrightness = 0.03 * 10; viewer.camera.flyTo({ - destination: Cesium.Cartesian3.fromDegrees(7.863775, 46.686447, 1200), + destination: Cesium.Cartesian3.fromDegrees(7.863775, 46.686447, 1000), orientation: { - heading: Cesium.Math.toRadians(25.0), + heading: Math.PI, pitch: 0.0, }, duration: 0, diff --git a/packages/cesium-audio/LICENSE b/packages/cesium-audio/LICENSE new file mode 100644 index 0000000..1d3bc0e --- /dev/null +++ b/packages/cesium-audio/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2020-present, camptocamp SA +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/cesium-audio/cesium-audio.js b/packages/cesium-audio/cesium-audio.js new file mode 100644 index 0000000..7916d6b --- /dev/null +++ b/packages/cesium-audio/cesium-audio.js @@ -0,0 +1,27 @@ +import { Cartesian2, Cartesian3} from "cesium"; + +export default class CesiumSound { + constructor(viewer, position, panner) { + this.scene = viewer.scene; + this.position = position; + this.panner = panner; + + this.setPan(); + + viewer.scene.postRender.addEventListener(() => this.setPan()); + } + + setPan() { + const camera = this.scene.camera; + const cameraDirection = Cartesian2.fromCartesian3(camera.direction); + // vector from camera to sound + const toPosition = Cartesian2.fromCartesian3(Cartesian3.subtract(this.position, camera.position, new Cartesian3())); + + // angle between camera direction and sound + const angle = Cartesian2.angleBetween(cameraDirection, toPosition); + const rightSide = Cartesian2.cross(cameraDirection, toPosition) > 0; + + this.panner.pan.value = rightSide ? -Math.sin(angle) : Math.sin(angle); + console.log(angle, this.panner.pan.value); + } +} diff --git a/packages/cesium-audio/package.json b/packages/cesium-audio/package.json new file mode 100644 index 0000000..66b2863 --- /dev/null +++ b/packages/cesium-audio/package.json @@ -0,0 +1,14 @@ +{ + "name": "@geoblocks/cesium-audio", + "version": "0.0.0", + "license": "BSD-3-Clause", + "repository": "github:geoblocks/cesium-helpers", + "main": "cesium-audio.js", + "module": "cesium-audio.js", + "publishConfig": { + "access": "public" + }, + "peerDependencies": { + "cesium": "1.x" + } +}