mirror of
https://github.com/yusufipk/dikte.git
synced 2026-09-11 10:56:10 +00:00
Four holes in one class, found by a review the last one paid for. The capture's stderr went to a pipe nobody drained, so a chatty ffmpeg could fill it and freeze the recording; it goes to a file now, the way the meeting recorder always did. A capture dying with audio already buffered ended the pump in silence, the clock counting over a dead microphone; there is a died signal now, and the application transcribes what was caught. A pump that outlived its two-second join could write stale audio into the next recording and kill the next recording's process; each run now owns its objects and a token. Short pipe reads were each billed a whole chunk in the silence math, overstating speech; the pump reads exact chunks, as meetings do. Smaller ones alongside: write_wav failing no longer strands the state machine; a deliberate stop no longer reports ffmpeg's interrupt code as "Nothing was recorded: ffmpeg -> 255"; kills are reaped so no message says "exit code None"; the pw-record probe is paid once per process; the RMS loop uses sumprod where Python has it; the pactl and pw-record listings decode as the UTF-8 they are. paths gains the NO_WINDOW constant this module re-exports, the one spelling every subprocess site after it shares. Co-Authored-By: Claude Fable 5 <[email protected]>