Avatar billede theselfimages Nybegynder
27. april 2003 - 13:28 Der er 33 kommentarer og
1 løsning

Modificering af streamer actionscript

Player til random streaming af MP3 musik.
http://www.eksperten.dk/spm/313391

Modificering ønskes:

- I modsætning til at den som nu automatisk starter med at streame+afspille skal dette kun ske
  ved klik på Play/titel for nummeret.

- På den måde vil der ved klik på Play/titel afspilles ét nummer der valgtfrit (i koden) kan afgives
  (f.eks. nummer 1).
  Antager man så at der er 9 numre til rådighed, skal der dermed kunne angives hvilke at de 10
  numre der skal streames/afspilles ved klik på Play/titel. Når dette nummer 1 så er færdigafspillet
  ville det være genialt om playeren selv kunne fortsætte med at afspille de resterende 9 numre
  (et antal der ligeledes manuelt kan angives) random, på den måde playeren hidtil har fungeret.

- Det førtsætter så indtil endnu en anden Play/titel knap (med ovenstående beskrevne script) placeret andet 
  steds på Scenen klikkes og det angivne nummer (f.eks. 4) afspilles.

- Altså et Player-script der kan placeres på 10 forskellige Play knapper eller titler på en Scene.
  Klikkes en af disse afspilles det pågældende angivne nummer svarende til den knap/titel der klikkes.
  Pointen er så, at når nummeret er spillet færdigt, og der IKKE umiddelbart af bruger klikkes på en anden titel,
  da vil afspilleren selv afspilles de resterende numre random.

- Det må derfor være noget med at starte med en StopAllSound for hver knap/titel, således at
  den automastiske afspilning afbrydes hvis et andet numre aktiveres.
Avatar billede barklund Nybegynder
28. april 2003 - 10:33 #1
Skal nok komme til det. Men det er længere proces, så det tager lidt tid og kræver også, at jeg selv har tiden til det...
Avatar billede theselfimages Nybegynder
28. april 2003 - 10:39 #2
Ok.. helt fint. Du må endelig sige til hvis du har nogen spørgsmål til det.
Avatar billede pyroman Nybegynder
29. april 2003 - 14:54 #3
Har kigget lidt på barklunds script i dit forrige spørgsmål...

For at gøre sådan at at playeren ikke starter automatisk kan du i barklunds script bare ændre det sidste i scriptet:

mySongPlayer = new SongPlayer("http://www.theselfimages.dk/images/music/", 9, false);

(Den sidste værdi er ændret til "false");


Dette i tilføjes scriptet...

SongPlayer.prototype.playTitle = function(title){
  for(ii=0;ii<this.unused.length;ii++){
    if(this.unused[ii] == title){
      this.unused.slice(ii, 1);
    }
    this.sound.stop();
    this.sound.loadSound(SongPlayer.path+title+".mp3", true);
    this.play();
    this.sound.onSoundComplete = function() {
        this.songPlayer.nextSong(true);
    }
  }
}

På play knappen kan du bare sætte følgende...

on(release){
  mySongPlayer.nextSong(true);
}

Resten er vist lavet at barklund
På dine titel-knapper:

on(release){
  mySongPlayer.playTitle(titelnummer);
}

Håber det virker, har ikke testet det :)

/Filip
Avatar billede theselfimages Nybegynder
29. april 2003 - 15:47 #4
Hmm..det virker både og..
Den starter stadig automatisk et random nummer.
Klikkes Play knappen (lad os antage at dette kunne være en titel på et nummer i stedet for denne Playknap) ...afspilles det nummer "playTitle" er sat til. Dog virker det nu ikke med Pauseknappen, nummeret startes forfra når Play klikkes efter nummeret har været Paused. Det ser ud til at virke okay med at afspille et valgt nummer (ud fra playTitle) og at den så når dette nummer slutter, spille et random af de 7 numre der er defineret. (Kan den her finde på at spille det samme nummer fra playTitle IGEN, før de andre numre har været spillet igennem én gang?)

