Seite 1 von 1

Sounds mit pymedia mehrfach abspielen

Verfasst: Donnerstag 24. August 2006, 13:43
von Shana
Hallo,

ich hab nun folgendes Problem, ich spiele mit pymedia eine mp3 Datei ab, kann diese auch stoppen. Nun möchte ich die Datei allerdings nocheinmal abspielen, bekomme aber nur eine Fehlermeldung.
Für hilfreiche Tipps wäre ich sehr dankbar.

Hier mein Code:

Code: Alles auswählen

import pymedia
import time

Code: Alles auswählen

    def OnStart(self, event):
        self.play.start()
        thread.start_new_thread(self.play.startPlayback,(str(self.aktuelle_datei),))
        while self.play.isPlaying():
            time.sleep( 0.01 )

    def OnStop(self, event):
        self.play.stop()
Zuletzt noch die Fehlermeldung:
Bild

Verfasst: Freitag 25. August 2006, 22:04
von murph
das problem ist der neue thread!
kannst du das aus dem thread rausnehmen?

Verfasst: Sonntag 27. August 2006, 09:51
von Shana
Das ist meiner Ansicht nicht so gut, dass aus dem Thread zu nehmen, denn dann wäre mein Programm ja damit beschäftigt, das Lied abzuspielen und man könnte in der Zeit nichts anderes mehr machen.

Gibt es keine andere Möglichkeit?

Verfasst: Sonntag 27. August 2006, 10:24
von DatenMetzgerX
Wie wäre es, wenn du das andere in einen neuen Thread tust ;)

Verfasst: Sonntag 27. August 2006, 11:12
von Joghurt
Also ich würde vermuten, dass startPlayback das automatisch im Hintergrund abspielt. Der neue Thread wird also direkt von pymedia erstellt.

Verfasst: Sonntag 27. August 2006, 19:47
von Shana
Ja, das schon, das Problem ist allerdings, dass ich überprüfen möchte, ob das aktuelle zu Ende ist, um dann das neue Lied zu starten. Diese While-Schleife, die ich oben gepostet habe, die soll man benutzen ( steht im Modul, dass ich importiere ~> pymedia ). Allerdings wird diese nie ausgeführt, was ich auch sehr komisch finde. Ich hatte gedacht, dass diese solange läuft, bis das Lied zu Ende ist, ist aber nicht so. Also weiß ich nun nicht, wie ich gucken kann, wann das Lied zu Ende ist.

Verfasst: Sonntag 27. August 2006, 19:52
von murph
also das musst du genauer (mit kompletten code) erklären.
also an sich sieht ja die isPlaying ganz vernünftig und verständlich an.

Verfasst: Sonntag 27. August 2006, 20:05
von Shana

Code: Alles auswählen

self.OnStart(self, event=True):
    self.OnStop()
    time.sleep(0.5)
    self.play.start()
    thread.start_new_thread(self.play.startPlayback,(str(self.aktuelle_datei),))
    while self.play.isPlaying():
        time.sleep(0.01)
Hier ist ja das Problem, dass die Wiedergabe in einem neuen Thread geladen wird, da sonst das Problem ist, dass das Programm mit dem Wiedergeben beschäftigt ist und man nichts anderes mehr machen kann. Durch den Thread ist es auch so, dass die While-Schleife nicht durchlaufen wird. So kann man jetzt nicht feststellen, wann die Wiedergabe zu Ende ist. Gibt es nicht vielleicht eine Methode, diesen Thread 'auszufragen'?

Verfasst: Sonntag 27. August 2006, 20:13
von murph
dann liefert das ganze doch schon das, was du willst, oder nicht?
du bekommst das ende genau mit. dann ist ja die funktion ausgeführt.
bei der while-schleife machst du doch auch nichts anderes als warten, wie du das so auch machst.

Verfasst: Montag 28. August 2006, 10:21
von Shana
Aber durch den neuen Thread wird die While-Schleife in der Funktion doch garnicht durchlaufen!

Verfasst: Montag 28. August 2006, 16:28
von Spaten
vielleicht musst du die Schleife mit in eine neue Funktion bzw Methode schreiben,
die du dann in einem neuen Thread öffnest.
(ist mir gerade so eingefallen, werds vielleicht mal ausprobieren)

Code: Alles auswählen

def starter(self):
   self.play.start()
   self.play.startPlayback(self.aktuelle_datei)
   while self.play.isPlaying():
        time.sleep(0.01)

def OnStart(self, event=True):
    self.OnStop()
    time.sleep(0.5)
    thread.start_new_thread(self.starter)
Weiß nicht, ob das so funktioniert, kann ich dann a auch mal selber ausprobieren,
aber ich wollte dir nur mal meine Idee mitteilen ;)

Verfasst: Montag 28. August 2006, 18:49
von Shana
Jap, danke, habs ausprobiert und es klappt jetzt. Danke!

Code: Alles auswählen

def starter(self, event=True):
        self.play.start()
        self.play.startPlayback(self.aktuelle_datei)
        while self.play.isPlaying():
            time.sleep(0.01)

        self.OnNext()

def OnStart(self, event=True):
        '''
        startet die Wiedergabe
        '''
            self.OnStop()
            time.sleep(0.5)
            thread.start_new_thread(self.starter,(True,))

Verfasst: Dienstag 29. August 2006, 10:03
von Joghurt
Warum in alles in der Welt fragst du jede Hunderstelsekunde ab? Reicht nicht alle 10 Sekunden, oder von mir aus jede Sekunde?

Kannst du pymedia nicht einfach fragen, wie lange der Song ist? Dann kannst du einfach die angegebene Zeit warten.