Flash流媒体音频问题:仅在帧更改时音频播放多次
好吧,那么,事情是这样的:我正在做一个智力竞赛游戏,我决定给它放一个配乐。这是一个单一的音频文件,我上传到我的自定义域,并通过代码流。我还添加了播放/暂停按钮,以便播放器可以播放和暂停音乐。音乐自动播放在第1帧,我的游戏的“开始”按钮在那里。然而,如果玩家回答了一个错误的问题,他会回到第一帧。问题是音乐的另一个“实例”开始播放,导致两个音乐同时播放。如果他再次答错,将有三个音乐播放,以此类推。。。。我需要某种事件监听器来防止这种情况发生。。。正如你所看到的,我已经尝试使用布尔方法,但它不起作用。。。 以下是我用于流媒体的代码:Flash流媒体音频问题:仅在帧更改时音频播放多次,flash,audio,streaming,playback,overlapping,Flash,Audio,Streaming,Playback,Overlapping,好吧,那么,事情是这样的:我正在做一个智力竞赛游戏,我决定给它放一个配乐。这是一个单一的音频文件,我上传到我的自定义域,并通过代码流。我还添加了播放/暂停按钮,以便播放器可以播放和暂停音乐。音乐自动播放在第1帧,我的游戏的“开始”按钮在那里。然而,如果玩家回答了一个错误的问题,他会回到第一帧。问题是音乐的另一个“实例”开始播放,导致两个音乐同时播放。如果他再次答错,将有三个音乐播放,以此类推。。。。我需要某种事件监听器来防止这种情况发生。。。正如你所看到的,我已经尝试使用布尔方法,但它不起作用。
var mySound:Sound = new Sound();
var myChannel:SoundChannel = new SoundChannel();
var lastPosition:Number = 0;// pause button
mySound.load(new URLRequest("http://trollfacequiz.16mb.com/MusicFiles/Goat%20Songs.mp3"));
var soundIsPlaying:Boolean = false;
//mySound.play();
myChannel = mySound.play();
btn_mute.pause_btn.addEventListener(MouseEvent.CLICK, onClickPause);
function onClickPause(e:MouseEvent):void
{
lastPosition = myChannel.position;
myChannel.stop();
soundIsPlaying = false;
}
btn_mute.play_btn.addEventListener(MouseEvent.CLICK, onClickPlay);
function onClickPlay(e:MouseEvent):void
{
if (soundIsPlaying == false)
{
myChannel = mySound.play(lastPosition);
soundIsPlaying = true;
}
}
btn_mute是包含播放和暂停按钮的电影剪辑符号。
btn\U pause是暂停按钮。
btn_play显然是播放按钮。
暂停按钮位于播放按钮的顶部,因此当它不可见时,它“变成”播放按钮…我认为主要问题在于代码结构和将代码放入帧中,解决问题的最短方法是使用SoundMixer.stopAll()
谢谢,我只是有一个问题:为什么soundMixer.stopAll不能“重置”声音?因为如果输入帧,声音混合器会停止所有SOND,然后myChannel=mySound.play()播放它,理论上会重置声音…你的意思是在回答错误的情况下,声音会从最后一个位置继续播放??也许它可以帮助我的声音。播放(0);我想你搞错了,你的代码运行得很好,我只是想知道为什么soundMixer.stopAll没有重置声音,因为我认为它重置了…不,没有。当你回到这个帧时,它只是停止了所有以前的声音。你的代码会再次启动新的声音。您以前的代码不会停止以前的声音对象,因此您有重复的声音。
var mySound:Sound = new Sound();
var myChannel:SoundChannel = new SoundChannel();
var lastPosition:Number = 0;// pause button
mySound.load(new URLRequest("http://trollfacequiz.16mb.com/MusicFiles/Goat%20Songs.mp3"));
var soundIsPlaying:Boolean = false;
//mySound.play();
SoundMixer.stopAll();
myChannel = mySound.play();
btn_mute.pause_btn.addEventListener(MouseEvent.CLICK, onClickPause);
function onClickPause(e:MouseEvent):void
{
lastPosition = myChannel.position;
myChannel.stop();
soundIsPlaying = false;
}
btn_mute.play_btn.addEventListener(MouseEvent.CLICK, onClickPlay);
function onClickPlay(e:MouseEvent):void
{
if (soundIsPlaying == false)
{
myChannel = mySound.play(lastPosition);
soundIsPlaying = true;
}
}