Sådan virker Barklunds pt. Hvis 9 eller 7 numre er defineret afspilles alle numre random ÉN gang, før de gentages.



SongPlayer = function(path,number,autoplay) {
    this.path = path;
    this.number = number;
    this.nextSong(autoplay);
}
SongPlayer.prototype.initList = function() {
    this.unused = new Array();
    var i;
    for (i = 1; i <= this.number; i++)
        this.unused.push(i);
    this.unused.sort(function(a,b){ return random(3)-1; });
}
SongPlayer.prototype.play = function() {
    this.sound.start();
}
SongPlayer.prototype.nextSong = function(go_on) {
    delete this.sound.songPlayer;
    delete this.sound;

    this.sound = new Sound(_root);
    this.sound.songPlayer = this;
    this.sound.onSoundComplete = function() {
        this.songPlayer.nextSong(true);
    }
    if (!this.unused.length)
        this.initList();
    this.sound.loadSound(this.path+this.unused.pop()+".mp3", true);
    if (go_on)
        this.play();
}
SongPlayer.prototype.stop = function() {
    this.sound.stop();
}
SongPlayer.prototype.pause = function() {
    this.paused = true;
    this.position = this.sound.position/1000;
    this.sound.stop();
}
SongPlayer.prototype.resume = function() {
    this.paused = false;
    this.sound.start(this.position);
}
SongPlayer.prototype.isPaused = function() {
    return this.paused;
}
SongPlayer.prototype.playTitle = function(title){
  for(ii=0;ii<this.unused.length;ii++){
    if(this.unused[ii] == title){
      this.unused.slice(ii, 1);
    }
    this.sound.stop();
    this.sound.loadSound(SongPlayer.path+title+".mp3", true);
    this.play();
    this.sound.onSoundComplete = function() {
        this.songPlayer.nextSong(true);
    }
  }
}
mySongPlayer = new SongPlayer("folder/music/", 7, false);



PLAYKNAP:
on (press) {
    if (mySongPlayer.isPaused()) {
        mySongPlayer.resume();
    } else {
        mySongPlayer.playTitle(1);
    }
}


PAUSEKNAP:
on (press) {
    mySongPlayer.pause();
}


STOPKNAP:
on (press) {
    mySongPlayer.stop();
}
Avatar billede pyroman Nybegynder
29. april 2003 - 17:47 #5
Virkede pause+start knappen på barklunds script, og kun dette?? For jeg har nemlig haft nogle problemer med mine egne film når man skal starte en streamed lydfil fra en given position(altså så man fx starter 15 sek inde i lyden...) Jeg har ikke haft nogle problemer med dette når man sætter streaming til false i loadSound kun med streaming...
Jeg kan ikke forstå hvorfor den autostarter.
Avatar billede theselfimages Nybegynder
29. april 2003 - 17:51 #6
Yep! Barklunds virker perfekt på dette område, men det var også et af de største problemer. Kan jeg sende dig FLA filen, så du selv kan teste og arbejde på denne?
Avatar billede pyroman Nybegynder
29. april 2003 - 17:54 #7
så skidt da :)
filip@desi-dev.dk
Avatar billede theselfimages Nybegynder
01. maj 2003 - 18:02 #8
Pyroman => Modtog min mail?
Håber i hvert fald at du vil kigge på det.
Dit udkast virker jo umiddelbart fint, mangler blot et par justeringer, som beskrevet ovenstående.
Avatar billede theselfimages Nybegynder
06. maj 2003 - 20:44 #9
Jeg kan nu sige helt specifikt at modificeringen af ovenstående Player skal kunne:

1. Afspille ét defineret nummer ved klik på Titelknap eller tilsvarende button.
2. Automatisk random afspilning (med Barklunds random rutine) af et antal definerede numre, når det nummer aktiveret ved klik på Titelknappen er færdigafspillet.
3. Pause og Stop knapfunktion udgår helt.
4. Mulighed for at kunne placere flere Titelknapper for definerede numre på samme stage. Dvs. på en stage kan f.eks. være 6 forskellige Titelknapper for hver af de 6 forskellige numre der kan vælges at lytte til. Når et valgt nummer slutter, afspilles automatisk og random ét af de resterende numre, indtil en Titelknap for et af de andre numre klikkes. Da afbrydes det automatisk afspillene nummer af det brugervalgte nummer.

