Ciao,
in effetti, come dice rendi, non è troppo semplice.
Ho provato comunque a buttare giù un piccolo esempio utilizzando le classi e i metodi disponibili in as3. In particolare la classe Point e il metodo distance che ti permette di determinare al volo la distanza tra due punti. La parte difficile è stata più che altro elaborare un algoritmo, che fosse anche customizzabile, per trasformare il valore distanza in volume.
Questo e quanto sono riuscito a fare.
Lo script carica un mp3 esterno che dovrai predisporre nella cartella dove c'è il filmato e nominarlo "music.mp3".codice:// PARAMETRI var distanzaMin:Number=10; var distanzaMax:Number=200; var volumeMin:Number=0; var volumeMax:Number=1; // CARICO E IMPOSTO IL SUONO var snd:Sound=new Sound(); var sndCh:SoundChannel=new SoundChannel(); var sndTr = new SoundTransform(); snd.load(new URLRequest("music.mp3")); snd.addEventListener(Event.COMPLETE,onComplete,false,0,true); function onComplete(evt:Event):void { sndCh=snd.play(); setVolume(); } // ELEMENTO TRASCINABILE var obj1:Sprite = new Sprite(); obj1.graphics.beginFill(0x009900); obj1.graphics.drawCircle(0, 0, 20); obj1.graphics.endFill(); obj1.x=200; obj1.y=50; addChild(obj1); obj1.buttonMode=true; obj1.addEventListener(MouseEvent.MOUSE_DOWN, startDragObj); obj1.addEventListener(MouseEvent.MOUSE_UP, stopDragObj); // ELEMENTO "PUNTO DI RIFERIMENTO" (TRASCINABILE) var obj2:Sprite = new Sprite(); obj2.graphics.beginFill(0x990000); obj2.graphics.drawCircle(0, 0, 5); obj2.graphics.endFill(); obj2.x=200; obj2.y=200; addChild(obj2); obj2.buttonMode=true; obj2.addEventListener(MouseEvent.MOUSE_DOWN, startDragObj); obj2.addEventListener(MouseEvent.MOUSE_UP, stopDragObj); // RAPPRESENTAZIONE GRAFICA DELLE DISTANZE LIMITI obj2.graphics.lineStyle(1,0x6666cc); obj2.graphics.drawCircle(0, 0, distanzaMin); obj2.graphics.lineStyle(1,0xcccc00); obj2.graphics.drawCircle(0, 0, distanzaMax); // EVENTI TRASCINAMENTO function startDragObj(e:MouseEvent):void { e.currentTarget.startDrag(); e.currentTarget.addEventListener(MouseEvent.MOUSE_MOVE, setVolume); } function stopDragObj(e:MouseEvent):void { stopDrag(); e.currentTarget.removeEventListener(MouseEvent.MOUSE_MOVE, setVolume); } // REGOLA VOLUME function setVolume(e:MouseEvent=null):void { (e)&&e.updateAfterEvent(); var p1:Point=new Point(obj1.x,obj1.y); var p2:Point=new Point(obj2.x,obj2.y); var distanza:Number=Point.distance(p1,p2); var distanzaAssoluta:Number =(distanza-distanzaMin)/(distanzaMax-distanzaMin); var vol:Number= Math.min(volumeMax,Math.max(volumeMin, volumeMax+(volumeMin-volumeMax)*distanzaAssoluta)); sndTr.volume=vol; sndCh.soundTransform=sndTr; }
E' possibile impostare i 4 parametri iniziali. Lo script crea due sprite trascinabili in uno vengono disegnati i limiti della distanza entro i quali avviene la regolazione del volume.
Ho messo giusto qualche commento.
La parte che dovrebbe interessarti è la funzione setVolume.
Vedi se può esserti utile come spunto per il tuo progetto.
Se c'è bisogno di qualche chiarimento, chiedi pure.


Rispondi quotando