gpt4 book ai didi

flash - ActionScript 3.0加载和播放多种声音

转载 作者:行者123 更新时间:2023-12-02 22:40:44 24 4
gpt4 key购买 nike

我编写了一个loadSound函数,用于处理加载和播放多种声音。当我在另一个关键帧(即未写入函数的帧)中调用此函数时,此函数可以正常工作。但是,当我在编写该函数的同一帧上调用该函数时,声音会变得混乱。例如,该函数是在第一个关键帧中编写的。如果我在第二,第三和第四关键帧(具有不同的声音)中调用此函数,则可以正常工作。但是,当我在第一个,第二个和第三个关键帧中调用相同的函数时,一切都搞砸了。
在第一个关键帧中,声音正常播放。当我移至第二关键帧时,将播放第二声音。但是,当我移回到第一个关键帧时,第二个和第一个关键帧的声音都会混合在一起。当我在第二,第三和第四关键帧中调用函数时,不会发生这种情况。

下面是我的功能:

import flash.events.Event;
import flash.media.Sound;
import flash.net.URLRequest;
import flash.events.ProgressEvent;
import flash.events.IOErrorEvent;
import flash.errors.IOError;
import flash.media.SoundChannel;
import flash.media.SoundMixer;
import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.display.MovieClip;
import flash.media.SoundTransform;

stop();

var s:Sound;
var localSound:SoundChannel = new SoundChannel();
var req:URLRequest;
var loadedPct:uint;
var currentFrameArr:Array = ["One","Two","Three"];
var urlArr:Array = ["sound/m01_t01_s01.mp3","sound/m01_t01_s02.mp3","sound/page10_11.mp3"];



function loadSnd(currentFrm:String)
{
s = new Sound();
s.addEventListener(ProgressEvent.PROGRESS, onSoundProgress);
s.addEventListener(Event.COMPLETE, onSoundLoaded);
s.addEventListener(IOErrorEvent.IO_ERROR, onIOError);

localSound.stop();

for (var i:uint=0; i<currentFrameArr.length; i++)
{
if (currentFrm == currentFrameArr[i])
{
req = new URLRequest(urlArr[i]);
break;
}
}
s.load(req);
}

function onSoundProgress(evt:ProgressEvent):void
{
loadedPct = Math.round(100 * (evt.bytesLoaded / evt.bytesTotal));
trace("The sound is " + loadedPct + " % loaded");
}

function onSoundLoaded(evt:Event):void
{
localSound = s.play();
}

function onIOError(evt:IOErrorEvent):void
{
trace("The sound could not be loaded: " + evt.text);
}

在不同的框架中调用此函数:
loadSnd("One");
loadSnd("Two");

等等

如果我在loadSnd中传递参数“One”,它将在urlArray中播放第一个元素,在“Two”中播放第二个元素,依此类推。

但是,如果在我的按钮中包含soundChannel.stop(),则可以正常工作。尽管我希望将其嵌入到函数本身中,因为我打算编写一个类文件以包含在我的项目中。下面的代码(如果包含)可以正常工作。
nextBtn.addEventListener(MouseEvent.CLICK, onNextClk);
function onNextClk(evt:MouseEvent):void
{
localSound.stop();
this.nextFrame();
}


prevBtn.addEventListener(MouseEvent.CLICK, onPrevClk);
function onPrevClk(evt:MouseEvent):void
{
localSound.stop();
this.prevFrame();
}

我还在考虑如果在没有鼠标单击的情况下更改框架,例如动画结束并且新的关键帧开始,并且我想在该关键帧中包含其他声音文件,会发生什么情况。
如果soundChannel.stop()包含在函数本身中,则无论发生什么事件,无论是鼠标单击按钮还是动画结束,它都将停止前一个声音并播放一个新声音。

长时间以来我一直不遗余力,任何帮助将不胜感激。

最佳答案

Got the Solution. The SoundMixer.stopAll(); statement did the trick. The complete workable function is pasted below:

import flash.events.Event;
import flash.media.Sound;
import flash.net.URLRequest;
import flash.events.ProgressEvent;
import flash.events.IOErrorEvent;
import flash.errors.IOError;
import flash.media.SoundChannel;
import flash.media.SoundMixer;
import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.display.MovieClip;
import flash.media.SoundTransform;

stop();

var s:Sound;
var localSound:SoundChannel = new SoundChannel();
var req:URLRequest;
var loadedPct:uint;
var currentFrameArr:Array = ["One","Two","Three"];
var urlArr:Array = ["sound/m01_t01_s01.mp3","sound/m01_t01_s02.mp3","sound/page10_11.mp3"];

function loadSnd(currentFrm:String)
{
s = new Sound();
s.addEventListener(ProgressEvent.PROGRESS, onSoundProgress);
s.addEventListener(Event.COMPLETE, onSoundLoaded);
s.addEventListener(IOErrorEvent.IO_ERROR, onIOError);

SoundMixer.stopAll();
localSound.stop();

for (var i:uint=0; i<currentFrameArr.length; i++)
{
if (currentFrm == currentFrameArr[i])
{
req = new URLRequest(urlArr[i]);
break;
}
}
s.load(req);
}

function onSoundProgress(evt:ProgressEvent):void
{
loadedPct = Math.round(100 * (evt.bytesLoaded / evt.bytesTotal));
trace("The sound is " + loadedPct + " % loaded");
}

function onSoundLoaded(evt:Event):void
{
localSound = s.play();
}

function onIOError(evt:IOErrorEvent):void
{
trace("The sound could not be loaded: " + evt.text);
}

Calling the function:

loadSnd("One");
loadSnd("Two"); etc

关于flash - ActionScript 3.0加载和播放多种声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23362258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com