FLASH AS3 声音重叠

Posted

技术标签:

【中文标题】FLASH AS3 声音重叠【英文标题】:FLASH AS3 Sound Overlap 【发布时间】:2016-01-04 08:25:45 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

SoundMixer.stopAll();

如果您直接从 Adob​​e Flash 中的时间线添加动作,则无需导入该类。如果您正在使用像 FlashDevelopFlashBuilder 这样的 IDE,请将此代码添加到开头(Package 之后):

import flash.media.SoundMixer;

编码愉快!

编辑:More info on the SoundMixer class

【讨论】:

它解决了 PO 问题,但可能会提供另一个问题。投了反对票。 SoundMixer.stopAll();将停止当前播放的任何声音,而不仅仅是问题中提到的声音。如果 PO 以后需要背景音乐怎么办?或者如果其他声音应该在其他地方播放?这里提供的解决方案会产生比它解决的更多的问题。 知道这个功能还不错。我会提出比这更深入的建议(比如将按钮声音存储到变量中并在播放下一个声音之前停止当前声音)。但是,OP 发布说他们是菜鸟,我怀疑他们是否添加了背景音乐。对于不知道或不想编码的人来说,这是一个快速解决方案。【参考方案2】:

查看Sound类中的play()方法文档,它返回一个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 中创建另一个放屁按钮应用程序。这就是你必须做的:

    创建一个按钮元件,将其添加到舞台并在属性选项卡中为其指定一个实例名称。让我们称之为 myButton 使用 file->import 将声音添加到库中 将此声音导出到动作脚本。右键单击库中的声音,选中“actionscript 选项卡”上的“Export for actionscript”、“export in frame 1”。用所需的声音类名称填充“类”输入(例如 MySound)

    然后您必须在单击按钮时触发声音播放。所以你应该把下面的代码放在你的 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);
    

【讨论】:

嘿,谢谢您的回答。我真的不明白你的意思,所以假设只有一个按钮。你能告诉我每次我按下按钮时声音会重新开始但没有重叠时该怎么做,我到底把这段代码放在哪里。 我按照步骤操作但无济于事。该按钮现在称为“myButton”,声音类(名称为“goodmorning”)被称为“MySound”,正如您所建议的,所以我可以粘贴代码而不做任何更改,但还不行。每次我点击按钮都会有新的声音出现。告诉我,在 AS2 中更容易吗?也许我可以重新开始。感谢您的帮助兄弟。 嗯,每次单击按钮时它都应该重新开始,停止之前的播放。这不是你想要的吗?也许您应该尝试创建新项目并再次按照这些步骤操作(因为我不知道您在现有项目中已经做了什么)。 AS2 对你来说可能同样有问题,因为你并不真正了解基础。 不要退回到 AS2。 只是想感谢你们的支持,但我发现使用 as2 的解决方案要简单得多。我只需要这段代码: onMouseDown = function () stopAllSounds(); ;将它设置在时间线的第一个也是唯一一个帧的动作中,就是这样。无论如何,再次感谢。

以上是关于FLASH AS3 声音重叠的主要内容,如果未能解决你的问题,请参考以下文章

按下 ImageButton 重叠声音

jQuery Audio:如何允许重叠的声音?

多次按下按钮时声音重叠

如何播放与 AVAudioPlayer 重叠的相同声音?

Flash / Actionscript:如何使重叠的精灵不可见

多个声音相互重叠 <audio>