Avatar billede rudestrand Nybegynder
11. januar 2005 - 11:50 Der er 20 kommentarer og
1 løsning

Stoppe lyd når en ny movie loades

Jeg har en animeret XML menu som folder id og ud. Den loader nye movies med Flash video som kører i Flash's Media Component. Mit problem er at når en video kører og brugeren klikker i menuen og starter en ny video, så stopper lyden ikke i den video som allerede kører og så fremdeles.
Det jeg har brug for er, at så snart man klikker i menuen, stopper en allerede kørende video...men hvordan gør jeg det??
Jeg har prøvet at ligge en StopAllSounds ind, men det stopper jo først lyden når man starter en ny, og ikke når man bare klikker i menuen.
Avatar billede _k Nybegynder
11. januar 2005 - 13:52 #1
Når du siger "video" mener du så swf-video, flv-video eller noget helt 3? Hvis det er flv du har gang i, skal du ind på den video du har kørende (i mediaplayeren?) og stoppe den dér. Det burde vel også være ret ligetil, når du har dens navn fra xml'en?
Avatar billede rudestrand Nybegynder
11. januar 2005 - 14:06 #2
Det er flv - men jeg opretter et mc og henter en movie ind hvori flv'en kører:

this.createEmptyMovieClip("container_mc",1);

function test(a:String)
{
    minMovie = a   
    trace(a)
    container_mc.loadMovie(a);
    }

