2013-04-10 67 views
0

我真的用盡了我對這個問題的所有知識,所以我希望我的同伴能夠幫助我?as3:在一個聲道上靜音按鈕和音量滑塊

我正在構建一個音頻混音器,它有五個音軌,每個音軌有一個音量滑塊和靜音按鈕。與每個音軌的開始/停止按鈕相反,靜音按鈕的原因是,無論何時引入採樣,所有采樣都將同步。 該應用程序具有全局啓動,停止和暫停按鈕,這些按鈕都可以正常工作,但無法使音量滑塊和靜音按鈕在單個聲道上串聯工作。 如果我註釋掉其他功能,音量滑塊和靜音按鈕都將工作,但是當兩者都在播放時,只有音量滑塊可以工作。 我猜測有衝突,因爲我有兩個單獨的變量使用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; 
    } 
} 

回答

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; 
    } 
} 
+0

謝謝Vesper,你的兩行代碼實際上彼此獨立工作,但我已經把它們都留在了,因爲如果靜音按鈕處於活動狀態,我可以看到調整音量功能可能會混淆的地方。 – 2013-04-10 14:59:40

+1

玩過它後,我發現如果我忽略了這一行:if(Mute1)return; 。當我移動滑塊時,它會自動取消靜音,即使mute_btn1狀態仍然顯示爲on,這樣非常有幫助。 我現在唯一的問題是,當我取消靜音軌道時,它會以全音量返回,而不是以前由滑塊指定的音量! – 2013-04-10 15:35:22

+0

這意味着您必須求助於取消靜音部分中的滑塊位置,而不是將該音量設置爲1。 – Vesper 2013-04-10 16:38:39

1

我相信你的問題是你不斷添加Enter_Frame監聽器每次點擊鼠標,但它永遠不會被刪除。所以即使鬆開旋鈕後,adjustVolume1函數仍然會被調用(在調用靜音切換功能後,會調用靜音函數調用在幀上執行的任何操作)。

所以我怎麼想我會處理這個給定的當前狀態是將Enter_Frame監聽器添加到dragKnob函數之外,並在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; 
    ... 
} 
+0

感謝您的努力,肖恩,但我不能讓你調整的工作,但你沒有教育我的事實,一旦我稱之爲一個事件,可能需要再次釋放之前,可以成功地進行了另一次事件。 作爲一個說明,我實際上正在開發一個android設備的應用程序,所以如果我將所有事件都改爲TouchEvent而不是MouseEvents,可能會改進應用程序的某些功能。 – 2013-04-10 15:41:39