Et færdigt script vil vel nemt kunne påsættes hver af de 6 Titelknapper på en stage?
Der er selvfølgelig stadig tale om streaming af al musik.

Håber det er forståeligt. Ellers spørg.
Playeren skal bruges til et musiksite der er under udvikling.
Avatar billede theselfimages Nybegynder
06. maj 2003 - 21:18 #10
Filip => med den modificering du allerede har lavet, hvordan undgår jeg der at nummeret automatisk starter før noget er klikket? Hvis det kunne fixes kunne jeg muligvis godt bruge scriptet med dine nuværende ændringer. Ellers må du meget gerne prøve at kigge på det ud fra ovenstående beskrivelse.
Avatar billede theselfimages Nybegynder
08. maj 2003 - 01:21 #11
Barklund =>
Vil det ikke være forholdsvis nemt at fjerne den autoplay, der gør at et random nummer automastisk starter med at spille?
Avatar billede theselfimages Nybegynder
16. maj 2003 - 01:03 #12
Har i begge opgivet ... eller tager det bare tid?
Avatar billede pyroman Nybegynder
19. maj 2003 - 18:14 #13
Undskyld, men jeg har været en uge væk fra den civiliserede verden....

I princippet skulle alt virke efter planen - hvis du sætter autoplay til false, burde den ikke starte... Og min løsning som jeg angav i starten af dette spørgsmål burde også virkre under normale omstændigheder, MEN jeg tror ikke at macromedias programmøre har været helt vågne da de udgav version 6 af actionscript, for streaming af lyd er altså ikke helt optimalt... Nogle funktioner kan man godt bruge på et streamed Sound-object, men nogle gange kikser det altså... Hvis du prøver at sætte streaming til false burde alle funktioner virke normalt, og det burde egentlig også være det samme for streaming lyd, hvilket desværre ikke er tilfældet. Jeg har kigget på Macromedias side, men ikke fundet nogle løsninger, men måske kan det løses ved en opdatering!?

Ellers har jeg ikke umidelbart nogen forklaring på problemet!
Avatar billede theselfimages Nybegynder
19. maj 2003 - 18:35 #14
Men er det denne du mener der skal stå til FALSE?

mySongPlayer = new SongPlayer("folder/music/", 7, false);

I såfald virker det ikke. Den afspiller automatisk et random nummer fra start indtil "titelknappen" klikkes:

TITELKNAP:
on (press) {
    if (mySongPlayer.isPaused()) {
        mySongPlayer.resume();
    } else {
        mySongPlayer.playTitle(1);
    }
}
Avatar billede theselfimages Nybegynder
19. maj 2003 - 18:40 #15
Den skal, som beskrevet først afspilles automatisk og random, de resterende numre når det første selvvalgte nummer er færdigafspillet. Forstået på den måde: At hvis ingen handling foretages efter færdigafspilning af første selvvalgte nummer, da afspilles automatisk og random de resterende numre.
Avatar billede barklund Nybegynder
19. maj 2003 - 18:40 #16
Du skal nok bare opdatere nextSong:

SongPlayer.prototype.nextSong = function(go_on) {
    delete this.sound.songPlayer;
    delete this.sound;

    this.sound = new Sound(_root);
    this.sound.songPlayer = this;
    this.sound.onSoundComplete = function() {
        this.songPlayer.nextSong(true);
    }
    if (!this.unused.length)
        this.initList();
    this.sound.loadSound(this.path+this.unused.pop()+".mp3", true);
    if (go_on)
        this.play();
    else
        this.sound.stop();
}
Avatar billede theselfimages Nybegynder
19. maj 2003 - 19:00 #17
Hmm.. næh! hvis nedenstående ellers er rigtigt, så afspiller den altså stadig AUTOMATISK fra start, før nogen handling er foretaget.


