# -*- coding: utf-8 -*- import time import random import velamentum.dateien.Datei from velamentum.multimedia.Player import Player from velamentum.android import * 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(): androide.mediaPlay(self.datei.nennePfad(), self._id, pSofortWiedergeben) self.dauer = int(androide.mediaPlayInfo(self._id)[1]["duration"]) 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 --- """ androide.mediaPlayClose(self._id) def nenneDauer(self): """Anfrage. Gibt die Gesamtdauer der Datei zurück. Parameter: --- keine --- Rückgabe (Zahl): Gesamtdauer der Datei in Millisekunden. """ return self.dauer def nennePosition(self): """Anfrage. Gibt die aktuelle Position der Wiedergabe zurück. Parameter: --- keine --- Rückgabe (Zahl): Aktuelle Position der Wiedergabe in Millisekunden. """ return int(androide.mediaPlayInfo(self._id)[1]["position"]) 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 androide.mediaPlaySeek(pPosition, self._id) 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. """ Player.setzeDatei(self, pDatei) if pDatei.istVorhanden(): androide.mediaPlay(self.datei.nennePfad(), self._id, False) self.dauer = int(androide.mediaPlayInfo(self._id)[1]["duration"]) 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 androide.mediaPlayInfo(self._id)[1]["looping"] 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? """ return androide.mediaPlaySetLooping(self._id, pWiederholen) def gibtWieder(self): """Anfrage. Gibt an, ob die Datei gerade wiedergegeben wird. Parameter: --- keine --- Rückgabe (Wahrheitswert): True falls gerade eine Wiedergabe läuft, False sonst. """ return androide.mediaIsPlaying(self._id)["result"] def wiedergeben(self): """Auftrag. Startet die Wiedergabe der Multimediadaten. Parameter --- keine --- """ androide.mediaPlayStart(self._id) def pausieren(self): """Auftrag. Pausiert die Wiedergabe der Multimediadaten. Die Wiedergabe kann mit 'wiedergeben' fortgesetzt werden. Parameter --- keine --- """ androide.mediaPlayPause(self._id) def stoppen(self): """Auftrag. Stoppt die Wiedergabe der Multimediadaten. (Wie 'pausieren', Wiedergabe kann jedoch nicht fortgesetzt werden, sondern beginnt dann von vorne. Parameter --- keine --- """ androide.mediaPlayPause(self._id) self.setzePosition(0) # 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.")