92 lines
3.3 KiB
Python
92 lines
3.3 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
import velamentum.dateien.Datei
|
||
|
from velamentum.multimedia.Recorder import Recorder
|
||
|
from velamentum.ui.dialoge.Dialog import Dialog
|
||
|
|
||
|
from jnius import autoclass
|
||
|
|
||
|
from velamentum.android import *
|
||
|
|
||
|
class JNIAudioRecorder(Recorder):
|
||
|
"""Die Klasse AudioRecorder dient der Aufnahme von Tondaten in eine Datei.
|
||
|
|
||
|
BUG: Die Nutzung aus der QPython-Konsole funktioniert derzeit nicht.
|
||
|
Der Aufruf aus einer Skriptdatei funktioniert hingegen problemlos.
|
||
|
|
||
|
Attribute:
|
||
|
--- von 'Recorder' geerbte ---
|
||
|
"""
|
||
|
|
||
|
def __init__(self, pDatei=velamentum.dateien.Datei.Datei("/sdcard/aufnahme.m4a")):
|
||
|
"""Konstruktor. Initialisiert den JNIAudioRecorder.
|
||
|
|
||
|
Parameter:
|
||
|
[optional] pDatei (Datei): Datei, in der die Aufnahme gespeichert
|
||
|
werden soll [Standardwert: Datei mit Pfad
|
||
|
'/sdcard/aufnahme.m4a'].
|
||
|
"""
|
||
|
Recorder.__init__(self, pDatei)
|
||
|
|
||
|
# Recorder initialisieren
|
||
|
MediaRecorder = autoclass('android.media.MediaRecorder')
|
||
|
AudioSource = autoclass('android.media.MediaRecorder$AudioSource')
|
||
|
OutputFormat = autoclass('android.media.MediaRecorder$OutputFormat')
|
||
|
AudioEncoder = autoclass('android.media.MediaRecorder$AudioEncoder')
|
||
|
self.__mRecorder = MediaRecorder()
|
||
|
self.__mRecorder.setOutputFile(pDatei.nennePfad()) # Pfad der Datei
|
||
|
self.__mRecorder.setAudioSource(AudioSource.MIC) # Aufnahme vom Mikrofon
|
||
|
self.__mRecorder.setAudioChannels(1) # Mono
|
||
|
self.__mRecorder.setAudioEncodingBitRate(131072) # 128 kbps
|
||
|
self.__mRecorder.setAudioSamplingRate(48000) # 48 kHz
|
||
|
# ACHTUNG: Reihenfolge ist relevant! Erst Format, dann Encoder!
|
||
|
self.__mRecorder.setOutputFormat(OutputFormat.MPEG_4) # MP4-Container
|
||
|
self.__mRecorder.setAudioEncoder(AudioEncoder.AAC) # AAC-Format
|
||
|
|
||
|
def __del__(self):
|
||
|
"""Destruktor. Notwendig zur Freigabe des MediaRecorders beim Löschen
|
||
|
des Python-Objekts.
|
||
|
|
||
|
Parameter:
|
||
|
--- keine ---
|
||
|
"""
|
||
|
self.__mRecorder.release()
|
||
|
|
||
|
def aufnehmen(self):
|
||
|
"""Auftrag. Startet die Aufnahme der Multimediadaten.
|
||
|
|
||
|
HINWEIS: Die angegebene Datei wird überschrieben.
|
||
|
|
||
|
Parameter
|
||
|
--- keine ---
|
||
|
"""
|
||
|
Recorder.aufnehmen(self)
|
||
|
self.__mRecorder.setOutputFile(self.datei.nennePfad())
|
||
|
self.__mRecorder.prepare()
|
||
|
self.__mRecorder.start()
|
||
|
|
||
|
def stoppen(self):
|
||
|
"""Auftrag. Stoppt die Aufnahme der Multimediadaten.
|
||
|
|
||
|
Parameter
|
||
|
--- keine ---
|
||
|
"""
|
||
|
Recorder.stoppen(self)
|
||
|
self.__mRecorder.stop()
|
||
|
|
||
|
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 ---
|
||
|
"""
|
||
|
self.aufnehmen()
|
||
|
dialog = Dialog("Audioaufnahme", "Aufnahme gestartet. Zum Beenden" \
|
||
|
"'Ok' drücken.")
|
||
|
dialog.zeige()
|
||
|
self.stoppen()
|
||
|
|