FLASH AS3声音重叠

时间:2015-10-07 07:48:41

标签: actionscript-3 flash audio

好吧,我是flash中的总菜鸟,因此我想这一定很容易解决。我在flash cs6中制作带有录制声音的音板,非常简单:1帧,10个按钮,每个按钮发出不同的声音。问题是这些声音的重叠,所以我需要的是,当我按下一个按钮时,其他声音停止播放。有人请吗?

2 个答案:

答案 0 :(得分:0)

请参阅play()类中的Sound方法文档,它会返回一个SoundChannel对象,该对象具有stop()方法。

所以你可以这样做(示意性地):

var currentChannel:SoundChannel;

button1.addEventListener(MouseEvent.CLICK, onButtonClick);
button2.addEventListener(MouseEvent.CLICK, onButtonClick);
button3.addEventListener(MouseEvent.CLICK, onButtonClick);

function onButtonClick(event:MouseEvent):void 
{
    /* provided you have implemented selectSoundByButton func somewhere */

    const sound:Sound = selectSoundByButton(event.currentTarget);

    if (currentChannel) {
        currentChannel.stop();
    }

    currentChannel = sound.play();
}

更详细的说明:

假设你想在flash中创建另一个放屁按钮应用程序。这就是你要做的事情:

  1. 创建一个按钮符号,将其添加到舞台并在属性选项卡中为其指定实例名称。我们称之为myButton
  2. 使用file-> import
  3. 将声音添加到库中
  4. 将此声音导出到actionscript。右键单击库中的声音,在“actionscript选项卡”上选中“Export for actionscript”,“在第1帧中导出”。使用所需的声音类别名称填写“类”输入(例如MySound)
  5. 然后您必须在按钮点击时触发声音播放。因此,您应将以下代码放入Flash剪辑的第一帧:

    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.events.MouseEvent;
    
    var currentChannel:SoundChannel;
    const mySound:Sound = new MySound();
    
    function onClick(e:MouseEvent):void {    
        if (currentChannel) {
            currentChannel.stop();
        }
        currentChannel = mySound.play();
    }
    
    myButton.addEventListener(MouseEvent.CLICK, onClick);
    

答案 1 :(得分:-1)

在播放声音之前,将其添加到每个按钮的代码中:

SoundMixer.stopAll();

如果您直接从Adobe Flash中的时间轴添加操作,则无需导入该类。如果您使用的是 FlashDevelop FlashBuilder 等IDE,请将此代码添加到开头(Package {之后):

import flash.media.SoundMixer;

快乐的编码!

修改:More info on the SoundMixer class