2009-12-21 5 views
0

J'essaie de créer une application AIR mini media player qui permet aux utilisateurs de visionner des vidéos, des images et des chansons chargées via un fichier XML externe, tout en permettant à l'utilisateur de parcourir leur propres fichiers et lire tous les médias à travers le spectateur. En ce moment, je peux faire en sorte que les vidéos s'arrêtent quand on clique sur le pouce d'une image, mais je n'arrive pas à arrêter le son quand une nouvelle vidéo démarre. En fait, je ne peux même pas changer de chansons. Une fois que vous cliquez sur une chanson, elle joue et ne s'arrête pas, et elle ne peut pas être remplacée par une autre chanson.Problème avec plusieurs chansons dans Flex - AS3

Voici le code que je utilise:


// 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; 

        } 

       } 

J'ai essayé de créer un booléen pour contrôler quand la musique joue, pensant qu'il serait capable de gérer le fait que la chanson devrait changer, mais je avait tort sur celui-là.

Des idées?

Merci.

EDIT:

Je dois aussi mentionner l'erreur que je reçois avec le code actuel:

Erreur: Erreur # 2037: Les fonctions appelées dans l'ordre incorrect ou appel antérieur a échoué. à flash.media::Sound/_load() à flash.media::Sound/load() à brightEyes_mediaPlayer/getWebDetails() [C: \ Utilisateurs \ Graham \ Documents \ y02s01 \ AVIS317 - FLEX \ brightEyes \ src \ brightEyes_mediaPlayer.mxml: 122] à brightEyes_mediaPlayer/___ brightEyes_mediaPlayer_Image3_click() [C: \ Users \ Graham \ Documents \ y02s01 \ AVIS317 - FLEX \ Brighteyes \ src \ brightEyes_mediaPlayer.mxml: 187]

Vive

Répondre

0

Vous sais, si c'était une question liée à Linux, vous obtiendriez une RTFM comme réponse. Mais je vais juste vous rediriger vers this petit morceau d'information importante. Et puis donnez-vous le conseil suivant: regardez toujours dans la référence de langue d'abord quand vous rencontrez des problèmes.