Added audio recorder controller.
This commit is contained in:
parent
68e48205f3
commit
dd07501c5c
131
src/controller/audioRecorder.py
Normal file
131
src/controller/audioRecorder.py
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import time
|
||||||
|
import os
|
||||||
|
import tempfile
|
||||||
|
import sound_lib
|
||||||
|
import widgetUtils
|
||||||
|
import sound
|
||||||
|
import output
|
||||||
|
from wxUI.dialogs import audioRecorder as gui
|
||||||
|
from mysc.thread_utils import call_threaded
|
||||||
|
|
||||||
|
class audioRecorder(object):
|
||||||
|
def __init__(self):
|
||||||
|
self.dialog = gui.audioRecorderDialog()
|
||||||
|
self.recorded = False
|
||||||
|
self.recording = None
|
||||||
|
self.duration = 0
|
||||||
|
self.playing = None
|
||||||
|
widgetUtils.connect_event(self.dialog.play, widgetUtils.BUTTON_PRESSED, self.on_play)
|
||||||
|
widgetUtils.connect_event(self.dialog.pause, widgetUtils.BUTTON_PRESSED, self.on_pause)
|
||||||
|
widgetUtils.connect_event(self.dialog.record, widgetUtils.BUTTON_PRESSED, self.on_record)
|
||||||
|
widgetUtils.connect_event(self.dialog.discard, widgetUtils.BUTTON_PRESSED, self.on_discard)
|
||||||
|
if self.dialog.get_response() == widgetUtils.OK:
|
||||||
|
self.postprocess()
|
||||||
|
|
||||||
|
def on_pause(self, *args, **kwargs):
|
||||||
|
if self.dialog.get("pause") == _(u"Pause"):
|
||||||
|
self.recording.pause()
|
||||||
|
self.dialog.set("pause", _(u"&Resume"))
|
||||||
|
elif self.dialog.get("pause") == _(u"Resume"):
|
||||||
|
self.recording.play()
|
||||||
|
self.dialog.set("pause", _(U"&Pause"))
|
||||||
|
|
||||||
|
def on_record(self, *args, **kwargs):
|
||||||
|
if self.recording != None:
|
||||||
|
self.stop_recording()
|
||||||
|
self.dialog.disable_control("pause")
|
||||||
|
else:
|
||||||
|
self.start_recording()
|
||||||
|
self.dialog.enable_control("pause")
|
||||||
|
|
||||||
|
def start_recording(self):
|
||||||
|
self.dialog.disable_control("attach_exists")
|
||||||
|
self.file = tempfile.mktemp(suffix='.wav')
|
||||||
|
self.recording = sound.get_recording(self.file)
|
||||||
|
self.duration = time.time()
|
||||||
|
self.recording.play()
|
||||||
|
self.dialog.set("record", _(u"&Stop"))
|
||||||
|
output.speak(_(u"Recording"))
|
||||||
|
|
||||||
|
def stop_recording(self):
|
||||||
|
self.recording.stop()
|
||||||
|
self.duration = int(time.time()-self.duration)
|
||||||
|
self.recording.free()
|
||||||
|
output.speak(_(u"Stopped"))
|
||||||
|
self.recorded = True
|
||||||
|
self.dialog.set("record", _(u"&Record"))
|
||||||
|
self.file_attached()
|
||||||
|
|
||||||
|
def file_attached(self):
|
||||||
|
self.dialog.set("pause", _(u"&Pause"))
|
||||||
|
self.dialog.disable_control("record")
|
||||||
|
self.dialog.enable_control("play")
|
||||||
|
self.dialog.enable_control("discard")
|
||||||
|
self.dialog.disable_control("attach_exists")
|
||||||
|
self.dialog.enable_control("attach")
|
||||||
|
self.dialog.play.SetFocus()
|
||||||
|
|
||||||
|
def on_discard(self, *args, **kwargs):
|
||||||
|
if self.playing:
|
||||||
|
self._stop()
|
||||||
|
if self.recording != None:
|
||||||
|
self.cleanup()
|
||||||
|
self.dialog.disable_control("attach")
|
||||||
|
self.dialog.disable_control("play")
|
||||||
|
self.file = None
|
||||||
|
self.dialog.enable_control("record")
|
||||||
|
self.dialog.enable_control("attach_exists")
|
||||||
|
self.dialog.record.SetFocus()
|
||||||
|
self.dialog.disable_control("discard")
|
||||||
|
self.recording = None
|
||||||
|
output.speak(_(u"Discarded"))
|
||||||
|
|
||||||
|
def on_play(self, *args, **kwargs):
|
||||||
|
if not self.playing:
|
||||||
|
call_threaded(self._play)
|
||||||
|
else:
|
||||||
|
self._stop()
|
||||||
|
|
||||||
|
def _play(self):
|
||||||
|
output.speak(_(u"Playing..."))
|
||||||
|
# try:
|
||||||
|
self.playing = sound_lib.stream.FileStream(file=unicode(self.file), flags=sound_lib.stream.BASS_UNICODE)
|
||||||
|
self.playing.play()
|
||||||
|
self.dialog.set("play", _(u"&Stop"))
|
||||||
|
try:
|
||||||
|
while self.playing.is_playing:
|
||||||
|
pass
|
||||||
|
self.dialog.set("play", _(u"&Play"))
|
||||||
|
self.playing.free()
|
||||||
|
self.playing = None
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def _stop(self):
|
||||||
|
output.speak(_(u"Stopped"))
|
||||||
|
self.playing.stop()
|
||||||
|
self.playing.free()
|
||||||
|
self.dialog.set("play", _(u"&Play"))
|
||||||
|
self.playing = None
|
||||||
|
|
||||||
|
def postprocess(self):
|
||||||
|
if self.file.lower().endswith('.wav'):
|
||||||
|
output.speak(_(u"Recoding audio..."))
|
||||||
|
sound.recode_audio(self.file)
|
||||||
|
self.wav_file = self.file
|
||||||
|
self.file = '%s.ogg' % self.file[:-4]
|
||||||
|
|
||||||
|
def cleanup(self):
|
||||||
|
if self.playing and self.playing.is_playing:
|
||||||
|
self.playing.stop()
|
||||||
|
if self.recording != None:
|
||||||
|
if self.recording.is_playing:
|
||||||
|
self.recording.stop()
|
||||||
|
try:
|
||||||
|
self.recording.free()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
os.remove(self.file)
|
||||||
|
if hasattr(self, 'wav_file'):
|
||||||
|
os.remove(self.wav_file)
|
Loading…
Reference in New Issue
Block a user