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.
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;
}
Lo script carica un mp3 esterno che dovrai predisporre nella cartella dove c'è il filmato e nominarlo "music.mp3".
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.