Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 06-01-2012, 18:50   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2012
Beiträge: 8
Musik Player Problem(Sound wird mehrfach abgespielt)

Hallo liebe Flash Community,

ich sitze gerade daran, einen Musik Player zu basteln. Um folgende Funktionen geht es: Lied zurück(Button), Lied vor(Button) und Play/Pause(Button).

Ich habe nur 1 großes Problem: Wenn man ein Lied abspielt und anschließend stoppt und dann zum nächsten Lied wechselt(Dieses Lied fängt automatisch an zu spielen) und dann den Play/Pause Button wieder drückt, dann stoppt das Lied nicht, sondern man hört das Lied 2x.

Ich bin mit meinem Latein am Ende, ich hab schon versucht überall den SoundChannel zu stoppen, neues Soundobjekt zu erstellen es hat nichts geholfen.

Google konnte mir leider auch nicht weiter helfen. Würde mich freuen wenn sich jemand meinem Problem annimmt .

Hier der Code:

Code:
package  {
	import flash.display.MovieClip;
	import flash.events.IOErrorEvent;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.net.URLRequest;
	import flash.display.Loader;
	import flash.utils.describeType;
	import flash.net.URLLoader;
	import flash.text.TextField;
	import flash.media.Sound;
	import flash.media.SoundChannel;
	
	public class Player extends MovieClip {
		
		var playlistLoader:URLLoader;
		var songs:XMLList;
		var songsTotal:Number;
		var tracknameLabel:TextField;
		var artistLabel:TextField;
		var sound:Sound;
		var channel:SoundChannel;
		var currentSong:Number;
		
		var btnForward:BtnForward;
		var btnRewind:BtnRewind;
		var btnPlay:BtnPlay;
		var btnStop:BtnStop;
		var btnSound:BtnSound;
		var btnVolumeline: BtnVolumeline;
		var volumeline:Volumeline;
		
		var pausedSong:Boolean;
		var songPosition:Number;

		public function Player() {
			
			playlistLoader = new URLLoader();
			playlistLoader.load(new URLRequest("../media/xml/playlist.xml"));
			playlistLoader.addEventListener(Event.COMPLETE, processXML);
			
			artistLabel = new TextField();
			tracknameLabel = new TextField();
			
			artistLabel.y = 100;
			artistLabel.width = 500;
			tracknameLabel.width = 500;
			tracknameLabel.y = 200;
			
			channel = new SoundChannel();
			pausedSong = false;
			currentSong = 0;
			songPosition = 0;
			
			btnForward = new BtnForward();
			btnForward.addEventListener(MouseEvent.CLICK, nextSong);
			btnForward.x = 150;
			btnForward.y = 30;
			btnRewind = new BtnRewind();
			btnRewind.addEventListener(MouseEvent.CLICK, prevSong);
			btnRewind.x = 40;
			btnRewind.y = 30;
			btnPlay = new BtnPlay();
			btnPlay.addEventListener(MouseEvent.CLICK, playPauseSong);
			btnPlay.y = 45;
			btnPlay.x = 110;
			btnStop = new BtnStop();
			btnStop.y = 30;
			btnSound = new BtnSound();
			btnSound.x = 190;
			btnSound.y = 30;
			btnVolumeline = new BtnVolumeline();
			btnVolumeline.x = 230;
			btnVolumeline.y = 33;
			volumeline = new Volumeline();
			volumeline.x = 235;
			volumeline.y = 43;
			
			addChild(btnForward);
			addChild(btnRewind);
			addChild(btnPlay);
			addChild(btnStop);
			addChild(btnSound);
			addChild(volumeline);
			addChild(btnVolumeline);
			
			addChild(artistLabel);
			addChild(tracknameLabel);
		
		}
		
		public function processXML(evt:Event):void{
			var playlist:XML = new XML(evt.target.data);
			
			songs = playlist.song;
			songsTotal = songs.length();
			playlistLoader.removeEventListener(Event.COMPLETE, processXML);
			playlistLoader = null;
		}
		
		public function playSelectedSong(songNumber:Number):void{
			var track = songs[songNumber].@trackname;
			var artist = songs[songNumber].@artist;
			var url = songs[songNumber].@url;
			
			this.tracknameLabel.text = track;
			this.artistLabel.text = artist;
			
			if (channel){
				channel.stop();
				channel.removeEventListener(Event.SOUND_COMPLETE, playPauseSong);
			}
			
			sound = new Sound();
			sound.load(new URLRequest(url));
			channel = sound.play();
			channel.addEventListener(Event.SOUND_COMPLETE, playPauseSong);
				
		}
		
		function nextSong(e:MouseEvent):void{
			currentSong++;
			if(currentSong >= songsTotal)
				currentSong = 0;
			
			playSelectedSong(currentSong);
		}
		
		function prevSong(e:MouseEvent):void{
			currentSong--;
			if(currentSong < 0)
				currentSong = songsTotal-1;
			
			playSelectedSong(currentSong);
			
		}
		
		function playPauseSong(evt:MouseEvent):void{
			
			
			if(!pausedSong){
				if(channel.position > 0){
					channel = sound.play(songPosition);
				}else{
					playSelectedSong(currentSong);
				}
			}else{
				
				songPosition = channel.position;
				channel.stop();
			}
			
			pausedSong = !pausedSong;
			
		}

		
	}
	
	
	
}

Geändert von norora (06-01-2012 um 19:00 Uhr)
norora ist offline   Mit Zitat antworten
Alt 06-01-2012, 19:22   #2 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Hallo in Willkommen im Forum!

Hast Du mal versucht, erst den Listener zu entfernen und dann erst den channel zu stoppen?
Wenn ich das richtig sehe, startet der Listener z.Z. den Sound ja neu, sobald er gestoppt wird?!

P.S.: Ich hab Deine Frage mal in den AS3 -Bereich verschoben.
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist offline   Mit Zitat antworten
Alt 06-01-2012, 21:08   #3 (permalink)
Neuer User
 
Registriert seit: Jan 2012
Beiträge: 8
Danke für deine Antwort und dein Verschieben, da ich Flash mit AS assoziiere,hab ich gar nicht drüber nachgedacht, dass es noch ein AS Forum geben könnte.

Wo genau soll ich den Listener entfernen?
Ich hab einfach mal Versucht überall den Listener zu entfernen, es hatte keine Wirkung gezeigt, das Lied wird leider immer noch 2x abgespielt. Komischerweise nur, wenn der Song pausiert ist, ich zum nächsten Track wechsel und wieder auf den Pause/Play Button klicke...ich bin echt am verzweifeln.
norora ist offline   Mit Zitat antworten
Alt 06-01-2012, 21:11   #4 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Du entfernst den Listener doch schon. Du musst nur die beiden Anweisungen vertauschen.
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist offline   Mit Zitat antworten
Alt 06-01-2012, 21:30   #5 (permalink)
Neuer User
 
Registriert seit: Jan 2012
Beiträge: 8
Du meinst
Code:
if (channel){
				channel.removeEventListener(Event.SOUND_COMPLETE, playPauseSong);
				channel.stop();
				
			}
zu:
Code:
if (channel){

				channel.stop();
				channel.removeEventListener(Event.SOUND_COMPLETE, playPauseSong);
				
			}
oder?
Ich hatte zuerst gedacht, dass du das meinst, aber das hat nicht funktioniert.

Geändert von norora (06-01-2012 um 21:31 Uhr)
norora ist offline   Mit Zitat antworten
Alt 06-01-2012, 21:43   #6 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Andersrum.

Wenn's dann immer noch nicht funktioniert, muss ich mir morgen nochmal genau Deinen Code ansehn.
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist offline   Mit Zitat antworten
Alt 06-01-2012, 23:43   #7 (permalink)
Neuer User
 
Registriert seit: Jan 2012
Beiträge: 8
ach sry, siehste ich hatte die Änderung schon drin. Nein das Funktioniert leider nicht. Wenn du willst, kann ich dir die swf auch mal zeigen. Dann kannste den Bug in Aktion sehen.Ich dank dir vielmals für deine Mühe, ich weiß das zu schätzen

*edit*:
Hat sich erledigt, du brauchst es dir nicht mehr anschauen, ich hab den Fehler gefunden .

in den Methoden nextSong und prevSong, habe ich nach songPosition folgendes eingefügt:
Code:
channel.stop();
pausedSong = true;
und schon funktioniert es

Geändert von norora (07-01-2012 um 01:19 Uhr)
norora ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Flash 8] MP3 Player - Next Sound Wird Nicht Abgespielt palpalo Flash Einsteiger 19 15-08-2009 18:05
verhindern, dass ein sound mehrfach hintereinander abgespielt wird ? agm65 Flash Einsteiger 2 07-08-2007 12:16
Musik wird sehr langsam abgespielt Coldfist Flash MX 2004 5 25-01-2005 21:56
Musik aus nachträglich geledenem Film wird nicht abgespielt ScopeOne ActionScript 1 1 26-12-2001 10:32
attchSound -> Sound wird einfach mehrfach wiedergegeben? shck Flash 4 und Flash 5 3 10-11-2001 09:01


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele