Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 03-06-2005, 11:57   #1 (permalink)
Neuer User
 
Registriert seit: May 2005
Beiträge: 14
Pause - Button und Sound.position

Hallo,
habe einen simplen MP3-Player auf XML-Basis programmiert. Soweit geht alles, nur die Pausetaste spinnt - oder vielmehr die Anzeige Sound.position, die sich bei einem Wechsel des Tracks einfach nicht auf Null zurücksetzt, nur wenn ich vorher Stop drücke. Dadurch wird natürlich beim Pausieren die falsche Stelle gemerkt - wie kann man das umgehen?



Steffen

Symptome hier

Quelltext:

ActionScript:
  1. var trackObj = new Sound();
  2. var spieltgrad = true;
  3.  
  4. mein_xml = new XML();
  5. mein_xml.ignoreWhite = true;
  6. mein_xml.load("trkdaten.xml");
  7.  
  8. // Lesevorgang
  9. mein_xml.onLoad = function(status) {
  10.     if (status && this.loaded) {
  11.     anzahl = mein_xml.firstChild.childNodes.length;
  12.     geladen = true;
  13.     akttrack = 0;
  14.     ladeTrack(akttrack);
  15.     }
  16. };
  17.  
  18. // Sound Einladen
  19. function ladeTrack(deraktTrack) {
  20.     track = mein_xml.firstChild.childNodes[deraktTrack].attributes.trk;
  21.     trackname = mein_xml.firstChild.childNodes[deraktTrack].attributes.tname;
  22.     trackObj.loadSound(track,true);
  23.     pausewert = 0;
  24.     if (spieltgrad == false) {
  25.         trackObj.stop();
  26.     }
  27.     else{
  28.         trackObj.start(0);
  29.     }
  30.    
  31.     titel_txt.text = trackname;
  32. }
  33.  
  34. // Schleife
  35. trackObj.onSoundComplete = function() {
  36.     trackObj.stop();
  37.     if (geladen && akttrack<anzahl-1) {
  38.         akttrack++;
  39.         ladeTrack(akttrack);
  40.     }
  41.     else {
  42.         akttrack=0;
  43.         ladeTrack(akttrack);
  44.     }
  45. }
  46.  
  47.  
  48.  
  49. // Vor Button
  50. vor.onRelease = function() {
  51.     trackObj.stop();
  52.     if (geladen && akttrack<anzahl-1) {
  53.         akttrack++;
  54.         ladeTrack(akttrack);
  55.     }
  56.     else {
  57.         akttrack=0;
  58.         ladeTrack(akttrack);
  59.     }
  60. };
  61.  
  62. // Zurück Button
  63. zurueck.onRelease = function() {
  64.     trackObj.stop();
  65.     if (geladen && akttrack>0) {
  66.         akttrack--;
  67.         ladeTrack(akttrack);
  68.     }
  69.     else {
  70.         akttrack=anzahl-1;
  71.         ladeTrack(akttrack);
  72.        
  73.     }
  74. };
  75.  
  76. // Pause Button
  77. pauser.onRelease = function() {
  78.     trace(trackObj.position +"  "+trackObj.duration);
  79.     if (spieltgrad == true) {
  80.         pausewert=trackObj.position
  81.         trackObj.stop();
  82.         spieltgrad = false;
  83.         ppressed = true;
  84.     }
  85.     else if (ppressed == true){
  86.         spielvon = Math.round(pausewert/1000);
  87.         trackObj.start(spielvon);
  88.         spieltgrad=true;
  89.         ppressed=false;
  90.     }
  91.    
  92.        
  93. };
  94.  
  95. // Play Button
  96. spiel.onRelease = function() {
  97.     if (spieltgrad == false) {
  98.         spielvon = Math.round(pausewert/1000);
  99.         trackObj.start(spielvon);
  100.         pausewert=0;
  101.         spieltgrad=true;
  102.     }
  103. };
  104.  
  105. // Stop Button
  106. halt.onRelease = function(){
  107.     trackObj.stop();
  108.     spieltgrad = false;
  109.     pausewert = 0;
  110. };
spakkomat ist offline   Mit Zitat antworten
Alt 03-06-2005, 14:01   #2 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Hi!
Pack mal beim Laden noch diese Zeile mit rein:
ActionScript:
  1. var trackObj = new Sound();
Dann sollte es gehen.
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 03-06-2005, 14:13   #3 (permalink)
Neuer User
 
Registriert seit: May 2005
Beiträge: 14
Meintest du so:
ActionScript:
  1. // Funktion, welche die Daten der XML-Datei verarbeitet
  2. function ladeTrack(deraktTrack) {
  3.     var trackObj = new Sound();
  4.     track = mein_xml.firstChild.childNodes[deraktTrack].attributes.trk;
  5.     trackname = mein_xml.firstChild.childNodes[deraktTrack].attributes.tname;
  6.     trackObj.loadSound(track,true);
  7.     pausewert = 0;
  8.     if (spieltgrad == false) {
  9.         trackObj.stop();
  10.     }
  11.     else{
  12.         trackObj.start(0);
  13.     }
  14.    
  15.     titel_txt.text = trackname;
  16. }

...dann geht leider gar nichts mehr....
ich habe eine Behelfslösung gefunden, indem ich statt Sound.position die Differenz von getTimer() werwende. Scheint mir nicht wirklich die wahre Eleganz zu sein, aber funzt ,wie's aussieht.
spakkomat ist offline   Mit Zitat antworten
Alt 03-06-2005, 14:21   #4 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Wie? Geht nicht? Sche**e! Naja, dachte, das klappt. Aber wenn du's nun selber gelöst hast - umso besser.
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 03-06-2005, 15:03   #5 (permalink)
Neuer User
 
Registriert seit: May 2005
Beiträge: 14
Ich hab's nicht wirklich gelöst - wenn ich das von der Remote Site aus abrufe klappt es nicht gut, da ich über getTimer() die Zeit mitstoppe, die der Buffer braucht. Auf dem eigenen Rechner läufts so super, auf der Website nicht. Ich habe jetzt _soundbuftime auf 1 gesetzt, dadurch geht es so leidlich, aber sehr unpräzise..(Neue Variante ) Noch jemand 'ne Idee?
spakkomat ist offline   Mit Zitat antworten
Alt 03-06-2005, 15:09   #6 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Wenn ich das hier richtig verstanden habe, geht es um einen bekannten Flash Bug: Bei Streamsounds wird beim Laden eines neuen Sounds in ein Soundobjekt die Position nicht zurückgesetzt, sondern "aufaddiert".

Workaround: vor dem Laden eines neuen Sounds das Soundobjekt löschen und neu instanzieren.
__________________
RTFM
Wie man Fragen richtig stellt.

Achim Bindannmalweg

Money makes the world go round, fear makes it turn much faster.
(New Model Army)
sonar ist offline   Mit Zitat antworten
Alt 03-06-2005, 15:15   #7 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Zitat:
Zitat von Der Frager
Hi!
Pack mal beim Laden noch diese Zeile mit rein:
ActionScript:
  1. var trackObj = new Sound();
Dann sollte es gehen.
@sonar: Dann müsste das doch aber klappen, oder nicht?
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 03-06-2005, 15:20   #8 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
@Frager: _sollte_ klappen ja... ich kann nur sagen, wie ich's gemacht hab und wie's bei mir geklappt hat: delete + neu instanzieren ...
__________________
RTFM
Wie man Fragen richtig stellt.

Achim Bindannmalweg

Money makes the world go round, fear makes it turn much faster.
(New Model Army)
sonar ist offline   Mit Zitat antworten
Alt 03-06-2005, 15:24   #9 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Ok. Eine Frage hätte ich da noch Vorgestern meinte jemand, dass das Streamen (auch nach einer Neuinstanzierung) im Hinterfrund weiterlaufen würde. Ist da was dran? War für mich nicht nachvollziehbar...
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 03-06-2005, 15:29   #10 (permalink)
Neuer User
 
Registriert seit: May 2005
Beiträge: 14
Okay - ich gebe ja meine AS-Unerfahrenheit offen zu, aber... Löschen und neu Instanzieren, wie mach ich das in diesem Beispiel - innerhalb der Funktion geht's jedenfalls nicht:

ActionScript:
  1. function ladeTrack(deraktTrack) {
  2.     track = mein_xml.firstChild.childNodes[deraktTrack].attributes.trk;
  3.     trackname = mein_xml.firstChild.childNodes[deraktTrack].attributes.tname;
  4.     if(trackObj){
  5.                 delete trackObj;
  6.                
  7.         }
  8.     var trackObj = new Sound();
  9.     trackObj.loadSound(track,true);
  10.     pausewert = 0;
  11.     if (spieltgrad == false) {
  12.         trackObj.stop();
  13.     }
  14.     else{
  15.         trackObj.start(0);
  16.     }
  17.    
  18.     titel_txt.text = trackname;
  19. }
spakkomat ist offline   Mit Zitat antworten
Alt 03-06-2005, 15:33   #11 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
...klopp mal das "var" davor weg und vielleicht noch ein "this" dazu:
ActionScript:
  1. trackObj = new Sound(this);
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 03-06-2005, 15:45   #12 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Zitat:
Zitat von Der Frager
Ok. Eine Frage hätte ich da noch Vorgestern meinte jemand, dass das Streamen (auch nach einer Neuinstanzierung) im Hinterfrund weiterlaufen würde. Ist da was dran? War für mich nicht nachvollziehbar...
Kann ich auch nicht nachvollziehen...

Hier mal ein Beispiel: http://www.andreasweidinger.de
Da in Diskographie, Konzertwerke oder Filmographie Soundbeispiele in den Player unten laden. Und das schnell hintereinander - also wenn eins lädt, das nächste laden usw.
Würde da im Hintergrund weitergestreamt, müsste das Laden ja irgendwann mal fürchterlich langsam werden... was es aber nicht tut.
__________________
RTFM
Wie man Fragen richtig stellt.

Achim Bindannmalweg

Money makes the world go round, fear makes it turn much faster.
(New Model Army)
sonar ist offline   Mit Zitat antworten
Alt 03-06-2005, 15:47   #13 (permalink)
Neuer User
 
Registriert seit: May 2005
Beiträge: 14
Danke. Das mit dem var hat schon gereicht. So wirklich präzise isses jetzt immer noch nicht, aber wenigstens zählt er jetzt von null.
spakkomat ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele