Erste Version für iOS

unter iOS nicht unterstützt sind AudioRecorder, VideoRecorder,
SprachEingabe, VibrationsSignal. Der BildRecorder kann nur interaktiv
aufnehmen.
This commit is contained in:
Daniel Spittank 2017-02-04 16:58:47 +01:00
commit 1d272caebe
37 changed files with 1646 additions and 0 deletions

View file

@ -0,0 +1,166 @@
# -*- 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.")

View file

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
import velamentum.dateien.Datei
from velamentum.multimedia.Recorder import Recorder
import dialogs
class AudioRecorder(Recorder):
"""Die Klasse AudioRecorder dient der Aufnahme von Audiodaten in eine Datei.
Attribute:
--- von 'Recorder' geerbte ---
"""
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("~/aufnahme.m4a")):
"""Konstruktor. Initialisiert den AudioRecorder.
Parameter:
[optional] pDatei (Datei): Datei, in der die Aufnahme gespeichert
werden soll [Standardwert: Datei mit Pfad '~/aufnahme.m4a'].
"""
Recorder.__init__(self, pDatei)
dialogs.alert('Fehler', 'AudioRecorder auf iOS nicht implementiert.')

View file

@ -0,0 +1,52 @@
# -*- coding: utf-8 -*-
import velamentum.dateien.Datei
from velamentum.multimedia.Recorder import Recorder
import photos
class BildRecorder(Recorder):
"""Die Klasse BildRecorder dient der Aufnahme von Bilddaten in eine Datei.
Attribute:
--- von 'Recorder' geerbte ---
"""
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("/sdcard/aufnahme.jpg")):
"""Konstruktor. Initialisiert den BildRecorder.
Parameter:
[optional] pDatei (Datei): Datei, in der die Aufnahme gespeichert
werden soll [Standardwert: Datei mit Pfad '/scard/aufnahme.jpg'].
"""
Recorder.__init__(self, pDatei)
def aufnehmen(self):
"""Auftrag. Macht ein Foto und speichert es in der angegebenen Datei.
HINWEIS: Die angegebene Datei wird überschrieben.
Parameter
--- keine ---
"""
self.aufnehmenInteraktiv()
def stoppen(self):
"""Auftrag. Dummy. Für Fotos nutzlos.
Parameter
--- keine ---
"""
pass
def aufnehmenInteraktiv(self):
"""Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die
Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird
auf die Standard-Kamera-App zurückgegriffen.
HINWEIS: Die angegebene Datei wird überschrieben.
Parameter:
--- keine ---
"""
imgTmp = photos.capture_image()
imgTmp.save(self.datei.nennePfad(), quality=90)

View file

@ -0,0 +1,132 @@
# -*- coding: utf-8 -*-
import time
import velamentum.dateien.Datei
class Player(object):
"""Die Klasse Player dient der Wiedergabe von Multimediadaten aus einer
Datei.
Attribute:
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):
"""Konstruktor. Initialisiert den Player.
Parameter:
pDatei (Datei): Datei, die wiedergegeben werden soll.
"""
self.datei = pDatei
# Eindeutige ID festlegen zur Verwaltung verschiedener gleichzeitig
# wiederzugebender Streams.
self._id = "%s%04d" % (pDatei.nenneName(), randint(0,4095))
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):
"""Anfrage. Gibt die Datei zurück, die wiedergegeben werden soll.
Parameter:
--- keine ---
Rückgabe (Datei): Datei, die wiedergegeben werden soll.
"""
return self.datei
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 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?
"""
pass
def nenneDauer(self):
"""Anfrage. Gibt die Gesamtdauer der Datei zurück.
Parameter:
--- keine ---
Rückgabe (Zahl): Gesamtdauer der Datei in Millisekunden.
"""
return 0
def nennePosition(self):
"""Anfrage. Gibt die aktuelle Position der Wiedergabe zurück.
Parameter:
--- keine ---
Rückgabe (Zahl): Gesamtdauer der Datei in Millisekunden.
"""
return 0
def setzePosition(self, pPosition):
"""Auftrag. Legt die aktuelle Position der Wiedergabe fest.
Parameter:
pPosition (Zahl): Neue Position in Millisekunden.
"""
pass
def wiedergeben(self):
"""Auftrag. Startet die Wiedergabe der Multimediadaten.
Parameter
--- keine ---
"""
pass
def pausieren(self):
"""Auftrag. Pausiert die Wiedergabe der Multimediadaten. Die Wiedergabe
kann mit 'wiedergeben' fortgesetzt werden.
Parameter
--- keine ---
"""
pass
def stoppen(self):
"""Auftrag. Stoppt die Wiedergabe der Multimediadaten.
Parameter
--- keine ---
"""
pass
# 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.")

