Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 03-03-2006, 10:36   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 58
Sound Vorlauf Problem

Hallöchen,

da im Sound-Forum scheinbar niemand eine Problemlösung für mich hat, probier ich es hier ;-)

Ich habe einen Soundplayer gemacht, habe allerdings ein Problem mit dem Vorlaufbutton. Folgendes Szenario: Ich spiele einen Sound ab und halte
dabei meinen Vorlaufbutton solange gedrückt, bis der Sound vorbei ist.
Wenn ich danach wieder auf Play drücke, fängt der Sound nicht wieder
von vorne an zu spielen. Ich brauche also ein Skript das Folgendes
macht, habe aber keinen Schimmer wie das aussieht:

meinVorlaufbutton.onRelease = function() {
if (meinSoundistzuEndegespielt){
myMusic.isPlaying = false;
};

Denn durch meine Variable myMusic.isPlaying = false, fängt mein Sound erneut an zu spielen, wenn ich auf den Play-Button drücke.

Zur Orientierung ist hier mal mein gesamtes Playerskript, samt des Aufrufes der Playerfunktionen für einen Sound:

/////////////////////// Soundplayer

var myMusic = new Sound();
myMusic.start();
myMusic.restartSound = false;
myMusic.isPlaying = false;
myMusic.isStopped = true;
var REV = 0;
var FF = 0;
var myMusicPosition = 0;

myMusic.onSoundComplete = function() {
myMusic.isplaying = false;
myMusic.isStopped = true;
myMusic.restartSound = false;
}

play_btn.onPress = function() { /// Play
if (myMusic.isPlaying == false) {
if (myMusic.restartSound == true) {
myMusicPosition =_root.myMusic.position/1000;
myMusic.start(myMusicPosition);
myMusic.restartSound = false;
myMusic.isPlaying =true;
} else if (myMusic.isPlaying == false) {
myMusic.start();
myMusic.isPlaying = true;
myMusic.isStopped = false;}
}};

stop_btn.onPress = function() { /// Stop
myMusic.isStopped = true;
myMusic.isPlaying = false;
myMusic.restartSound = false;
myMusic.stop();
myMusicPosition = 0;
};

pause_btn.onPress = function() { /// Pause
myMusic.isPlaying = false;
myMusic.restartSound = true;
myMusicPosition = _root.myMusic.position/1000;
_root.myMusic.stop();
if (myMusic.isStopped == true) {
myMusicPosition = 0;
myMusic.restartSound = false;
}
};

revBtn.onPress = function() { /// Rücklauf
REV = 1;
myMusicPosition = _root.myMusic.position/1000;
};

revBtn.onRelease = function() {
REV = 0;
};

revBtn.onReleaseOutside = function() {
REV = 0;
};

FFBtn.onPress = function() { /// Vorlauf
FF = 1;
myMusicPosition = _root.myMusic.position/1000;
};

FFBtn.onRelease = function() {
FF = 0;
};

FFBtn.onReleaseOutside = function() {
FF = 0;
};

this.onEnterFrame = function() {
if (REV == 1 && myMusicPosition>0) {
_root.myMusic.stop();
myMusicPosition = myMusicPosition-.8;
_root.myMusic.start(myMusicPosition);
}

if (FF == 1 && myMusic.position<myMusic.duration) {
_root.myMusic.stop();
myMusicPosition = myMusicPosition+.8;
_root.myMusic.start(myMusicPosition);
}
};

/////////////////////////////// Track 1

ch8_tr1_btn.onPress = function() {
myMusic.stop();
myMusic.attachSound("bc");
myMusic.start();
trackMarker(73.5,161.3); //// für transparente Fläche hinter Button
myMusic.isPlaying = true;
myMusic.isStopped = false;
};

Vielen Dank!
saturnine ist offline   Mit Zitat antworten
Alt 04-03-2006, 12:48   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
"..da im Sound-Forum scheinbar niemand eine Problemlösung für mich hat.."

dann könnte es eventuell auch an der form deiner präsentation liegen?

das listing kann so kein mensch lesen. bitte einmal links unten auf vB_Code klicken!

und warum müssen wir eine fla nachbauen, nur um dein problem lösen zu können? bitte eine demo.fla hochladen. danke
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 05-03-2006, 10:12   #3 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 58
ok, hier die demo flash. es muß doch niemand eine .fla nachbauen, ich dachte nur, vielleicht sieht jemand sofort den fehler.

in der .fla fehlt allerdings der sound, damit die datei nicht zu groß wird zwecks upload. den müßte man noch einsetzen und bei Exportnamen ´test´benennen.

Vielen Dank!
Angehängte Dateien
Dateityp: zip demoplayer.zip (8,8 KB, 13x aufgerufen)
saturnine ist offline   Mit Zitat antworten
Alt 05-03-2006, 10:48   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
nee, ohne mal was probieren zu können ... wir sind doch keine superhirne ;-)
pack da mal eine null rein, dann geht's:
Code:
	} else if (myMusic.isPlaying == false) {
			myMusic.start(0); // <--
			myMusic.isPlaying = true;
			myMusic.isStopped = false;
	}
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 05-03-2006, 10:58   #5 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 58
habe das jetzt so gemacht und es funktioniert immer noch nicht ;-(
probier mal den vorlaufbutton erst zu releasen wenn der sound zu Ende vorgespult ist und dann drücke play ... es passiert gar nix (man muß erst
wieder stop drücken, ehe sich der song über play starten läßt).
saturnine ist offline   Mit Zitat antworten
Alt 05-03-2006, 12:15   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
".. man muß erst wieder stop drücken.."
davon bin ich ausgegangen, das man das machen muss ..

myMusic.onSoundComplete wird wohl nicht aufgerufen, wenn man mit >> über das ende geht.
Code:
this.onEnterFrame = function() {
	if (myMusicPosition) {
		this.speed = .8;
		// ende
		if (myMusicPosition*1000>myMusic.duration) {
			stop_btn.onPress();
			REV = 0;
			FF = 0;
			return;
		}
		// Rewind
		if (REV) {
			myMusic.stop();
			myMusicPosition -= this.speed;
			myMusic.start(myMusicPosition);
		}
		// Fast Forward 
		if (FF) {
			myMusic.stop();
			myMusicPosition += this.speed;
			myMusic.start(myMusicPosition);
		}
	}
};
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 05-03-2006, 15:41   #7 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
habe das ding mal entrümpelt und auf fordermann gebracht ;-)
"test" fehlt hier natürlich auch.
Angehängte Dateien
Dateityp: zip demoplayer.zip (8,8 KB, 10x aufgerufen)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 06-03-2006, 08:53   #8 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 58
Vielen Dank für die Mühe! Ich muß jetzt leider auf Arbeit, sonst würde ich es gleich ausprobieren. Meld mich heute abend nochmal. Nochmals danke!
saturnine ist offline   Mit Zitat antworten
Alt 06-03-2006, 09:13   #9 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 58
Hi,

