MP3 Titelauswahlmenu

fishmob

Grünschnabel
Hallo,

zunächst einmal ein "Respect Gold" an die Mitglieder dieses Forums. Seit einigen Tagen durchforste ich als Flash-Newcomer die Forum-Beiträge geflissentlich und komme aus dem Staunen einfach nicht mehr heraus, was mit Flash, respektive AS-Prgrammierung so alles möglich ist. Einige Sachen habe ich getestet und naja, sagen wir ... versucht zu verstehen, denn trotz der präzisen Erläuterungen bliebt dies kein einfaches Unterfangen. Gut, aber dass hat ja hier auch keiner behauptet.
Vielleicht kann mir jemand bei der Lösung folgender Aufgabe behilflich sein und zwar:

Innerhalb eines Flash-Filmes (Flash MX) soll ein MP3-Auswahlmenü erstellt werden, dass:

- auf Knopfdruck des jeweiligen Songtitels fünf verschiedende externe MP3´s abspielt,
- während des Hörens des jeweiligen MP3-Songs eine eine neue "Seite" (Frame?) zur "visuellen Unterhaltung" (Darstellung eines Equalizers von Flashstar.de) anspricht und
- mit Beendigung des Songs durch Zeitablauf (onSoundcomplete) automatisch wieder auf das Auswahlmenü "zurückschaltet" bzw.
- zum Auswahlmenü zurückschaltet, wenn während der MP3-Wiedergabe die "Stoptaste" (auf dieser "neuen Seite") gedrückt wird.

Mit dem "OnRelease-Befehl" der jeweiligen Schaltflächen habe ich es soweit hinbekommen, dass zwischen dem Auswahlmenü und der neuen Seite für jeden Song hin- und hergeschalten werden kann, ohne das der MP3-Song doppelt und dreifach gestartet wird. Dies habe ich durch eine IF-Abfrage mit der Variablen "playing=true bzw. false" zuzüglich "stopallsounds()" auf den Schaltflächen realisiert. Doch daraus resultiert jetzt folgendes Problem:

Während des gesamten Films läuft ein MP3-Loop, der auf der "Intro-Seite" gestartet wird und zwar als Ereignissound (Einstellung bei den Eigenschaften). Dieser soll jedoch auch auf der Seite des MP3-Auswahlmenüs laufen, wenn die jeweilige MP3-Wiedergabe wieder beendet ist. Die Seite des MP3-Auswahlmenüs ist ihrerseits per Schaltfläche mit der "Intro-Seite" verknüpft, so dass bei jeder "Rückkehr" dorthin, der MP3-Loop nochmals gestartet wird.
Frage: Wie muss ich den "MP3-Loop" definieren, dass er nur einmal gestartet, die gesamte Präsentation über läuft (auch wenn neue Seiten und Sounds innerhalb der "Fla" angesprochen werden) und nur dann "ausgeschaltet" wird, wenn die MP3-Songs gespielt werden? Reicht es den "MP3-Loop" seinerseits nur zu "muten" (setVolume(0)) oder ist dies im Hinblick auf eine sinnvolle Ressourcennutzung nicht zweckmäßig?

Des weiteren habe ich einen Volumenregler (Drehregler von Flashstar.de) auf die Seite der "visuellen Unterhaltung" eingebaut, mit der die Lautstärke des jeweiligen MP3-Songs regelbar ist. Allerdings startet der MP3-Song immer mit einer Lautstärke von "NULL" und man muss stets erst den Regler bedienen, um die Lautstärke anzupassen. Meine Versuche den Regler der Gestalt zu modifizieren, dass der Sound mit einer Lautstärke von 50 % beginnt und der Drehregler sich auch auf dieser Position eingangs gleich befindet, verliefen komplett erfolglos. Mit der Anweisung "setvolume(50)" innerhalb des Codes wurde nur erreicht, dass der Regler keinerlei Einfluss mehr auf die Lautstärke hat und der "Reglerknubbel" trotzdem auf Position "Null" steht.

Vielen Dank für das Lesen des umfangreichen Textes und eventueller Hilfe.
 
Hi und willkommen im Forum,

zu 1: ich würde den Menü-Loop ebenfalls als Soundobjekt anlegen und beim Auswählen der Songs einfach stoppen bzw. neu abspielen. Wenn er nicht jedes Mal von vorne beginnen soll, kannst Du Dir dir aktuelle Abspielposition mit .duration merken und als zweiten Offest beim Abspielen wieder übergeben (durch 1000 teilen).

zu 2: Da müsstest Du bitte mal die .fla mit dem Regler posten. Ich bin sicher, das lässt sich durch eine kleine Änderung einstellen. ;)

Gruß

P.S.: Ein wirklich vorbildlicher Beitrag, was Verständlichkeit und Vollständigkeit betrifft. :)
.
 
Hallo Datic,

vielen Dank für die schnelle Antwort und die freundliche Unterstützung. Dem Anhang habe ich die modifizierte Fla-Datei für den Regler beigefügt. Die Stellen im AS, die ich nicht richtig verstehe bzw. an denen ich Probleme vermute, habe ich durch Kommentare nochmals gesondert kenntlich gemacht. In der vollständigen Fla-Datei habe ich den Movieclip des Reglers um 180 Grad gedreht, so dass sich die "Null-Position" auf der linken Seite befindet und eine Erhöhung der Lautstärke im Uhrzeigersinn möglich ist.

Bezüglich des Loops werde ich mir in den nächsten Tagen noch ernsthaftere Gedanken machen müssen - hier fehlt einfach noch etwas AS-Basiswissen. Über das "epochemachende Ergebnis" werde ich selbstverständlich berichten ... :o)

Vielen Dank zunächst ...

Gruß

P.S. Danke auch für die freundliche Begrüßung!
 

Anhänge

Hi,

da lässt sich zwar einiges ändern, aber auf die Schnelle sollte folgendes reichen:
PHP:
sfx1.knubbel._rotation = 180;
// Hier wird der Winkel des "Knubbels" auf 180 gesetzt (Volume = 50);
mysound1.start(0, 1);

sfx1.onEnterFrame = function() {
	mysound1.volRegler(this.knubbel._rotation);
        // Und dann nehmen wir einfach die ._rotation-Eigenschaft, statt der Variable "count"
        // Das Ding initialisiert die Variable nicht, daher ist sie zunächst "undefined"
	this._parent.anzeige1.text = _root.mysound1.getVolume();
};
Ausserdem solltest Du darauf achten, die Bezeichner korrekt Groß- oder Klein zu schreiben:
PHP:
mysound1 = new Sound();
Flash 7 hat mir hier z.B. einen Fehler ausgespuckt, weil Du Sound() mit kleinem "s" geschrieben hattest. ;)

Gruß
.
 
Hi Datic,

vielen Dank für Deine Mühe und Tips. Ich bin mir nicht sicher, ob ich Deine Hinweise richtig umgesetzt habe, denn es funktioniert noch nicht so ganz, wie ich es gerne hätte. :(
Vielleicht hast Du die Zeit und Muse, Dir es nochmal anzuschauen.

Script 1 auf dem "eigentlichen Knubbel":

on(press){
signal=true
}
on(release, releaseOutside){
signal=false
}

Script 2 auf dem "Regler":

onClipEvent(mouseMove){
if (signal){
_rotation = Math.atan2(_parent._ymouse-_y,_parent._xmouse-_x)*180/Math.PI;
_parent.count = Math.round(_rotation);
updateAfterEvent();
}
}

Script 3 auf der "Hauptzeitleiste":

if (!playing){
Sound.prototype.volRegler = function(winkel) {
if (winkel<0) {winkel += 360;}
this.setVolume(Math.round(winkel/3.55));
};
this.createEmptyMovieClip("volume", 1);
mysound1 = new Sound();
mysound1.loadSound("\\drones.mp3");
mysound1.start(0, 1);
sfx.knubbel._rotation=180;
sfx1.onEnterFrame = function() {
mysound1.volRegler(this.knubbel._rotation);
this._parent.anzeige1.text = _root.mysound1.getVolume();
};
playing=true;
}else if (playing) {
mysound1.stop();
playing=false;
};

stop();

Ich verstehe es einfach nicht, denn eigentlich müsste es doch funktionieren, da der Winkel in der Funktion "sfx1.onEnterFrame" auf 180 gesetzt wird und damit die Position des "Knubbel" des Lautstärkereglers und der "echten" Lautstärke auf 50% !? Kannst Du bitte nochmal schauen, wo es "klemmt" ? Wenn es zuviel Aufwand bedeutet, dann nehme ich - wenn Du gestattest - Deinen fertigen MP3-Player (obiger Thread) und versuche diesen (optisch modifiziert - versprochen!) zu implementieren. Es ist jedoch derzeit der "sportliche Ehrgeiz" verstehen zu können, wie das AS funktioniert. Eben "learning by doing" oder besser gesagt "learning by dummfraaaaging" ... :)

Vielen Dank für den "Brain.Support" ... Gruß Jan

P.S. Recherchiere gerade noch, wie man die AS-Abbildung so formschön lesbar hinbekommt, wie Du ... bald hab ich´s ... hoffentlich ...
 
Fällt Dir was auf?
sfx1.knubbel._rotation=180;- dort fehlt die 1. ;)

Das wird (und darf) übrigens nicht in der onEnterFrame-Methode stehen, sonst friert Dein Regler an dieser Position ein.

Gruß
 
Hi Datic,

wie so oft sind es die Details, die entscheidend sind und offenbar ist das Kleinste dieser Gattung der ideale Lebensraum der Tücke. :)
Und das Ganze, obwohl ich auf Grund Deines Hinweises zur korrekten Schreibweise das AS mehrfach überprüft habe ... Nun ja, aus epochemachenden Fehlern lernt man ja bekanntlich, so der theoretische Ansatz jedenfalls. :rolleyes:
Nochmal vielen Dank für Deine Mühe ... ach und ja, dass AS funktioniert jetzt perfekt

Gruß
 
Zurück