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