ich hab mich eben nochmal schnell mit dem Player auseinandergesetzt (die Neugier ;-). Funzt gut, nur zwei kleine Sachen:

1.)Wenn Du den Play Button mehrmals drückt, fängt der Sound immer wieder erneut an und überlagert sich.

2.) Wenn Du einen Song stoppst, dann Pause drückst und dann Play, fängt der Sound nicht bei 0 an, sondern bei der letzten gemerkten Pausemarke.

Dein Skript ist mir sympathischer als meines. Ist schon erstaunlich mit wie viel weniger Skript man fast das genau selbe machen kann.
saturnine ist offline   Mit Zitat antworten
Alt 06-03-2006, 11:11   #10 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
es geht nicht um das kürzere, sondern um unnötiges zu entfernen. so sollte es z.b. besser sein ein onEnterFrame zu killen, als mit einem flag zu kennzeichnen, dass das onEnterFrame nichts tun soll.
und möglichst nichts auf _root legen. das sollte sich alles in einem objekt (classe) abspielen.
jetzt sollte alles gehen? einen kleinen trick habe ich benutzen (me_pos += 0.01, da man position nicht setzen kann.
Angehängte Dateien
Dateityp: zip demoplayer.zip (16,8 KB, 9x aufgerufen)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 06-03-2006, 17:30   #11 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 58
hey, vielen dank!

ich bin ein flash anfänger und fummel mich da autodidaktisch rein, deswegen sorry für so manch unverständnis meinerseits

mit deiner neuen variante sind die vorher genannten probleme wunderbar gelöst, doch leider tauchen jetzt wieder neue auf: der vor- bzw. rücklauf nach dem
man pause gedrückt hat funktioniert nicht mehr

bei meinem ursprungsskript ging das ständig so hin und her - hier problem weg, da ein neues - es ist verflixt. hast du eine idee, wie man das vor- bzw. rücklauf problem lösen kann?
saturnine ist offline   Mit Zitat antworten
Alt 06-03-2006, 21:17   #12 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
"..man pause gedrückt hat funktioniert nicht mehr.."
wenn man pausiert, dann wird da nichts bewegt. ist ja wie fahren mit angezogener handbremse ;-)

