重叠声音 Actionscript 3/AIR

Posted

技术标签:

【中文标题】重叠声音 Actionscript 3/AIR【英文标题】:Overlapping sounds Actionscript 3/AIR 【发布时间】:2017-07-02 06:57:10 【问题描述】:

我在第 1 帧(主页)中有一个播放(恢复)/暂停按钮。但是,当用户浏览应用程序并决定通过按主页按钮返回主页时,声音会重叠。而当用户按下其他按钮时,它开始无休止地重叠。谢谢!这是使用 Adob​​e AIR 部署在 android 设备中的 Actionscript 3 Flash 应用程序。这是我的代码:

import flash.net.URLRequest;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.ui.Mouse;
import flash.events.MouseEvent;

var played:Boolean = false;
var soundFile:URLRequest = new URLRequest("music.mp3");
var mySound:Sound = new Sound;

if(played== false)
            played= true;
mySound.load(soundFile);
var myChannel:SoundChannel = new SoundChannel;
myChannel = mySound.play(0,999);

pause_btn.addEventListener(MouseEvent.CLICK,pauseSound)
function pauseSound(event:MouseEvent):void 
    
        var position = myChannel.position;
        myChannel.stop();
        play_btn.addEventListener(MouseEvent.CLICK,resumeSound);
        

function resumeSound(event:MouseEvent):void
    
        myChannel = mySound.play(myChannel.position);
    

【问题讨论】:

不要在时间线中使用初始化代码。除非myChannel 中存在有效的SoundChannel,否则不要启动声音,这需要更多检查。此外,positionpauseSound() 中的本地函数,请移至全局,否则您将丢失数据并且无法恢复声音。 @Vesper 谢谢!我是Flash初学者,请多多包涵。你能给我你的更正代码版本吗?谢谢! 【参考方案1】:

这就是您通过在框架中而不是在类中编码所获得的。

解决方案 A:从第 1 帧脚本中创建一个类,使其仅执行一次(在创建主时间线时)。

解决方案 B:在创建副本之前进行检查:

var played:Boolean;

var mySound:Sound;
var myChannel:SoundChannel

// That will be executed only once, because the
// next time this variable will be initialized.
if (mySound == null)

    played = true;

    var soundFile:URLRequest = new URLRequest("music.mp3");

    mySound = new Sound;
    mySound.load(soundFile);
    myChannel = new SoundChannel;
    myChannel = mySound.play(0,999);

    pause_btn.addEventListener(MouseEvent.CLICK,pauseSound);

【讨论】:

谢谢@Organis!请问,play_btn 的恢复能力应该放在哪里? 在第一帧定义那个函数,只需要确保订阅一次。 @niagrafallsxxx 检查this tutorial。请参阅标题为 Stopping a sound 后跟 Pausing a sound 的部分。最好制作单独的函数来处理音频暂停和恢复。使用布尔值切换(真/假暂停/恢复)... @VC.One,谢谢!我尝试使用代码(代码在第 1 帧中)。当我在第 2 帧并决定返回第 1 帧时,声音重叠。对此有什么可能的解决方案? @niagrafallsxxx 看看我上面的代码。它正是这样做的。

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

ActionScript 3.0 声音不工作

使用 Actionscript 3.0 淡入声音

Actionscript 2.0在keydown上应用声音

actionscript3 计算器声音播放

ActionScript 3 播放声音基础知识

ActionScript 3 新的外部声音