Neem lokaal op: microfoon, systeemgeluid en de browser (#2516–#2522) #2575

Merged
brenno merged 11 commits from feat/transcriptie-08-mic-opname into main 2026-10-24 03:02:18 +00:00
Owner

Samenvatting

  • Lokale opname van microfoon, systeemgeluid en, in de browser, tab- of schermgeluid, plus een stereocombinatie. PCM-WAV is 16 kHz; de microfoon is mono, de combinatie stereo (links microfoon, rechts systeem). Eén capture, staging onder de tijdelijke map van het OS (ocideck-recordings/<sessie>/recording.wav). De webhelft blijft in het geheugen (mem:).
  • Na stoppen kiest de gebruiker: nu transcriberen, zeven dagen bewaren, of weggooien. probe en describe vragen geen toestemming; alleen start en open mogen dat. De microfoonstroom van de presentatie wordt niet hergebruikt, en er komt geen tweede verborgen sessie naast de doorvoer.
  • De live route (#2522, #2525) blijft afwezig tot een engine streaming: true meldt. whisper.cpp POST /inference is batch (#2524, al gemerged) en is dat bewijs niet. Lokale whisper-cli en AsrServerEngine melden streaming: false; transcribeLive geeft dan null.

Bewaker

Opnames blijven lokaal. Geen nieuwe netwerkpartij, geen nieuwe afhankelijkheid, en het Markdown-deck blijft onaangeroerd. WAV en webm zijn gewone audiobestanden naast het deck, meeneembaar als OciDeck er niet meer is. Live tekst wordt niet verzonnen.

Wat deze PR niet bewijst

De software voor #2516–#2521 staat erin, met toetsen. De acceptatie van die issues vraagt fysiek bewijs, en dat is #2523. Daarom sluit deze PR niets.

  • #2523: ingebouwde, USB- en Bluetooth-microfoons op macOS, Windows en Linux zijn hier niet beproefd. De acceptatievakjes blijven open.
  • Windows (WASAPI, #2519) is geschreven en op deze Mac niet gecompileerd.
  • Web getUserMedia en getDisplayMedia (#2517, #2521) zijn niet in een browser doorlopen. De webhelft staat in de dekkingsbaseline.
  • #2525 blijft dicht. #2526–#2531 (gespreksopname in de app) zijn niet gestart; die hangen aan Jitsi #2532.
  • Epic #2508 blijft open.

Poort

make check-full is groen op e8d4aec345534e1f565b50c030d9e2ac8f681a67: opmaak, analyze, tests, dekking, goldens, gitleaks, trufflehog en semgrep (0 bevindingen). Semgrep staat op deze machine (/opt/homebrew/bin/semgrep) en colima draait. make dast (ZAP) is adviserend en hoort niet bij check-full; die is niet gedraaid.

Testplan

  • make check-full op e8d4aec345534e1f565b50c030d9e2ac8f681a67
  • Microfoon opnemen op macOS, stoppen, en kiezen tussen transcriberen, bewaren en weggooien
  • Systeemgeluid en combinatie op een echte installatie (#2523)
  • Windows-build compileren
  • Web: toestemming pas na Start, in Chromium, Firefox en Safari
## Samenvatting - Lokale opname van microfoon, systeemgeluid en, in de browser, tab- of schermgeluid, plus een stereocombinatie. PCM-WAV is 16 kHz; de microfoon is mono, de combinatie stereo (links microfoon, rechts systeem). Eén capture, staging onder de tijdelijke map van het OS (`ocideck-recordings/<sessie>/recording.wav`). De webhelft blijft in het geheugen (`mem:`). - Na stoppen kiest de gebruiker: nu transcriberen, zeven dagen bewaren, of weggooien. `probe` en `describe` vragen geen toestemming; alleen `start` en `open` mogen dat. De microfoonstroom van de presentatie wordt niet hergebruikt, en er komt geen tweede verborgen sessie naast de doorvoer. - De live route (#2522, #2525) blijft afwezig tot een engine `streaming: true` meldt. whisper.cpp `POST /inference` is batch (#2524, al gemerged) en is dat bewijs niet. Lokale whisper-cli en `AsrServerEngine` melden `streaming: false`; `transcribeLive` geeft dan `null`. ## Bewaker Opnames blijven lokaal. Geen nieuwe netwerkpartij, geen nieuwe afhankelijkheid, en het Markdown-deck blijft onaangeroerd. WAV en webm zijn gewone audiobestanden naast het deck, meeneembaar als OciDeck er niet meer is. Live tekst wordt niet verzonnen. ## Wat deze PR niet bewijst De software voor #2516–#2521 staat erin, met toetsen. De acceptatie van die issues vraagt fysiek bewijs, en dat is #2523. Daarom sluit deze PR niets. - #2523: ingebouwde, USB- en Bluetooth-microfoons op macOS, Windows en Linux zijn hier niet beproefd. De acceptatievakjes blijven open. - Windows (WASAPI, #2519) is geschreven en op deze Mac niet gecompileerd. - Web `getUserMedia` en `getDisplayMedia` (#2517, #2521) zijn niet in een browser doorlopen. De webhelft staat in de dekkingsbaseline. - #2525 blijft dicht. #2526–#2531 (gespreksopname in de app) zijn niet gestart; die hangen aan Jitsi #2532. - Epic #2508 blijft open. ## Poort `make check-full` is groen op `e8d4aec345534e1f565b50c030d9e2ac8f681a67`: opmaak, analyze, tests, dekking, goldens, gitleaks, trufflehog en semgrep (0 bevindingen). Semgrep staat op deze machine (`/opt/homebrew/bin/semgrep`) en colima draait. `make dast` (ZAP) is adviserend en hoort niet bij `check-full`; die is niet gedraaid. ## Testplan - [x] `make check-full` op `e8d4aec345534e1f565b50c030d9e2ac8f681a67` - [ ] Microfoon opnemen op macOS, stoppen, en kiezen tussen transcriberen, bewaren en weggooien - [ ] Systeemgeluid en combinatie op een echte installatie (#2523) - [ ] Windows-build compileren - [ ] Web: toestemming pas na Start, in Chromium, Firefox en Safari
Een opname is een gewoon audiobestand op dit apparaat, niet een nieuw
formaat in het deck. De tekst komt pas als de gebruiker dat vraagt.
Een live-route blijft weg zolang geen engine een streaming-protocol
meldt: de batch-server bewijst alleen POST /inference. Hardwarebewijs
(#2523) en gesprekken in de app blijven buiten deze commit.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
De transcriptielaag mag dart:io alleen in een _io-bestand importeren,
anders sleept de web-build een bestandssysteem mee. Een headerherstel
is geen nieuwe opname en laat de bestandstijd dus staan. parecord,
pactl, which en df starten met een argv-array, zonder schil en zonder
de omgeving van de ouder.

Co-authored-by: Cursor <cursoragent@cursor.com>
Onder de dekkingsrun haalt het schrijven van dat bestand de standaard
van dertig seconden niet. De scan zelf stopt meteen zodra de file te
groot is.

Co-authored-by: Cursor <cursoragent@cursor.com>
lcov ziet een bestand van alleen constanten niet. De stub schrijft op
web niets en hoort wél in een toets, anders valt hij buiten de dekking.

Co-authored-by: Cursor <cursoragent@cursor.com>
De keuze na Stop is een pure functie, zodat de shell hem niet hoeft te
bewijzen. De systeemactie toont zijn labels en opent ook de combinatie.

Co-authored-by: Cursor <cursoragent@cursor.com>
De levenscyclus zat als part in de shell, en de dekkingsvloer zag het
stoppen daardoor nooit. Als eigen bestand kan de toets stopAll aanroepen.

Co-authored-by: Cursor <cursoragent@cursor.com>
brenno force-pushed feat/transcriptie-08-mic-opname from c6b13617a3 to e8d4aec345 2026-10-24 03:01:46 +00:00 Compare
brenno merged commit eb089aeabb into main 2026-10-24 03:02:18 +00:00
Sign in to join this conversation.
No description provided.