Keep the meeting a quiet microphone gave us, and read both captures at once

A recording is never deleted for being disappointing. A microphone that
handed over nothing still leaves the right channel, which is everyone
else, and an hour of them is worth more than the empty channel costs; the
one thing the user cannot get back is the half that was there. So the
exact-zero check stays and stops throwing the file away: it says what the
microphone did, in a tray warning next to the recording being written up,
and the minutes are produced from what there is.

Reading the two capture pipes in turn from one thread put the failure it
was meant to fix back in a worse place. A microphone that stops delivering
leaves that read waiting forever, and the far side is not read either
until its pipe fills and its ffmpeg stops writing into it: the meeting
freezes, the levels sit still, and nothing is said for as long as nobody
looks. Each stream now has a reader of its own and a queue, so neither can
hold the other up, and a side that has said nothing for STALL_SECONDS ends
the recording the way a dead ffmpeg already did, out loud and keeping what
was captured.

Which system needs how many processes belongs in the table with everything
else that differs, so meeting() returns the list of commands it takes:
one on PulseAudio, one per device on a Mac. meeting_commands() is the
chooser again rather than a function with a Mac inside it, and the empty
entry in COREAUDIO is gone. The two AVFoundation targets are resolved
against a single device listing, which costs one ffmpeg run instead of two
and cannot see the indexes renumber between the microphone and the far
side.

Co-authored-by: benfirad <[email protected]>
This commit is contained in:
2026-08-16 10:20:23 +03:00
co-authored by benfirad
parent 2cd561da77
commit 322e06dd7a
4 changed files with 225 additions and 83 deletions
+6 -4
View File
@@ -566,10 +566,12 @@ TR = {
"duplicate or choose a different device.":
"Birden fazla macOS ses aygıtının adı {device}. Aynı adlı aygıtlardan "
"birini çıkar ya da başka bir aygıt seç.",
"The macOS microphone stopped delivering audio ({percent}% was empty). The "
"unusable recording was discarded; reconnect the device and try again.":
"macOS mikrofonu ses iletmeyi durdurdu (kaydın %{percent} kadarı boştu). "
"Kullanılamaz kayıt silindi; aygıtı yeniden bağlayıp tekrar dene.",
"The microphone handed over almost nothing ({percent}% of the recording was "
"empty), so your own side of the meeting will be mostly missing. Check the "
"device before the next one.":
"Mikrofon neredeyse hiçbir şey iletmedi (kaydın %{percent} kadarı boştu), "
"toplantının senin tarafın büyük ölçüde eksik olacak. Bir sonrakinden "
"önce aygıtı kontrol et.",
"Transcribing {side}: {index}/{count}":
"{side} yazıya çevriliyor: {index}/{count}",
"you": "sen",