如何在 actionscript 3.0 中为音乐播放器创建 EASY 自定义搜索栏

Posted

技术标签:

【中文标题】如何在 actionscript 3.0 中为音乐播放器创建 EASY 自定义搜索栏【英文标题】:How to create a EASY custom seekbar for music player in actionscript 3.0 【发布时间】:2017-09-15 13:54:00 【问题描述】:

连接旋律和创建实例形式的代码..

import flash.events.Event;
var mySound:Sound = new MyFavSong();
var myChannel:SoundChannel = new SoundChannel();
var lastPosition:Number = 0; 
var myTransform = new SoundTransform();
myChannel = mySound.play();
myTransform.volume = 1; 
myChannel.soundTransform = myTransform; 
stop();

然后播放按钮、暂停、声音停止+音量 停止

 stop_btn.addEventListener(MouseEvent.CLICK, onClickStop);
    function onClickStop(e:MouseEvent):void
    myChannel.stop();
    lastPosition = 0;
    stop();
    

暂停

pause_btn.addEventListener(MouseEvent.CLICK, onClickPause);
function onClickPause(e:MouseEvent):void
lastPosition = myChannel.position;
myChannel.stop();
stop();

播放

 play_btn.addEventListener(MouseEvent.CLICK, onClickPlay);
    function onClickPlay(e:MouseEvent):void
    myChannel = mySound.play(lastPosition);
    myChannel.soundTransform = myTransform;
    play();
    

音量

up_btn.addEventListener(MouseEvent.CLICK, onClickUp);
function onClickUp(e:MouseEvent):void
myChannel.soundTransform = myTransform;
myTransform.volume = myTransform.volume + 1;

请帮帮我

【问题讨论】:

不要使用 play() 和 stop() 方法,因为它们会影响您的主时间线(或声明函数的影片剪辑),但不会影响声音。 【参考方案1】:

soundChannel 没有专门的进度事件,但您可以在每帧访问 SoundChannel.position 属性以获取当前声音位置(以毫秒为单位)。你可以通过 SoundChannel.position 的值除以 Sound.length 的值得到 seekbar 的比例。 见例子:

var mySound: Sound = new MyFavSong();
var myChannel: SoundChannel = mySound.play();
var lastPosition: Number = 0;
var myTransform = new SoundTransform();
myTransform.volume = 1;
myChannel.soundTransform = myTransform;
stop();

var totalWidth: Number = stage.stageWidth;
var barContainer: Sprite = new Sprite();
var progressBar: Shape = new Shape();
var blankBar: Shape = new Shape();
initBlankBar();
barContainer.addChild(blankBar);
barContainer.addChild(progressBar);
barContainer.addEventListener(MouseEvent.CLICK, seekSound);
progressBar.addEventListener(Event.ENTER_FRAME, updateSoundProgress);
addChild(barContainer);

function initBlankBar(): void 
    blankBar.graphics.beginFill(0xAAC7DB);
    blankBar.graphics.drawRect(0, 0, totalWidth, 20);
    blankBar.graphics.endFill();


function updateSoundProgress(e: Event): void 
    var w: Number = (myChannel.position / mySound.length) * totalWidth;
    progressBar.graphics.clear();
    progressBar.graphics.beginFill(0xFF0000);
    progressBar.graphics.drawRect(0, 0, w, 20);
    progressBar.graphics.endFill();


function seekSound(e: MouseEvent):void 
    lastPosition = (e.localX / totalWidth) * mySound.length;
    onClickPlay(null);


function onClickPlay(e: MouseEvent): void 
    myChannel.stop();
    myChannel = mySound.play(lastPosition, 0, myTransform);

【讨论】:

是的,这正是我需要的,非常感谢!!

以上是关于如何在 actionscript 3.0 中为音乐播放器创建 EASY 自定义搜索栏的主要内容,如果未能解决你的问题,请参考以下文章

在Adobe Animate ActionScript 3.0中循环

如何在 actionscript 3.0 中使用掩码?

如何在 Actionscript 3.0 中获取数组的所有排列?

如何在 Actionscript 3.0 中使用补间形状?

如何在 ActionScript 3.0 中写入文本文件?

在 ActionScript (3.0) 中干净地合并两个数组?