diff --git a/examples/playTestSound.js b/examples/playTestSound.js new file mode 100644 index 0000000000..318df6a257 --- /dev/null +++ b/examples/playTestSound.js @@ -0,0 +1,96 @@ +// +// playTestSound.js +// examples +// +// Created by Philip Rosedale +// Copyright 2014 High Fidelity, Inc. +// +// Creates an object in front of you that changes color and plays a light +// at the start of a drum clip that loops. As you move away it will tell you in the +// log how many meters you are from the source. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +var sound = SoundCache.getSound("https://s3.amazonaws.com/hifi-public/sounds/Drums/deepdrum1.wav"); + +var position = Vec3.sum(Vec3.sum(MyAvatar.position, { x: 0, y: 0.5, z: 0 }), Quat.getFront(MyAvatar.orientation)); + +var time; +var soundPlaying = null; + +var baseColor = { red: 100, green: 100, blue: 100 }; +var litColor = { red: 255, green: 100, blue: 0 }; + +var lightTime = 250; + +var distance = 0.0; + +// Create object for visual reference +var box = Entities.addEntity({ + type: "Box", + dimensions: { x: 0.25, y: 0.5, z: 0.25 }, + color: baseColor, + position: position + }); + + +function checkSound(deltaTime) { + var started = false; + if (!sound.downloaded) { + return; + } + if (soundPlaying == null) { + soundPlaying = Audio.playSound(sound, { + position: position, + volume: 1.0, + loop: false } ); + started = true; + } else if (!soundPlaying.isPlaying) { + soundPlaying.restart(); + started = true; + } + if (started) { + Entities.editEntity(box, { color: litColor }); + Entities.addEntity({ + type: "Light", + intensity: 5.0, + falloffRadius: 10.0, + dimensions: { + x: 40, + y: 40, + z: 40 + }, + position: Vec3.sum(position, { x: 0, y: 1, z: 0 }), + color: litColor, + lifetime: lightTime / 1000 + }); + Script.setTimeout(resetColor, lightTime); + } + var currentDistance = Vec3.distance(MyAvatar.position, position); + if (Math.abs(currentDistance - distance) > 1.0) { + print("Distance from source: " + currentDistance); + distance = currentDistance; + } +} + +function resetColor() { + Entities.editEntity(box, { color: baseColor }); +} + + +function scriptEnding() { + Entities.deleteEntity(box); + if (soundPlaying) { + print("stop injector"); + soundPlaying.stop(); + } +} + + + +// Connect a call back that happens every frame +Script.scriptEnding.connect(scriptEnding); +Script.update.connect(checkSound); +