Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 关于actionscript 3中基本声音功能的一些帮助_Actionscript 3_Audio - Fatal编程技术网

Actionscript 3 关于actionscript 3中基本声音功能的一些帮助

Actionscript 3 关于actionscript 3中基本声音功能的一些帮助,actionscript-3,audio,Actionscript 3,Audio,我正在做一个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){

我正在做一个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++; 
}
我的更改跟踪功能如下所示:

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++; 
}
有人看到任何明显的错误吗??? 谢谢

正如Flash Gordon所说:“你实际上 重新定义局部变量时 重置其 财产。”

这条线看起来有点可疑

sc = music.play();
这不应该是:

var musicPlay = music.play();
sc = musicPlay;

我认为在创建新连接之前,应该尝试关闭声音连接(Sound.close())。另外,我会使用相同的声音对象加载新文件(Sound.load()),以避免可能的GC问题(除非需要在声音之间淡入).

在我看来,您缺少了将外部声音加载到新声音对象中的部分。您的示例似乎在重用相同的声音对象。应该是这样的:

var sound:Sound = new Sound();
var request:URLRequest = new URLRequest("path/to/your/sound");

sound.load(request);

sc = sound.play();
由于无法将另一个声音实例加载到现有声音实例中,因此需要使用local sound变量来创建新声音:

一旦对声音调用load() 对象,以后无法加载 将不同的声音文件转换为该声音 对象加载不同的声音 文件,创建一个新的声音对象


您可能需要使用字典来跟踪已加载的声音。因此,当调用此方法时,您将检查声音对象是否已在字典中注册,如果已注册,则播放该对象,而不是加载文件。

这些内容完全相同。在这两种情况下,sc都被分配了music.play()的结果,这是一个SoundChannel引用。