Flex - AS3中的多首歌曲出现问题

时间:2009-12-21 04:08:44

标签: xml flex actionscript-3 audio soundchannel

我正在尝试创建一个迷你媒体播放器AIR应用程序,允许用户查看通过外部XML文件加载的视频,图像和歌曲,同时还允许用户浏览自己的文件并通过观众。目前,我可以在点击图像拇指时让视频停止播放,但是当新视频开始时我无法停止播放任何声音。事实上,我甚至无法改变歌曲。一旦你点击一首歌曲,它就会播放并且不会停止,并且它不能被另一首歌曲取代。

以下是我正在使用的代码:


 // for audio
            public var _channel:SoundChannel = new SoundChannel();
            public var _sound:Sound = new Sound();



            public function getDetails():void{
                    var mySelectedItem:File = tree.selectedItem as File;

                    var type:String;
                    type = mySelectedItem.url.substr(mySelectedItem.url.lastIndexOf("."))

                    switch (type)
                    {
                        case ".mp3":
                            _sound.load(new URLRequest(mySelectedItem.url));
                            _channel = _sound.play();
                            if (mainVideo.source == null){
                                // do nothing
                            } else {
                                mainVideo.pause();
                            }
                        break;

                        case ".jpg":
                        mainImage.source = mySelectedItem.url;
                        mainVideo.visible = false;
                        mainImage.visible = true;
                            if (mainVideo.source == null){
                                // do nothing
                            } else {
                                mainVideo.pause();
                            }
                        break;

                        case ".png":
                        mainImage.source = mySelectedItem.url;
                        mainVideo.visible = false;
                        mainImage.visible = true;
                        if (mainVideo.source == null){
                                // do nothing
                            } else {
                                mainVideo.pause();
                            }
                        break;

                        case ".flv":
                        mainVideo.source = mySelectedItem.url;
                        mainImage.visible = false;
                        mainVideo.visible = true;
                        mainVideo.play();
                        _channel.stop();
                        break;

                        case ".avi":
                        mainVideo.source = mySelectedItem.url;
                        mainImage.visible = false;
                        mainVideo.visible = true;
                        mainVideo.play();
                        _channel.stop();
                        break;

                        case ".mov":
                        mainVideo.source = mySelectedItem.url;
                        mainImage.visible = false;
                        mainVideo.visible = true;
                        mainVideo.play();
                        _channel.stop();
                        break;
                    }
                }

                public function getWebDetails(e:Event):void{
                    switch (e.currentTarget.getRepeaterItem().type as String)

                    {
                        //mp3s
                        case "song":
                        var isPlaying:Boolean;
                        isPlaying = false;
                        if (!isPlaying){
                            _sound.load(new URLRequest(e.currentTarget.getRepeaterItem().url));
                            _channel = _sound.play();
                            isPlaying = true;
                        } else if (isPlaying == true) {
                            _channel.stop();
                            isPlaying = false;
                        }
                        if (mainVideo.source == null){
                            // do nothing
                        } else {
                            mainVideo.pause();
                            mainVideo.visible = false;
                            mainImage.visible = true;
                        }
                        break;

                        //images
                        case "image":
                        mainImage.source = e.currentTarget.getRepeaterItem().url;
                        mainVideo.visible = false;
                        mainImage.visible = true;
                        if (mainVideo.source == null){
                            // do nothing
                        } else {
                            mainVideo.stop();
                        }
                        break;

                        case "video":
                        mainVideo.source = e.currentTarget.getRepeaterItem().url;
                        mainImage.visible = false;
                        mainVideo.visible = true;
                        mainVideo.play();
                        break;

                    }

                }

我尝试创建一个布尔值来控制播放音乐的时间,并确定它能够处理歌曲应该改变的事实,但我错了。

有什么想法吗?

感谢。

编辑:

我还应该提一下我使用当前代码得到的错误:

错误:错误#2037:以错误顺序调用的函数或早先的调用未成功。     在flash.media::Sound/_load()     在flash.media::Sound/load()     at brightEyes_mediaPlayer / getWebDetails()[C:\ Users \ Graham \ Documents \ y02s01 \ AVIS317 - FLEX \ brightEyes \ src \ brightEyes_mediaPlayer.mxml:122]     at brightEyes_mediaPlayer / ___ brightEyes_mediaPlayer_Image3_click()[C:\ Users \ Graham \ Documents \ y02s01 \ AVIS317 - FLEX \ brightEyes \ src \ brightEyes_mediaPlayer.mxml:187]

干杯

1 个答案:

答案 0 :(得分:0)

你知道,如果这是一个与linux相关的问题,那你就得到一个RTFM作为答案。但相反,我只会将您重定向到this一小部分重要信息。然后给出以下建议:当遇到问题时,请先查看语言参考。