重叠声音 Actionscript 3/AIR
Posted
技术标签:
【中文标题】重叠声音 Actionscript 3/AIR【英文标题】:Overlapping sounds Actionscript 3/AIR 【发布时间】:2017-07-02 06:57:10 【问题描述】:我在第 1 帧(主页)中有一个播放(恢复)/暂停按钮。但是,当用户浏览应用程序并决定通过按主页按钮返回主页时,声音会重叠。而当用户按下其他按钮时,它开始无休止地重叠。谢谢!这是使用 Adobe 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
,否则不要启动声音,这需要更多检查。此外,position
是 pauseSound()
中的本地函数,请移至全局,否则您将丢失数据并且无法恢复声音。
@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的主要内容,如果未能解决你的问题,请参考以下文章