velamentum/source/Android/multimedia/JNIAudioRecorder.py

92 lines
3.3 KiB
Python
Raw Normal View History

# -*- 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()