as3:一个声道上的静音按钮和音量滑块

时间:2013-04-10 03:38:07

标签: actionscript-3 audio flash-cs6

我对这个问题的所有知识都已经用尽了所以我希望我的同伴能够帮助我吗?

我正在构建一个音频混音器,它有五个音轨,每个音轨有一个音量滑块和静音按钮。静音按钮与每个音轨的开始/停止按钮相反的原因是,无论何时引入样本,所有样本都将保持同步。 该应用程序具有全局启动,停止和暂停按钮,这些按钮均正常运行,但我无法让音量滑块和静音按钮在单个声道上串联工作。 如果我注释掉其他功能但是当两者都在播放时,音量滑块和静音按钮都将工作,那么只有音量滑块工作。 我猜测存在冲突,因为我使用soundTransform对象/类有两个独立的变量,但是你可以对这个难题有所了解吗? 这是我的一个曲目的代码...任何帮助appricated。

var mySound1:Sound1 = new Sound1();
var myChannel1:SoundChannel = new SoundChannel();
var volumeAdjust1:SoundTransform = new SoundTransform();
volumeAdjust1.volume = 0;

mute_btn1.stop();
mute_btn1.addEventListener(MouseEvent.CLICK,togglemute_btn1);

var Mute1:Boolean = false;

function togglemute_btn1(event:MouseEvent)
{
    if (Mute1)
    {
        mute_btn1.gotoAndStop(1);
        volumeAdjust1.volume = 1;
        myChannel1.soundTransform = volumeAdjust1;
        Mute1 = false;
    }
    else
    {
        mute_btn1.gotoAndStop(2)
        volumeAdjust1.volume = 0;
        myChannel1.soundTransform = volumeAdjust1;
        Mute1 = true;
    }

}

/*if the section below is commented out then the mute_btn1 works fine
otherwise the volume slider functions are dominent*/
var dragging1:Boolean = false;
var mySliderLength1:uint = 300;
var boundingBox1:Rectangle = new Rectangle(0,0,0,mySliderLength1);
slider_mc1.knob_mc1.addEventListener(MouseEvent.MOUSE_DOWN, dragKnob1);
stage.addEventListener(MouseEvent.MOUSE_UP, releaseKnob1);
slider_mc1.knob_mc1.buttonMode = true;

function dragKnob1(myEvent:Event):void
{
    slider_mc1.knob_mc1.startDrag(false, boundingBox1);
    dragging1 = true;
    slider_mc1.knob_mc1.addEventListener(Event.ENTER_FRAME, adjustVolume1);
}

function releaseKnob1(myEvent:Event):void
{
    if (dragging1)
    {
        slider_mc1.knob_mc1.stopDrag();
        dragging1 = false;
    }
}

function adjustVolume1(myEvent:Event):void
{
    var myVolume1:Number = slider_mc1.knob_mc1.y / mySliderLength1;
    var myTransform1:SoundTransform = new SoundTransform(myVolume1);

    if (myChannel1!=null)
    {
        myChannel1.soundTransform = myTransform1;
    }
}

2 个答案:

答案 0 :(得分:1)

我相信您的问题是,每次单击鼠标时都会继续添加Enter_Frame侦听器,但它永远不会被删除。因此,即使你松开了旋钮,adjustVolume1函数仍然被调用(这会调用静音函数调用在调用静音切换函数后对帧执行的任何操作)。

所以我认为我会处理这个问题,因为当前状态是在dragKnob函数之外移动Enter_Frame监听器,并且在adjustVolume1处理程序中只检查dragging1是否为true,否则只返回。

slider_mc1.knob_mc1.addEventListener(Event.ENTER_FRAME, adjustVolume1);

function dragKnob1(myEvent:Event):void
{
...
}

function adjustVolume1(myEvent:Event):void
{
   if(!dragging1)
       return;
   ...
}

答案 1 :(得分:1)

你应该检查你的听众中的Mute1变量,如果是静音,那么音量= 0,否则计算音量。实际上,请在stopDrag()调用时删除您的输入框架侦听器。

function dragKnob1(myEvent:Event):void
{
    slider_mc1.knob_mc1.startDrag(false, boundingBox1);
    dragging1 = true;
    slider_mc1.knob_mc1.addEventListener(Event.ENTER_FRAME, adjustVolume1);
}

function releaseKnob1(myEvent:Event):void
{
    if (dragging1)
    {
        slider_mc1.knob_mc1.stopDrag();
        dragging1 = false;
        slider_mc1.knob_mc1.removeEventListener(Event.ENTER_FRAME, adjustVolume1);
        // ^ this line added
    }
}

function adjustVolume1(myEvent:Event):void
{
    if (Mute1) return;
    // ^ and this line added
    var myVolume1:Number = slider_mc1.knob_mc1.y / mySliderLength1;
    var myTransform1:SoundTransform = new SoundTransform(myVolume1);

    if (myChannel1!=null)
    {
        myChannel1.soundTransform = myTransform1;
    }
}