我需要实现一个多轨播放器。用户可以上传多个曲目并混合(一起播放)。我的问题是允许用户定义每个轨道的确切起始位置以允许它们之间的同步,如下所示:
第1道:从[x]秒开始
第2轨道:从[y]秒开始
播放/停止
用户可以在其中设置x和y。我试图用AS2(使用netstream和setInterval)和AS3(使用netstream或声音和计时器)来实现它。只有当我设置相同的x和y时,两个音轨才会同时播放。
答案 0 :(得分:1)
假设您有一个具有某种内部时钟的时间线“引擎”。在时钟的每个“滴答”中,您将检查一些包含Track对象的数组或向量,并查看它是否包含一个从时间线开头起nTime的startTime对象。或者也许更有效地制作TrackObjs Vector中存在的起始时间向量并检查,然后如果找到一个,则运行TrackObjs向量并获取当时需要启动的所有音频。
这里的滴答可能是秒,10秒,毫秒,等等。 请参阅http://as3.casalib.org/docs/ org.casalib.time类以获取基于帧的计时
class Track() { var startTime:int; var trackName:String; var fileName:String; }
对于多个混合声音的实际播放,有各种各样的库可能会为您完成大部分繁重的工作。
http://www.gaiaflashframework.com/wiki/index.php?title=Sound_Groups
这可能有一些有用的代码,但您可能需要将它与Gaia框架分离。
也许更好:
Matt Przybylski的SoundManager课程http://www.reintroducing.com
Guttershark SoundManager课程http://codeendeavor.com/guttershark
这些也可能对动态声音产生感兴趣:
http://code.google.com/p/benstucki/
“Flaudio是ActionScript 3的动态运行时音频生成和处理库”
http://code.google.com/p/popforge/
“Popforge AS3音频库允许您使用自己的样本创建有效的flash.media.Sound对象。这为使用当前Adobe Flash Player 9的声音设计开辟了新视角。您可以创建任何合成器,效果和任何样本播放器所提供的AudioBuffer类允许您创建无尽的音频播放。“