Avatar billede plastic.gangsta Nybegynder
02. april 2005 - 18:58 Der er 12 kommentarer og
1 løsning

flash:problemer med variabler skaber lyd inferno

Hej, Jeg har en flash film med 3 frames - en til tre forskellige situationer. Når man er under en frame kan skifte imellem de forskellige situationer (man vælger imellem tre foskellige baggrundssymboler)
Til hver baggrunden hører en serie af speaks. Disse speaks er i mp3 filer som bliver loadet ind med nedenstående script.


function randRange(min:Number, max:Number):Number {
  var randomNum:Number = Math.round(Math.random()*(max-min))+min;
  return randomNum;
}

randomtid = randRange(22000, 30000);

var randomlyd:Sound = new Sound();
function spilMP3 () {randomlyd.loadSound("speakda/mall/"+randRange(10, 20)+".mp3", true);}


function callback1() {
        trace("interval called");
        trace(randomtid);
        trace("speakda/mall/"+randRange(10, 20)+".mp3")
        randomtid = randRange(22000, 30000);
        spilMP3 ();
        var interval = setInterval(callback1,randomtid);
        clearInterval(interval);
}


var interval = setInterval( callback1, randomtid  );

Og det fungerer fint. Problemet er at til hver baggrunden af der som sagt en selvstændig serie af speaks den skal hente ind, så den kode ligger i alle tre frames (selvfølgelig med en forskelig mappe den refererer til). Det er altså kun

function spilMP3 () {randomlyd.loadSound("speakda/mall/"+randRange(10, 20)+".mp3", true);}

som ændres imellem de tre frames

Problemet opstår når man skifter imellem de tre situationer.. For det der sker når man hopper over i en ny frame er at den bliver ved med at spille de gamle lyde og så også de lyde. Når man så har skiftet et par gange, afspiller den lydende fra alle frames og dermed bliver det et stort inferno af lyde...

JEg troede egentlig at når man kig ind i en ny frame "overskrev" den den gamle og blot spillede de ny...

Hvordan løses dette problem - har prøvet at lave en delete randomlyd; når man kommer ind i framen, men dette kunne jeg ikke få til at du.

Jeg skal på en eller anden måde få slettet den tidligere kode, således den kun kører den nye kode..

Håber i forstår problemet og kan hjælpe

Hilsen

/Jens
Avatar billede barklund Nybegynder
02. april 2005 - 22:58 #1
Bare fordi du sletter et lydobjekt (eller overskriver det), så stopper lyden ikke.

Du skal stoppe den med:

randomlyd.stop();

Meeen, når nu du selv så præcist siger, at du har det samme script stort set ens tre gange - så kan du vel også regne ud, at det kan gøres meget pænere. Du skal jo kun definere alle dine funktioner og dit lydobjekt 1 gang - så kan du jo bare loade lyde ind i det i hver af de tre frames - men så de alle bruger samme lydobjekt.
Avatar billede plastic.gangsta Nybegynder
03. april 2005 - 13:28 #2
JEg vil så gerne kunne skrive det ud som du forklarer - kan du hjælpe med at skrive lydobjektet?
Avatar billede barklund Nybegynder
03. april 2005 - 13:40 #3
I første frame kan du skrive noget med:

if (randomlyd === undefined) {
    // okay, den findes ikke, vi definerer lyd-objektet herinde
    var randomlyd:Sound = new Sound();
}
var folder = "speakda/mall/";
spilMP3();
// funktioner
function randRange(min, max){
    return Math.round(Math.random()*(max-min))+min;
}
function callback1() {
    randomtid = randRange(22000, 30000);
    spilMP3 ();
    clearInterval(interval);
    var interval = setInterval(callback1,randomtid);
}
function spilMP3 () {
    randomlyd.stop();
    randomlyd.loadSound(folder+randRange(10, 20)+".mp3", true);
}

Så kan du i næste frame blot skrive:

var folder = "speakda/nogetandet/";
spilMP3();

Og så burde det spille.

--
Morten Barklund
Avatar billede plastic.gangsta Nybegynder
03. april 2005 - 17:48 #4
Okay - det er dog lige en ekstra ting. Det er sådan at der før disse tre frames, ligger der en intro hvor man vælger hvilken baggrund man vil have og derfor kan jeg ikke stoppe denne overstående kode i den første frame, idet der i introen ikke skal hentes speak i denne frame.. Hvilken del af koden kan jeg smide ud i introen, er det alt på nær

var folder = "speakda/nogetandet/";
spilMP3();

Problemet som jeg ser det er jo at i første frame skal den ikke spille noget - men blot definere tingene??
Avatar billede plastic.gangsta Nybegynder
03. april 2005 - 18:26 #5
okay jeg har gjort overstående som jeg skrev og det eneste som ligger i de tre frames er så:

var folder = "speakda/nogetandet/";
spilMP3();

Problemet på denne måde er at den så fint spiller lyden når den kommer ind i frames'ene, men den bliver ikke ved med at spille en lyd - den afspiller kun lyden engang - koden er skrevet således at den skal spille en ny lyd hvert (22-30) sekund.

JEg har så prøve at ændre i

function spilMP3 () {
    randomlyd.stop();
    randomlyd.loadSound(folder+randRange(10, 20)+".mp3", true);
    callback;
}

således den også indeholder callback funktionen - men det kan jeg ikke rigtigt for til at virke.. har du en ide om det??
Avatar billede barklund Nybegynder
03. april 2005 - 19:48 #6
Min fejl, du skal kalde callback1() i hver frame i stedet for at kalde spilMP3 - så vil det hele køre :)
Avatar billede plastic.gangsta Nybegynder
03. april 2005 - 19:59 #7
nu kom vi da et stykke af vejen - problemet er stadgivæk at hvis man lader den stå i et par minutter begynder intervallet imellem hvergang den afspiller lyden at blive mindre og mindre - og til sidst lyder det bare som om en et sandt lyd inferno. Den loader nærmest en ny fil ind hver 20 milliskund.. Fejlen må ligge i callback1 tror jeg, kan du se hvad der kan være galt?
Avatar billede barklund Nybegynder
03. april 2005 - 20:05 #8
Er du sikker på, at du ikke har setInterval og clearInterval i forkert rækkefølge - først clearer du det gamle, derefter laver du det nye. Den har du fejlet med et par gange :)
Avatar billede barklund Nybegynder
03. april 2005 - 20:06 #9
Aha, intervallet må ikke var'es inden i funktionen - fjern "var" foran "interval = ..."
Avatar billede plastic.gangsta Nybegynder
03. april 2005 - 20:14 #10
fedt rigtig fedt - det er sku da utrolig hvad et var kan gøre.. Godt så lige det aller sidste - når jeg trykker på mit speaker ikon der deaktiverer min baggrundslyd så skal den også deaktivere speakning.

Dette gør jeg vel bare med _root.randomlyd.stop();

når jeg så skal starte den igen - er det så blot _root.randomly.start();??
Avatar billede barklund Nybegynder
03. april 2005 - 20:56 #11
Niks, du skal jo både stoppe lyden og intervallet.

Hvis du i første frame laver en:

function stopMP3() {
    randomlyd.stop();
    clearInterval(interval);
}

Så kan du alle steder kalde den - når lyden skal starte igen kalder du callback1().

--
Morten Barklund
Avatar billede plastic.gangsta Nybegynder
05. april 2005 - 18:53 #12
mange mange tak for hjælpen - smid et svar, du har virkelig fortjent pointene
Avatar billede barklund Nybegynder
05. april 2005 - 20:45 #13
Hehe, så gør jeg det :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester