2

このコードを使用して、関数を使用してマウスの速度を検出していENTER_FRAMEます。マウスの速度は、ループ再生中の mp3 に影響します。それを使用ENTER_FRAMEすると、フレーム レートによって更新され、音楽のサウンドが非常に途切れ途切れになり、乱雑になります。

音量を下げる方法はありますか (まだ を使用していますENTER_FRAME)、または私の mp3 は常にこの方法で影響を受けますか?

var mySound1:Sound = new Sound();
mySound1.load(new URLRequest("AStringsMinor.mp3"));

var myChannel1:SoundChannel = new SoundChannel();
var myTransform1:SoundTransform = new SoundTransform();
myChannel1 = mySound1.play(0, 999);

var prevPt:Point = new Point(mouseX, mouseY); 

addEventListener(Event.ENTER_FRAME, mouseSpeed); 

function mouseSpeed(e:Event)
{     
    var xspeed:Number = Math.abs(mouseX - prevPt.x);     
    var yspeed:Number = Math.abs(mouseY - prevPt.y);    
    var speed:Number = (xspeed + yspeed) / 100;
    prevPt = new Point(mouseX, mouseY);    

    myChannel1.soundTransform = myTransform1;
    myTransform1.volume = speed;
}
4

1 に答える 1

2

平均して5秒相当のマウス速度を使用して、速度の変化を緩和する必要があると思います。

var speeds:Vector.<Number>;
var spn:int; // how many are there
var spi:int; // current index
// into initialization code:
spn=Math.ceil(5.0*stage.frameRate); // 5.0 is a number of seconds to average
speeds=new Vector.<Number>(spn,true);
for (spi=spn-1;spi>=0;spi--) speeds[spi]=0; // explicit init
spi=0;
// the function gets updated
function mouseSpeed(e:Event)
{     
    var xspeed:Number = Math.abs(mouseX - prevPt.x);     
    var yspeed:Number = Math.abs(mouseY - prevPt.y);    
    var speed:Number = (xspeed + yspeed) / 100;
    prevPt = new Point(mouseX, mouseY);    
    speeds[spi++]=speed; // record current speed
    if (spi==spn) spi=0; // wrap
    speed=0;
    for (var n:int=spn-1;n>=0;n--) speed+=speeds[n]; // sum all recorded speeds
    myChannel1.soundTransform = myTransform1;
    myTransform1.volume = speed/spn; // and now average it
}
于 2013-03-13T15:55:38.097 に答える