var channel:SoundChannel;
channel = snd.play();
addEventListener(Event.ENTER_FRAME, onEnterFrame);
snd.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
function onEnterFrame(event:Event):void
{
var estimatedLength:int =
Math.ceil(snd.length / (snd.bytesLoaded / snd.bytesTotal));
var playbackPercent:uint =
Math.round(100 * (channel.position / estimatedLength));
trace("Sound playback is " + playbackPercent + "% complete.");
}
function onPlaybackComplete(event:Event)
{
trace("The sound has finished playing.");
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
}
在开始加载声音数据后,调用方法snd.play()并把结果保存在类型为SoundChannel,名子为channel的变量中. 然后为主程序添加了Event.ENTER_FRAME事件的监听器,为SoundChannel对象的Event.SOUND_COMPLETE事件也添加了监听器.
在动画中每到达一个新帧的时候,onEnterFrame()方法就会被调用.onEnterFrame()根据已经加载的数据估算声音的总长度,然后显示当前播放的百分数.
当整个声音播放完后,会执行onPlaybackComplete()方法,移除Event.ENTER_FRAME事件的监听器,因为播放完后就不需要在报告播放进度了.
Event.ENTER_FRAME事件每秒会发送好几次.在某些情况下,你可能不想发送的这么频繁.那么,你就可以使用flash.util.Timer类设置自己的时间机制.
停止流声音
流声音(指的是在完全加载之前就播放的声音)在播放过程中有一个特点需要注意.当你的程序调用SoundChannel.stop()方法的时候,声音会停止一帧,而在下一帧它会从开始的地方重新开始播放. 之所以发生这种情况,是因为声音仍然在加载中.要停止加载和播放,使用Sound.close()方法.
解决声音以数据流形式放到时间轴上导出后音质变差的问题
[关键字]Flash 数据流 声音 音质变差 立体声转换成单声道
[问题描述]:将声音放到时间轴上,选择数据流的同步方式,在Flash中听声音没有发现问题,但是导出后音质变的奇差,基本上不能用,虽然将声音同步方式选择开始或者事件可以解决这个问题,但是有时是非要用数据流同步方式不可的(因为要用播放暂停控制,因为有进度条控制)。
[解决办法]:这是由于在导出时,Flash会以MP3的形式压缩声音,一般会把声音压缩成比特率低于22Kbps的声音,同时将立体声转换成了单声道声音,很多声音都是因为将立体声转换成单声道后音质变差的。因此我们要去掉次选项。
如果Flash中有很多声音,那么我们要更改发布设置。
1、打开发布设置,点开”Flash”选项卡,找到音频流设置的项,如下图
2、点开设置按钮,
3、将比特率选择24kbps(或者其他的高于22kbps的项,因为只有这样才能更改”将立体声转换成单声道”)