das problem ist ein fehlender setPosition- befehl. da start() das auch nicht macht -zumindestens nicht direkt- habe ich etwas nachgeholfen.
der stopp-button startet jetzt den sound bei 0 und stoppt ihn nach 100 millisekunden wieder. kürzere zeiten hatten nicht gelangt um die position auf null zu setzen. eventuell diese zeit noch etwas erhöhen. und das jetzt der start nicht bei null, sondern nach 0,1 sekunde beginnt.. naja ;-)

jetzt muss aber gut sein.
Code:
// ----- Soundplayer -----
this.createEmptyMovieClip("sound_mc", this.getNextHighestDepth());
this.sound_mc.fInit = function(sound_id, _btns) {
	with (this) {
		this.me = this;
		this.stopp_btn = _btns[0];
		this.start_btn = _btns[1];
		this.rever_btn = _btns[2];
		this.forws_btn = _btns[3];
		this.pause_btn = _btns[4];
		//
		stopp_btn.onPress = function() {
			delete _sound.onSoundComplete;
			_ff = _pos=0;
			_sound.stop();
			_sound.start(0);
			_sI = setInterval(function (me) {
				clearInterval(me._sI);
				me._sound.stop();
			}, 100, me);
		};
		pause_btn.onPress = function() {
			_ff=0, _pos=_sound.position;
			_sound.stop();
		};
		start_btn.onPress = function() {
			_sound.stop();
			_sound.start(_pos/1000);
			_sound.onSoundComplete = stopp_btn.onPress;
		};
		rever_btn.onPress = function() {
			_ff=-1, _pos=_sound.position;
			me.onEnterFrame = fEnter;
		};
		forws_btn.onPress = function() {
			_ff=1, _pos=_sound.position;
			me.onEnterFrame = fEnter;
		};
		rever_btn.onRelease = rever_btn.onReleaseOutside=forws_btn.onRelease=forws_btn.onReleaseOutside=function () {
			_ff = 0;
			delete me.onEnterFrame;
		};
		this.fEnter = function() {
			if (_pos && _ff) {
				_sound.stop();
				_pos += _ff*_ff_speed;
				_pos<0 || _pos>=_sound.duration ? stopp_btn.onPress() : _sound.start(_pos/1000);
			}
		};
		//
		this._ff_speed = 2000;
		this._sI = this._ff=this._pos=0;
		this._sound.stop();
		this._sound = new Sound(this);
		this._sound.attachSound(sound_id);
		this._sound.setVolume(100);
		this.start_btn.onPress();
	}
};
//
// ----- Track 1 -----
_btns = [stop_btn, start_btn, rev_btn, FF_btn, pause_btn];
ch4_tr1_btn.onRelease = function() {
	sound_mc.fInit("test", _btns);
};
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib 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



Alle Zeitangaben in WEZ +1. Es ist jetzt 07:15 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele