Soundsteuerung Titelauswahl

darien

Mitglied
Hallo,

ich habe in Flash MX2004 eine Sounsteuerung gebastelt (bzw. habe es vor :) ), bei der neben den Button Pause und Play zum Starten und Anhalten der Sounds, auch die Buttons A und B zur Auswahl zwei verschiedener Hintergrundsounds vorhanden sind. Ich habe zunächst zwei neue Soundobjekte im Movie soundsteuerung_mc definiert, Bezeichner in der Biblio an die entsprechenden Sounds vergeben, Sounds attached und Sound A gestartet (standardmäßig beim starten des Films). Die Sounds zu starten und zu stoppen ist mir gelungen, nur das mit der Titelauswahl bekomme ich nicht hin.

Titel A soll ja nur gestartet werden können, wenn er nicht bereits läuft. Gleiches gilt für Titel B. Auch sollen die Titel A+B Buttons nur den entsprechenden Sound starten, wenn die Play Taste aktiviert ist (also gerade Sound läuft). Ist die Pause Taste aktiviert, soll durch drücken der Buttons A oder B kein Sound abspielen. Eben erst wieder, nachdem der Play Button gedrückt wurde.

Hoffe, ich habe mich verständlich ausgedrückt.
Da die Datei etwas groß ist (2,7MB) habe ich sie in ein externes Verzeichnis hochgeladen.

Link: http://www.webmedias.de/sebl/fla/ (Datei mainmovie.fla)

Vielen Dank im Voraus für Eure Hilfe,
Darien

P.S.: Ich habe im Movie soundsteuerung_mc einen zweiten Frame für die Aktivierung der LED eingefügt. Jedesmal wenn der Film in den zweiten Frame springt, werden die Buchstaben beispielsweise zur Titelauswahl (A und B) sehr unscharf dargestellt. Woran kann das liegen?
 
Zuletzt bearbeitet:
Hi,

Du kannst nicht einfach wieder auf Frame 1 springen, wenn Du einen Sound wechselst, da dann auch der Code in Frame 1 wieder ausgeführt und damit der erste Sound abgespielt wird. Lege die LEDs lieber in einen eigenen MovieClip und steuere diesen an.

Ich würde zwei Variablen verwenden: "isplaying", um abzufragen, ob überhaupt ein Sound gespielt wird und "currentsound", in der der aktuelle Sound festgehalten wird.

generelle Vorgehensweise:
Code:
var sounds = new Array();
sounds[0] = new Sound(this);
sound[0].attachSound("snd1.mp3");
sounds[1] = new Sound(this);
sound[1].attachSound("snd2.mp3");

var isplaying = false;
var currentsound = 0;

sounds[0].start();

function startSound() { // vom Play-Button aufgerufen
     if (!isplaying) {
        sounds[currentsound].start();
        isplaying = true;
     }
}

function stopSound() {
    if (isplaying) {
        sounds[currentsound].stop();
        isplaying = false;
    }
}

function switchSound(n) {
    if (isplaying) sounds[currentsound].stop();
    current_sound = n;
    if (isplaying) sounds[currentsound].start();
}
Mit den Start- und Stop-Buttons rufst Du die Funktionen "startSound" und "stopSound" auf und mit den beiden Buttons zur Soundwahl die Methode "switchSound", der Du die Indexnummer des abzuspielenden Sounds (0 oder 1) übergibst.

Gruß
.
 
Hi,

danke für Deine schnelle Antwort. Werde es so mal probieren.

Ich will mich nur nochmal vergewissern:

Die Variable currnetsound (var currentsound = 0;) ist nicht gleich der sounds[current_sound].start();?
Oder muss der Unterstrich weg? Ist der so richtig? Will nicht kritisieren, bin nur unsicher, da ich ja versuche durchzusteigen.

Danke,
Darien
 
Doch, es ist die selbe Variable - war ein Fehler meinerseits, da ich Dergleichen oft mit Unterstrich trenne. ;) Wenn Du den Code liest, solltest Du aber eigentlich selbst erkennen, dass diese Variable gemeint sein muss: schließlich wird damit der aktuelle Sound ausgewählt. ;)

Gruß
.
 
Hi,

habe folgenden Code in das Aktionenebene (Frame 1) eingegeben:
Code:
var sounds = new Array();
sounds[0] = new Sound(this);
sound[0].attachSound("sound_a");
sounds[1] = new Sound(this);
sound[1].attachSound("sound_b");

var isplaying = false;
var currentsound = 0;

sounds[0].start();

function startSound() { // vom Play-Button aufgerufen
     if (!isplaying) {
        sounds[currentsound].start();
        isplaying = true;
     }
}

function stopSound() {
    if (isplaying) {
        sounds[currentsound].stop();
        isplaying = false;
    }
}

function switchSound(n) {
    if (isplaying) sounds[currentsound].stop();
    currentsound = n;
    if (isplaying) sounds[currentsound].start();
}

Gehe ich richtig in der Annahme, dass
Code:
sounds[0].start();
zuständig ist für die standardmässige sofortige Wiedergabe des Sounds A beim Start des Movies? Aber leider funktioniert noch nicht einmal das bei mir. Müsste doch gleich nach dem Laden des Movies anlaufen, ohne vorher ein Schaltfläche klicken zu müssen, oder? Die Sounds heissen in der Biblio "snd1.mp3" (Titel A) und "snd2.mp3" (Titel B). Über "Verknüpfung" habe ich Titel A den Bezeichner "sound_a" und Titel B "sound_b" zugewiesen.

Wie genau rufe ich per Button die Funktion innerhalb einer on-Ereignisprozedur auf? So?
Code:
on (release) {
	mc_soundsteuerung.startSound();
}
Bezugnehmend auf die "function switchSound(n)":
Button A belege ich ebenfalls im Rahmen eine on-Ereignisprozedur mit folgendem Code. Richtig oder falsch?
Code:
on (release) {
	mc_soundsteuerung.switchSound(0);
}
Entsprechender Wert 1 (für Sound B) in gleicher Weise auf den Sound B Button?

Bitte um Antwort.

Gruß,
Darien
 
Sorry, noch ein Fehler von mir (das kommt davon, wenn man Code einfach so ins Textfeld tippt, ohne ihn in Flash auszuprobieren): Da das Array "sounds" heisst, musst Du natürlich auf seine Elemente auch über "sounds" (und nicht über "sound") zugreifen:
Code:
var sounds = new Array();
sounds[0] = new Sound(this);
sounds[0].attachSound("sound_a");
sounds[1] = new Sound(this);
sounds[1].attachSound("sound_b");

Die Methoden zum Abspielen der Sounds müssen von Deinen Buttons aus natürlich korrekt adressiert werden. Befindet sich der Button auf der Zeitleiste, auf der auch der Code notiert ist, wäre das (im Fall eines MovieClip-Buttons) z.B.:
Code:
on(release) {
  _parent.switchSound(0);
}
und im Fall eines Schatlflächen-Buttons dieses:
Code:
on(release) {
  switchSound(0);
}
Übersichtlicher ist es aber meist, den Buttons einfach einen Instanznamen zu geben, und die Maushandler auch auf der Code-Zeitleiste zu notieren:
Code:
instanznameDesButtons.onRelease = function() {
  switchSound(0);
}

Gruß
.
 
Hi Tobias,

danke, danke. Es funktioniert.

Hatte allerdings den Haken unter "Verknüpfung" "in erstes Bild exportieren" nicht gesetzt, weswegen der sound immer noch nicht startete. Haken gesetzt und die Sache lief fast fehlerfrei.

Der Sound startete zwar nach dem Laden des Movies, die Buttons reagierten aber nicht auf klicken. Erst wenn ich den Play Button klickte, und der Sound doppelt lief, erfüllten die anderen Buttons ihre zugedachte Funktion.

Ich habe dann "instinktiverweise" :-D, die Variable "isplaying" von false auf true gesetzt. Dann funktionierte alles ordnungsgemäß.

Eine letzte Frage bezgl. der LEDs.
Ich lege die jetzt in zwei Movies an (für jeden Zustand einen) und steuere diese jeweils über "attachMovie", oder gibt es eine bessere Methode?

Danke Dir,
Darien
 
Hi,

ist eigentlich egal - Du kannst auch einen MC mit zwei Frames erstellen, und den Frame per gotoAndStop wechseln oder zwei MCs übereinander legen und jeweils einen per _visible unsichtbar schalten ...

Gruß
.
 
Zurück