{ my_channel = my_sound.play(); // 音乐正式开始播放 //添加事件侦听器, 功能: 循环执行 timerHandler 函数(但这里还没有开始循环执行) myTimer.addEventListener(TimerEvent.TIMER, timerHandler); myTimer.start(); // 这里才开始循环执行 timerHandler 函数 } //停止音乐: private function stopSound():void{ //停止对函数 timerHandler 的循环执行, 因为音乐开始时 myTimer 对象就对函数 timerHandler 循环执行了 myTimer.stop(); my_channel.stop(); // 正式停止音乐 progress_hs.value = 0; // 使那"播放进度"条的值回到0,即回到最左端 } //定义被 myTimer 循环执行的函数 timerHandler private function timerHandler(event:TimerEvent):void{ //功能: 显示音乐的播放进度, 进度条会随着音乐的继续播放而向右缓缓移动;
//把这个公式翻译为中文: 播放进度条的值=当前音乐播放时间/音乐的总时间 progress_hs.value = my_channel.position/my_sound.length; } //改变播放进度: 每当 "播放进度" 条被用户拉动过而使其值改变时,就执行以下函数 private function changeProgress():void{ //音乐停止且必须停止,是为了从新的播放时间点开始播放 //(感觉这里麻烦了点, 如果有更好的方法,恳请高手指点!请联系我: // www.Y-boy.cn 或 www.RiaHome.cn ,谢谢!) my_channel.stop(); //使音乐从新的时间点开始播放,新的时间点是小括号内的值, //即:"播放进度"条的值*音乐的总时间, 为什么会这样呢? //因为 HSlider 控件(那条"播放进度")的长度在下面被定义为1, //使得"播放进度"条的值在闭区间[0,1]内, 所以只需再乘以音乐的总时间就行了 my_channel = my_sound.play(progress_hs.value*my_sound.length); } //改变音量: 每当 "音量大小" 控制条被用户拉动过而使其值改变时,就执行以下函数 private function changeVolume():void{ //把 my_channel.soundTransform 赋值给 my_transform var my_transform:SoundTransform = my_channel.soundTransform; my_transform.volume = volume_hs.value; // 把"音量大小"控制条当前值赋给 my_transform.volume my_channel.soundTransform = my_transform; // 给 my_channel.soundTransform 赋值 /* 这里的用法很特别, 像使用 AS2.0 里面的滤镜(Filters)那样, 先创建一个 "第三者", 对 "第三者" 进行操作, 最后才把 "第三者" 赋值给 "当事人" . AS2.0 里面的滤镜的 "第三者" 是数组, 这里的 "第三者" 是 my_transform . 这里不能跟 AS2.0 里面的滤镜相比, 只不过为 |