Jeg har forsøgt mig lidt med en unloadMovie fordi jeg havde en ide om at den var bedre at bruge, men kan ikke få det til at virke...øv! :-((
Avatar billede _k Nybegynder
11. januar 2005 - 14:51 #3
Hvordan ser dit AS ud når du lukker? Og jeg er stadig ikke helt med på hvordan du henter flv'en ind? Ligger den i en swf du henter ind via loadMovie? Hvis ja, er den så embedded i en eller anden afspiller?

Fidusen er nemlig, at selvom du fjerner dit mc med unload eller removeMovieClip, så fjerder du ikke referencen til "stream"en - det skal du selv manuelt gøre. Altså noget i retning af: container_mc.afspiller.stop()
Avatar billede rudestrand Nybegynder
11. januar 2005 - 15:41 #4
Øh... nu har jeg slettet det igen, da det ikke virkede....ja, lige præcis den ligger i en swf som jeg loader og afspilles i swf'en via Media Compneneten som streaming flv
mc.afspiller, er det Media Componenten som jeg skal give et instance navn?
Avatar billede rudestrand Nybegynder
11. januar 2005 - 16:05 #5
Jeg har fundet denne her:

onClipEvent (mouseUp) {
myNetStream.close();
}

Men jeg skal vel have placeret den på mit container_mc, men hvordan ved jeg ikke!??
Jeg ved heller ikke om mouseUp holder i denne sammenhæng, da brugeren jo så bare skal komme til at klikke og så stopper streamingen, men på den anden side stopper den jo streamingen når der klikkes i menuen og det er jo det der er meningen...!
Avatar billede _k Nybegynder
11. januar 2005 - 16:13 #6
Du skal give dit Media komponent et instancenavn, f.eks. "afspiller".

Du behøver ikke selv at stoppe streamen med AS hvis du bruger Media komponenten, det styrer den helt for dig. Det eneste du skal give den besked på er at stoppe. Stien kan jeg ikke gætte mig til, men den er noget i retning af det jeg skrev i sidste indlæg.

Nu kender jeg ikke din menu, men et gæt er, at du kan stoppe afspilningen når den næste går igang? Præcis hvor den skal side afhænger af din logik, men prøv i første omgang at fokusere på at få videoen stoppet. Du kan f.eks. lave en testknap og afprøve dine scripts ved tryk på den. Så kan du jo altid flytte kaldet ind hvor det passer bedst.
Avatar billede rudestrand Nybegynder
11. januar 2005 - 16:58 #7
okay det virker hvis jeg placerer scriptet i de swf'er med video som loades, men som sagt er menuen animeret og den skal først folde sig ud osv før man kan trykke på knapperne, det bevirker at når man trykker forsvinder media componenten men lyden fortsætter indtil man starter en ny movie, det er dog et fremskridt - før fortsatte streaming lyden oven i den nye streaming video.
Jeg skulle gerne kunne lukke for streamingen allerede når der trykkes i menuen...!???
Avatar billede _k Nybegynder
11. januar 2005 - 22:09 #8
Hvorfor kan du ikke placere koden der stopper videoen sammen med den der åbner menuen?
Avatar billede rudestrand Nybegynder
12. januar 2005 - 09:30 #9
Hvordan mener du det så skal være i forhold til dette (opretter et nyt mc og loader den movie man har valgt i (xml-)menuen ind i det)

this.createEmptyMovieClip("container_mc",1);
function test(a:String)
{
    minMovie = a   
    trace(a)
    container_mc.loadMovie(a);
    }
Avatar billede _k Nybegynder
12. januar 2005 - 11:17 #10
Opretter du det samme mc til alle menupunkter? Nå, det er vel egentlig ok. Men du kan jo så slukke for lyden i dit "gamle" container_mc lige før du skaber (creater) det nye. Så er du nemlig sikker på at det er den korrekte sti du får kaldt.
Avatar billede rudestrand Nybegynder
12. januar 2005 - 11:28 #11
jeg er bange for at det er det jeg ikke helt forstår hvordan jeg skal gøre??
Kan du hjælpe??
Avatar billede _k Nybegynder
12. januar 2005 - 11:39 #12
Nu er det jo ret svært for mig at overskue din struktur selvom du gør dit bedste for at forklare, så kan godt være at det her er helt hen i vejret.
Din xml-menu må indeholde en eller anden onPress-metode som bliver eksekveret når du klikker på et menupunkt. Kan du finde den? Inde i den onPress-metode tilføjer du så den kode som slukker for musikken - helst så tidligt i koden som muligt.

Hvis du har noget struktureret kode, må du gerne smide det her, og jeg kommer med et bud på hvordan du kan gøre. Men jeg advarer lige om, at jeg ikke gider bruge tid på at sætte mig ind i en eller anden skummel, dårlig struktureret lappeløsningsmodel du har fundet på Flashkit eller andre steder, som selv vores ven Karl Koder måtte sætte sig ned og tude over!
Avatar billede rudestrand Nybegynder
12. januar 2005 - 12:00 #13
Tud ej! det er vidst ikke så skummelt endda, men sagen er at jeg har købt en komponent på Flash Exchange der er en animeret menu med 2 sub-niveauer (fsNavigation2), hvor indholdet styres fra en XML-fil - problemet er nok at komponenten er låst på en eller anden måde, så jeg ikke kan se koden på knapperne. Den eneste kode jeg har adgang til er XML parseren som ligger i 1. frame. Her har jeg selv indsat ovenstående kode som opretter et mc, hvori der loades nye movies alt efter hvilken knap man trykker på.
Her er et udpluk af XML-filen:

<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>
<root>
    <menu label="test" icon="icon_arrow">
        <link label="test" href="test_video.swf"/>
        </menu>
    <menu label="test" icon="icon_arrow">
        <link label="test" href="www.test.com"/>
        <link label="test" href="http://www.test.com"/>
    </menu>

og koden i 1. frame ser således ud:

System.useCodepage = true;

var xmlMenu = new XML();
xmlMenu.ignoreWhite = true;

xmlMenu.load("nav_input.xml");

xmlMenu.onLoad = function(){
  _root.setDataProvider(xmlMenu);
}

function setDataProvider(xmlStr:String)
{
        var x = new XML();
        x.parseXML(xmlStr);

        var ms = x.firstChild.childNodes;

        for(var i = 0; i < ms.length; i++)
        {
                var m = ms[i];
                var newMenu:MovieClip = nav.addMenu(m.attributes.label,m.attributes.icon,m.attributes.href, m.attributes.target);

                newMenu.some_xml_value = m.attributes.label;
                newMenu.__button.onRelease = function()
                {
                _root.test(this._parent.some_xml_value);
                }

                var sm = m.childNodes;
                for(var k = 0; k < sm.length; k++)
                {
                        var s = sm[k];
                        var newSubMenu:MovieClip = newMenu.addSubMenu(s.attributes.label,s.attributes.href,s.attributes.target,s.attributes.level);

                        // write the values you need into the submenu
                        newSubMenu.some_xml_value = s.attributes.href;

                        newSubMenu.__background.onRelease = function()
                        {
                            // and access them like
                            _root.test(this._parent.some_xml_value);
                        }
                }
        }
}

this.createEmptyMovieClip("container_mc",1);

function test(a:String)
{
    minMovie = a   
    trace(a)
    container_mc.loadMovie(a);
    }
Avatar billede _k Nybegynder
12. januar 2005 - 13:04 #14
Kan du ikke åbne komponenten ved at højreklikke på den og vælge "edit"?

Du kunne prøve at slukke for lyden inde i  newSubMenu.__background.onRelease = function(). Altå noget i retning af:

                newSubMenu.__background.onRelease = function()
                        {
                            // and access them like
                            // Sluk lyden her
                            _root.test(this._parent.some_xml_value);
                        }

Men som jeg forstod, ville du slukke lyden allerede når man trykker på hovedmenuen? Den er der ikke direkte adgang til via ovenstående script, så det må sidde inde i komponenten.
Avatar billede rudestrand Nybegynder
12. januar 2005 - 13:48 #15
Jeg har prøvet at indsætte en: stopAllSounds(); der hvor du foreslår og det virker, som du forudså, først når en ny movie loades. Men det stopper lyden så den ikke fortsætter oven i den nye som bliver loaded.
Kunne jeg omvendt undgå at den swf der nu er loadet, ikke bliver unloaded bare man trykker i menuen. Det er jo det der er irritations momentet, at lyden fortsætter men billedet forsvinder...?
Avatar billede rudestrand Nybegynder
12. januar 2005 - 13:58 #16
nej, jeg kan ikke åbne komponenten, jeg har prøvet alt!
Avatar billede _k Nybegynder
12. januar 2005 - 14:29 #17
Ja, man kan godt lukke forsvarligt ned for komponenter, det er bare ikke så ofte nogen gør det - men hvis de skal tjene grunker på det, er det jo fortåeligt nok.

Hvad med om du prøver at stoppe din video inde fra:
newMenu.__button.onRelease = function()
                {
                // Stop lyd og video her
                _root.test(this._parent.some_xml_value);
                }
Avatar billede rudestrand Nybegynder
12. januar 2005 - 15:30 #18
HURRA! Det var der den skulle være - tusinde, tusinde tak for stor hjælp...og tålmodighed!
Smid et svar og du får point :)))
Avatar billede _k Nybegynder
12. januar 2005 - 16:05 #19
Lyder kanon. Held og lykke med at få det færdigt :)
Avatar billede rudestrand Nybegynder
12. januar 2005 - 16:40 #20
Tak, det bliver super, og her kom point ;-)
Avatar billede _k Nybegynder
12. januar 2005 - 16:41 #21
Så siger jeg mange tak :)
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