# -*- coding: utf-8 -*- import time import random import velamentum.dateien.Datei from velamentum.multimedia.Player import Player import sound class AudioPlayer(Player): """Die Klasse Player dient der Wiedergabe von Multimediadaten aus einer Datei. Attribute: --- von 'Player' geerbte --- datei (Datei): Die Datei, deren Inhalt wiedergegeben werden soll. dauer (Zahl): Gesamtdauer der Datei in Millisekunden. position (Zahl): Die aktuelle Position der Wiedergabe in Millisekunden. wiederholen (Wahrheitswert): Gibt an, ob die Wiedergabe am Ende von vorne beginnen soll. """ def __init__(self, pDatei, pSofortWiedergeben=False): """Konstruktor. Initialisiert den Player. Parameter: pDatei (Datei): Datei, die wiedergegeben werden soll. [optional] pSofortWiedergeben (Wahrheitswert): Soll die Datei direkt nach der Initialisierung wiedergegeben werden? """ self.datei = pDatei # Eindeutige ID festlegen zur Verwaltung verschiedener gleichzeitig # wiederzugebender Streams. self._id = "%s%04d" % (pDatei.nenneName(), random.randint(0,8191)) if self.datei.istVorhanden(): self.player = sound.Player(self.datei.nennePfad()) else: print("Fehler. Datei %s nicht gefunden." % pDatei.nennePfad()) def __del__(self): """Destruktor. Stellt sicher, dass die Wiedergabe beim Löschen des Objekts beendet wird. Parameter: --- keine --- """ pass def nenneDauer(self): """Anfrage. Gibt die Gesamtdauer der Datei zurück. Parameter: --- keine --- Rückgabe (Zahl): Gesamtdauer der Datei in Millisekunden. """ return self.player.duration * 1000 def nennePosition(self): """Anfrage. Gibt die aktuelle Position der Wiedergabe zurück. Parameter: --- keine --- Rückgabe (Zahl): Aktuelle Position der Wiedergabe in Millisekunden. """ return self.player.current_time * 1000 def setzePosition(self, pPosition): """Auftrag. Legt die aktuelle Position der Wiedergabe fest. Parameter: pPosition (Zahl): Neue Position in Millisekunden. """ # Position auf gültigen Bereich (0 - dauer) beschränken. if pPosition > self.dauer: pPosition = self.dauer elif pPosition < 0: pPosition = 0 self.player.current_time = pPosition/1000 def nenneDatei(self): """Anfrage. Gibt die Datei zurück, die wiedergegeben werden soll. Parameter: --- keine --- Rückgabe (Datei): Datei, die wiedergegeben werden soll. """ return self.datei def setzeDatei(self, pDatei): """Auftrag. Legt die Datei fest, die wiedergegeben werden soll. Parameter: pDatei (Datei): Datei, die wiedergegeben werden soll. """ if pDatei.istVorhanden(): self.player = sound.Player(pDatei.nennePfad()) Player.setzeDatei(self, pDatei) else: print("Fehler. Datei %s nicht gefunden." % pDatei.nennePfad()) def nenneWiederholen(self): """Anfrage. Gibt zurück, ob die Wiedergabe am Ende wieder von vorne beginnen soll. Parameter: --- keine --- Rückgabe (Wahrheitswert): Soll die Datei wiederholt wiedergegeben werden? """ return True if self.player.number_of_loops == -1 else False def setzeWiederholen(self, pWiederholen): """Auftrag. Legt fest, ob die Wiedergabe am Ende wieder von vorne beginnen soll. Parameter: pWiederholen (Wahrheitswert): Soll die Datei wiederholt wiedergegeben werden? """ if pWiederholen: self.player.number_of_loops = -1 else: self.player.number_of_loops = 0 def wiedergeben(self): """Auftrag. Startet die Wiedergabe der Multimediadaten. Parameter --- keine --- """ self.player.play() def pausieren(self): """Auftrag. Pausiert die Wiedergabe der Multimediadaten. Die Wiedergabe kann mit 'wiedergeben' fortgesetzt werden. Parameter --- keine --- """ self.player.pause() def stoppen(self): """Auftrag. Stoppt die Wiedergabe der Multimediadaten. (Wie 'pausieren', Wiedergabe kann jedoch nicht fortgesetzt werden, sondern beginnt dann von vorne. Parameter --- keine --- """ self.player.stop() # Attribute (verdeckte Getter und Setter) datei = property(nenneDatei, setzeDatei, doc="Die Datei, deren Inhalt " \ "wiedergegeben werden soll.") dauer = property(nenneDauer, doc="Die Gesamtdauer der Datei in Millisekunden.") position = property(nennePosition, setzePosition, doc = "Die aktuelle "\ "Position der Wiedergabe.") wiederholen = property(nenneWiederholen, setzeWiederholen, doc="Gibt an, "\ "ob die Wiedergabe am Ende wieder von vorne beginnen soll.")