SongPlayer = function(path,number,autoplay) {
    this.path = path;
    this.number = number;
    this.nextSong(autoplay);
}
SongPlayer.prototype.initList = function() {
    this.unused = new Array();
    var i;
    for (i = 1; i <= this.number; i++)
        this.unused.push(i);
    this.unused.sort(function(a,b){ return random(3)-1; });
}
SongPlayer.prototype.play = function() {
    this.sound.start();
}
SongPlayer.prototype.nextSong = function(go_on) {
    delete this.sound.songPlayer;
    delete this.sound;

    this.sound = new Sound(_root);
    this.sound.songPlayer = this;
    this.sound.onSoundComplete = function() {
        this.songPlayer.nextSong(true);
    }
    if (!this.unused.length)
        this.initList();
    this.sound.loadSound(this.path+this.unused.pop()+".mp3", true);
    if (go_on)
        this.play();
    else
        this.sound.stop();
}
SongPlayer.prototype.stop = function() {
    this.sound.stop();
}
SongPlayer.prototype.pause = function() {
    this.paused = true;
    this.position = this.sound.position/1000;
    this.sound.stop();
}
SongPlayer.prototype.resume = function() {
    this.paused = false;
    this.sound.start(this.position);
}
SongPlayer.prototype.isPaused = function() {
    return this.paused;
}
SongPlayer.prototype.playTitle = function(title){
  for(ii=0;ii<this.unused.length;ii++){
    if(this.unused[ii] == title){
      this.unused.slice(ii, 1);
    }
    this.sound.stop();
    this.sound.loadSound(SongPlayer.path+title+".mp3", true);
    this.play();
    this.sound.onSoundComplete = function() {
        this.songPlayer.nextSong(true);
    }
  }
}
mySongPlayer = new SongPlayer("folder/music/", 7, false);
Avatar billede theselfimages Nybegynder
20. maj 2003 - 00:49 #18
Er det ikke simpelt muligt at Autoplay funktionen kun gælder ved:
SongPlayer.prototype.nextSong?
Avatar billede theselfimages Nybegynder
24. maj 2003 - 02:19 #19
Jeg er kommet på en bedre idé til dette !!
Det vil løse det problem jeg selv er rent ind i mht. websitet hvor Playeren skal bruges -- og formentlig også løse jeres problem med at få Playeren til at fungerer.

Er det muligt i Barklunds orinale script at implementere den (Pyroman's) funktion der vælger et specifikt nummer? Således at Playeren ved autoplay automatisk afspiller et defineret nummer og derefter de resterende. Nummeret kunne f.eks. være tallet 3 og andetsteds skrives hvor mange numre ialt (6 f.eks.)

OBS!
Der vil INGEN knapper være tilknyttet den version af Playeren jeg nu efterspørger. Scriptet autoplayer og (play, pause, stop) knapperne ryger helt ud.
Dermed skal der ses bort fra seneste indlæg om "silence" ved start indtil et nummer aktivt klikkes.

Afspilningen skulle gerne fortsat fungerer således at når det definerede startnummer er færdigafspillet, afspilles random de resterende 5 numre før nummer 3 afspilles igen. Ingen numre kan dermed stadig IKKE afspilles 2 gange i samme runde.
Hvis der nu f.eks. IKKE ønskes at definere et startnummer (tallet udelades) kunne Playeren så blot random afspille antallet af "ialt" numre?

Håber virkelig på dette :)

Det vil samtidig resulterer i 2 forskellige unikke Player scripts:
Barkslunds første auto random Player med interaktion og dette definerbar/auto Player script uden yderligere funktioner.

Lars
Avatar billede theselfimages Nybegynder
26. maj 2003 - 05:28 #20
Hmm.. mærkeligt! Tror jeg selv har løst problemet i henhold til ovenstående ønske. Jeg fandt en lille (måske) "fejl" i Pyroman's script:

this.sound.loadSound(SongPlayer.path+title+".mp3", true);

Ændrede denne til:
this.sound.loadSound(this.path+title+".mp3", true);

Jeg løste så problemet på følgene (meget mærkelige) måde:

frame1 : Hele Pyroman's modificerede script af (29/04-2003 14:54:34)
frame2 : stopAllSounds(); (forhindre Player i at autoplay fra start)
frame3 : mySongPlayer.playTitle(1);
        stop();

Er det helt gak?
Det virker i hvert fald efter hensigten i forhold til min beskrivelse/ønske i ovenstående kommentar. Men kunne man ikke blot ha' slået den "autoplay" fra?
Eller bevirker den så også at "nextsong" ikke afspilles?

Gerne kommentar på min "workaround" løsning...

Lars
Avatar billede pyroman Nybegynder
26. maj 2003 - 11:50 #21
Okay jeg tror at eksperten ikke gider at sende mig mail om nye indlæg - er lidt sent på den

Hmm, ja men jeg kunne også godt stoppe autostart med en strengere stop-metode som i teorien ikke er anderledes fra den barklund bruger, men jeg synes at flash tåger meget med de her streaming sounds, da jeg fx godt kunne få det hele til at virke med streaming=false...

Jo man burde bare kunne sætte autoplay til false og det er det der er så mærkeligt... Jeg har selv også haft problemer med at starte en mp3-lyd streamet med en second offset, hvor den valgte slet ikke at starte sangen... Så et eller andet må være galt med flash, det er ikke helt din og vores skyld.

Skal kigge lidt mere på det.
Avatar billede theselfimages Nybegynder
26. maj 2003 - 11:57 #22
Men har du læst om min "workaround" løsning?

Og hvad mener du med: "da jeg fx godt kunne få det hele til at virke med streaming=false..."? Det er ikke lykkedes mig på noget tidspunkt at stoppe den autoplay ved at sætte denne: mySongPlayer = new SongPlayer("folder/music/", 7, false); til FALSE ... (hvis det altså er det du mener)
Avatar billede pyroman Nybegynder
26. maj 2003 - 12:02 #23
Det jeg gjorde er i nextSong-funktionen...

this.sound.loadSound(this.path+this.unused.pop()+".mp3", FALSE);

Men jeg kan ikke huske om det var før eller efter jeg lavede den ellers ulogiske stop-funktion
Avatar billede theselfimages Nybegynder
26. maj 2003 - 12:12 #24
Ahhh! I see... kunne jeg måske ha' gjort det samme i stedet for min workaround løsning?

Og var der overhovedet med denne linie?
this.sound.loadSound(SongPlayer.path+title+".mp3", true);

Som jeg ændrede til denne:
(før ledte den efter det givne .mp3 nummer lokalt på HD)
this.sound.loadSound(this.path+title+".mp3", true);
Avatar billede theselfimages Nybegynder
26. maj 2003 - 20:38 #25
Der er dog lige ét problem... når jeg "kalder" Playeren med denne: mySongPlayer.playTitle(1);
stop();

Da forekommer det at det kaldte nummer (playTitle(1);) afspilles 2 gange i træk. Altså i stedet for at gå videre til næste uafspillede nummer automatisk, spiller den det kaldte nummer igen. Dette sker jo randomvis, men burde slet ikke forekomme, da Playeren skulle være lavet til IKKE at afspille samme nummer 2 gange før alle andre numre er afspillet.

Dette er det samlede script:

SongPlayer = function(path,number,autoplay) {
    this.path = path;
    this.number = number;
    this.nextSong(autoplay);
}
SongPlayer.prototype.initList = function() {
    this.unused = new Array();
    var i;
    for (i = 1; i <= this.number; i++)
        this.unused.push(i);
    this.unused.sort(function(a,b){ return random(3)-1; });
}
SongPlayer.prototype.play = function() {
    this.sound.start();
}
SongPlayer.prototype.nextSong = function(go_on) {
    delete this.sound.songPlayer;
    delete this.sound;

    this.sound = new Sound(_root);
    this.sound.songPlayer = this;
    this.sound.onSoundComplete = function() {
        this.songPlayer.nextSong(true);
    }
    if (!this.unused.length)
        this.initList();
    this.sound.loadSound(this.path+this.unused.pop()+".mp3", true);
    if (go_on)
        this.play();
    else
        this.sound.stop();
}
SongPlayer.prototype.stop = function() {
    this.sound.stop();
}
SongPlayer.prototype.pause = function() {
    this.paused = true;
    this.position = this.sound.position/1000;
    this.sound.stop();
}
SongPlayer.prototype.resume = function() {
    this.paused = false;
    this.sound.start(this.position);
}
SongPlayer.prototype.isPaused = function() {
    return this.paused;
}
SongPlayer.prototype.playTitle = function(title){
  for(ii=0;ii<this.unused.length;ii++){
    if(this.unused[ii] == title){
      this.unused.slice(ii, 1);
    }
    this.sound.stop();
    this.sound.loadSound(this.path+title+".mp3", true);
    this.play();
    this.sound.onSoundComplete = function() {
        this.songPlayer.nextSong(true);
    }
  }
}
mySongPlayer = new SongPlayer("folder/music/", 6, false);
Avatar billede pyroman Nybegynder
05. juni 2003 - 17:37 #26
Hmmm, for mig virker det fint med at gå videre til næste nummer - så længe at streaming er sat til false, ellers virker den der autostart stadig ikke og jeg har ellers lige hentet den nyeste version af flashplayer...
Avatar billede theselfimages Nybegynder
05. juni 2003 - 17:58 #27
Yep.. det hele virker også fint for mig nu... men..
Problemet med at jeg IKKE kunne undgå autostart, er løst som beskrevet tidligere, på denne måde:

PLAYER:
frame1 : Hele Pyroman's modificerede script af (29/04-2003 14:54:34)
frame2 : stopAllSounds(); (forhindre Player i at autoplay fra start)
frame3 : mySongPlayer.playTitle(1);
        stop();

Som beskrevet KAN det dog forekomme at hvis jeg f.eks. med denne mySongPlayer.playTitle(1); angiver at 1.mp3 skal afspilles, da afspiller den efterfølgene det samme nummer igen. Men som sagt RANDOM.. og altså med muligheden 1/6.

Det jeg efterspørger er blot at det SLET IKKE KAN forekomme at den genspiller samme nummer som det (mySongPlayer.playTitle(1);) starter, når dette altså er færdigafspillet - ikke FØR den har afspillet de øvrige 5 numre.

Men hvordan løses dette?
Mente egentlig at Barklunds oprindelige version tog højde for netop dette.
Avatar billede pyroman Nybegynder
06. juni 2003 - 13:24 #28
tror du ikke det er fordi at hele listen med musik er spillet igennem en gang! For så begynder den forfra med at spille de samme numre igen, ellers så burde midt script ellers tage højde for dette problem da den slicer det valgte nummer ud af musik-listen:

this.unused[ii].slice(ii, 1);

Så jeg kan ikke helt se hvorfor det ikke virker?!
Avatar billede theselfimages Nybegynder
08. juni 2003 - 15:23 #29
Er det så fordi den "tror" at alle numre er gennemspillet på forhånd, idet Playeren jo i keyframe1 startes.. og så "mutes" eller "stoppes" i keyframe2 - får så at blive startet igen med det selvvalgte nummer i keyframe3?
Avatar billede theselfimages Nybegynder
17. juni 2003 - 13:16 #30
Hmm.. men hvis der intet mere er at gøre, må der gerne postes svar så vi kan få lukket dette spørgsmål.
Avatar billede theselfimages Nybegynder
17. juli 2003 - 02:46 #31
Har i noget bud på dette lille problem i forlængelse af ovenstående?

http://www.eksperten.dk/spm/376725
Avatar billede theselfimages Nybegynder
31. juli 2003 - 11:45 #32
Nogen der snart poste et svar her?
Avatar billede barklund Nybegynder
31. juli 2003 - 11:49 #33
Jeg kan da godt, men pyroman lavede vist mest her...
Avatar billede theselfimages Nybegynder
03. oktober 2003 - 12:19 #34
Spørgsmålet lukkes pga. ingen svar
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