我正在制作一个MP3播放器,而且我在所有闪光灯上都是超级新手,所以有很多问题。目前我已经陷入了轨道变化的困境。我的变量声明如下所示:
var index:int = -1;
var music:Sound = new Sound(new URLRequest("moe2008-05-24d02t02_vbr.mp3"));
var sc:SoundChannel;
var isPlaying:Boolean = false;
我的更改跟踪功能如下所示:
function changeTrack(newTrack){
sc.stop();
isPlaying = false;
music = new Sound(new URLRequest(newTrack));
sc = music.play();
isPlaying = true;
index++;
}
有没有人看到任何明显的错误? 感谢
答案 0 :(得分:0)
我认为您应该在创建新连接之前尝试关闭Sound连接(Sound.close())。另外,我会使用相同的Sound对象加载新文件(Sound.load())以避免可能的GC问题(除非您需要在声音之间淡入)...
答案 1 :(得分:0)
在我看来,你错过了实际将外部声音加载到新声音对象中的部分。您的示例似乎是重用相同的声音对象。应该是这样的:
var sound:Sound = new Sound();
var request:URLRequest = new URLRequest("path/to/your/sound");
sound.load(request);
sc = sound.play();
您需要本地声音变量来创建新声音,因为另一个声音实例无法加载到现有声音实例中:
在声音上调用load() 对象,你以后加载一个 不同的声音文件进入那个声音 宾语。加载不同的声音 文件,创建一个新的Sound对象。
您可能希望使用词典来跟踪已加载的声音。因此,当调用此方法时,您将检查声音对象是否已在字典中注册,如果是,则播放该对象而不是加载文件。
答案 2 :(得分:-2)
正如Flash Gordon所说:“你实际上是 当你重新定义局部变量 重置它 属性“。http://www.actionscript.org/forums/archive/index.php3/t-181659.html
这条线看起来有点可疑。
sc = music.play();
不应该是:
var musicPlay = music.play();
sc = musicPlay;