0

この問題に関する私の知識はすべて使い果たしたので、仲間が私を助けてくれることを願っていますか?

トラックごとにボリューム スライダーとミュート ボタンを備えた 5 つのトラックを持つオーディオ ミキサーを構築しています。トラックごとにスタート/ストップ ボタンではなくミュート ボタンを使用する理由は、サンプルがいつ導入されても、すべてのサンプルが同期されるようにするためです。アプリには、すべて正常に機能するグローバルな開始、停止、一時停止ボタンがありますが、個々のサウンド チャンネルで音量スライダーとミュート ボタンを連携させることができません。ボリューム スライダーとミュート ボタンは、他の機能をコメント アウトすると両方とも機能しますが、両方が機能している場合は、ボリューム スライダーのみが機能します。soundTransform オブジェクト/クラスを使用する 2 つの個別の変数があるため、競合があると推測していますが、この難問に光を当てることができるでしょうか? これが1つのトラックの私のコードです...どんな助けも適用されます。

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;
    }
}
4

2 に答える 2

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;
    }
}
于 2013-04-10T06:18:27.753 に答える