2.6 KiB
2.6 KiB
Fitur ASR / Push-to-Talk (TUI)
Menambahkan jenis model asr ke moop dan fitur push-to-talk di TUI:
tekan tombol → bicara → stop → teks hasil transkripsi masuk ke form input
(tidak auto-submit).
moop
MODEL_TYPES+=asr(self-healing:INSERT OR IGNOREsaat init, DB lama aman).asr_endpoint()helper ditambahkan.- TUI: tipe 'asr' muncul di Model > Select Model (label "Speech Transcription") dan di Manage Sets (add type / set default).
Konfigurasi (config.yaml, blok asr:)
asr:
record_dir : "~/.config/hendrik/recordings" # lokasi file rekaman
record_key : f9 # f1..f12 / ctrl-<huruf>
record_backend : pulse # pulse | alsa | oss | windows (dshow)
device : default
windows_mic : "" # backend=windows: nama device dshow
format : wav # wav | ogg(libopus)
sample_rate : 16000
channels : 1
max_seconds : 60 # auto-stop pengaman
transcribe_timeout: 60
keep_recordings : true
Alur push-to-talk (interfaces/tui/talk.py)
F9mulai rekam (ffmpeg subprocess, non-blocking). Status bar:● REC(merah blink).F9lagi ATAUEnter→ stop → transkrip (thread) → hasil disisipkan ke form di posisi kursor. Status bar:TRANSCRIBE.EnterTIDAK submit; submitCtrl+Enter.Backspace/Esc→ batal (rekaman dibuang / transkrip diabaikan, incl. race saat hasil sudah menunggu).Ctrl+Ctetap exit kapan pun; saat exit, rekaman aktif otomatis dibersihkan.- ffmpeg mencapai
max_seconds→ auto stop+transkrip. - Validasi:
asrmodel set belum diset → pesan panduan; device bisu (peak RMS dari wav di bawah ambang) → "Rekaman kosong", transkrip dilewati.
Transkripsi (tools/asr.py)
POST {base_url}/audio/transcriptionsmultipart (file + model), gaya OpenAI.- Memakai seluruh chain moop
asr(rotasi model/provider ikut priority), pola sama dengan tools/imagegen.py. HTTP 200 + text kosong = valid ("no speech"). - Provider/Model dicontohkan: OpenRouter
qwen/qwen3-asr-1.7b(modalityaudio->transcription; endpoint/audio/transcriptionsdikonfirmasi hidup; teruji HTTP 200 dengan usage.seconds dari tone 2 detik).
Catatan WSL2
- Output audio WSLg (sink) bekerja; input mic (RDPSource) TIDAK tersambung pada
WSL 3.0.1/WSLg 1.0.79 (handshake RDP hanya accept
rdpsnd, tanpa kanal audio-in; source RDPSource SUSPENDED, rekam hang). Jalur cadangan yang disiapkan:record_backend: windows(ffmpeg.exe + dshow via interop, simpan ke /mnt/c).