var soundMap = [{ name: 'Cells', url: "https://hifi-content/DomainContent/CellScience/Audio/Cells.wav", audioOptions: { position: { x: 15850, y: 15850, z: 15850 }, volume: 0.03, loop: true } }, { name: 'Cell Layout', url: "https://hifi-content/DomainContent/CellScience/Audio/CellLayout.wav", audioOptions: { position: { x: 15950, y: 15950, z: 15950 }, volume: 0.03, loop: true } }, { name: 'Ribsome', url: "https://hifi-content/DomainContent/CellScience/Audio/Ribosome.wav", audioOptions: { position: { x: 15650, y: 15650, z: 15650 }, volume: 0.03, loop: true } }, { name: 'Hexokinase', url: "https://hifi-content/DomainContent/CellScience/Audio/Hexokinase.wav", audioOptions: { position: { x: 15750, y: 15750, z: 15750 }, volume: 0.03, loop: true } } ]; function loadSounds() { soundMap.forEach(function(soundData) { soundData.sound = SoundCache.getSound(soundData.url); }); } function playSound(soundData) { if (soundData.injector) { // try/catch in case the injector QObject has been deleted already try { soundData.injector.stop(); } catch (e) { print('error playing sound' + e) } } soundData.injector = Audio.playSound(soundData.sound, soundData.audioOptions); } function checkDownloaded(soundData) { if (soundData.sound.downloaded) { Script.clearInterval(soundData.downloadTimer); if (soundData.hasOwnProperty('playAtInterval')) { soundData.playingInterval = Script.setInterval(function() { playSound(soundData) }, soundData.playAtInterval); } else { playSound(soundData); } } } function startCheckDownloadedTimers() { soundMap.forEach(function(soundData) { soundData.downloadTimer = Script.setInterval(function() { checkDownloaded(soundData); }, 1000); }); } Script.scriptEnding.connect(function() { soundMap.forEach(function(soundData) { if (soundData.hasOwnProperty("injector")) { soundData.injector.stop(); } if (soundData.hasOwnProperty("downloadTimer")) { Script.clearInterval(soundData.downloadTimer); } if (soundData.hasOwnProperty("playingInterval")) { Script.clearInterval(soundData.playingInterval); } }); }); loadSounds(); startCheckDownloadedTimers();