View file

@ -0,0 +1,95 @@
# -*- coding: utf-8 -*-
import time
import velamentum.dateien.Datei
class Recorder(object):
"""Die Klasse Recorder dient der Aufnahme von Multimediadaten in eine Datei.
Attribute:
aufnahmeLaeuft (Wahrheitswert): Gibt an, ob gerade eine Aufnahme läuft.
datei (Datei): Die Datei, in der die Aufnahme gespeichert werden soll.
"""
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("~/aufnahme")):
"""Konstruktor. Initialisiert den Recorder.
Parameter:
[optional] datei (Datei): Datei, in der die Aufnahme gespeichert
werden soll [Standardwert: Datei mit Pfad '/scard/aufnahme'].
"""
self.aufnahmeLaeuft = False
self.datei = pDatei
def nimmtAuf(self):
"""Anfrage. Gibt an, ob gerade eine Aufgabe läuft.
Parameter:
--- keine ---
Rückgabe (Wahrheitswert): True falls eine Aufnahme läuft, False sonst.
"""
return self.aufnahmeLaeuft
def nenneDatei(self):
"""Anfrage. Gibt die Datei zurück, in der die Aufnahme gespeichert
werden soll.
Parameter
--- keine ---
Rückgabe (Datei): Datei, in der die Aufnahme gespeichert werden soll.
"""
return self.datei
def setzeDatei(self, pDatei):
"""Auftrag. Legt die Datei fest, in der die Aufnahme gespeichert
werden soll.
Parameter
pDatei (Datei): Datei, in der die Aufnahme gespeichert werden soll.
"""
self.datei = pDatei
def aufnehmen(self):
"""Auftrag. Startet die Aufnahme der Multimediadaten.
HINWEIS: Die angegebene Datei wird überschrieben.
Parameter
--- keine ---
"""
self.aufnahmeLaeuft = True
def stoppen(self):
"""Auftrag. Stoppt die Aufnahme der Multimediadaten.
Parameter
--- keine ---
"""
self.aufnahmeLaeuft = False
def aufnehmenAuto(self, pDauer):
"""Auftrag. Startet eine Aufnahme mit der in 'pDauer' angegebenen Dauer
und beendet die Aufnahme danach automatisch.
HINWEIS: Die angegebene Datei wird überschrieben.
Parameter
pDauer (Zahl): Dauer der Aufnahme.
"""
self.aufnehmen()
time.sleep(pDauer)
self.stoppen()
def aufnehmenInteraktiv(self):
"""Auftrag. Startet eine interaktive Aufnahme. Der Benutzer erhält die
Möglichkeit die Aufnahme interaktiv zu starten und zu stoppen. Dazu wird
in der Regel auf die jeweilige Recorder-Applikation zurückgegriffen.
HINWEIS: Die angegebene Datei wird überschrieben.
Parameter:
--- keine ---
"""
pass

View file

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
import velamentum.dateien.Datei
from velamentum.multimedia.Recorder import Recorder
import dialogs
class VideoRecorder(Recorder):
"""Die Klasse VideoRecorder dient der Aufnahme von Videodaten in eine Datei.
Attribute:
--- von 'Recorder' geerbte ---
"""
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("~/aufnahme.mp4")):
"""Konstruktor. Initialisiert den VideoRecorder.
Parameter:
[optional] pDatei (Datei): Datei, in der die Aufnahme gespeichert
werden soll [Standardwert: Datei mit Pfad '/scard/aufnahme.m4a'].
"""
Recorder.__init__(self, pDatei)
dialogs.alert('Fehler', 'VideoRecorder auf iOS nicht implementiert.')

View file