178 lines
5.9 KiB
Python
178 lines
5.9 KiB
Python
# -*- 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.")
|
|
|