audio_recorder.py 810 B

1234567891011121314151617181920212223242526
  1. import base64
  2. from typing import Callable, Optional
  3. from nicegui import events, ui
  4. class AudioRecorder(ui.element, component='audio_recorder.vue'):
  5. def __init__(self, *, on_audio_ready: Optional[Callable] = None) -> None:
  6. super().__init__()
  7. self.recording = b''
  8. def handle_audio(e: events.GenericEventArguments) -> None:
  9. self.recording = base64.b64decode(e.args['audioBlobBase64'].encode())
  10. if on_audio_ready:
  11. on_audio_ready(self.recording)
  12. self.on('audio_ready', handle_audio)
  13. def start_recording(self) -> None:
  14. self.run_method('startRecording')
  15. def stop_recording(self) -> None:
  16. self.run_method('stopRecording')
  17. def play_recorded_audio(self) -> None:
  18. self.run_method('playRecordedAudio')