feat: add macOS meeting audio capture

This commit is contained in:
dh
2026-08-06 08:16:54 +02:00
parent b3aeef24eb
commit 59ba70ca11
15 changed files with 1282 additions and 4 deletions
@@ -0,0 +1,55 @@
## MODIFIED Requirements
### Requirement: Recording mode captures microphone and computer output
Meeting Assistant SHALL capture microphone input and computer output and combine them into one audio stream for transcription on supported Windows and macOS hosts.
Meeting Assistant SHALL capture audio as 16 kHz mono PCM chunks for the existing recording and transcription pipeline.
Meeting Assistant SHALL capture microphone and system loopback as separate input streams before producing the final mono chunks.
On Windows, Meeting Assistant SHALL retain the existing NAudio microphone and WASAPI loopback implementation.
On macOS, Meeting Assistant SHALL capture the default microphone through AVFoundation and computer output through ScreenCaptureKit without requiring a virtual audio device.
The macOS capture adapter SHALL convert both native sources to signed 16-bit PCM using the active run's configured sample rate and channel count before passing chunks to the existing managed mixing pipeline.
The macOS capture adapter SHALL stop its native capture process when the recording capture token is cancelled.
When macOS privacy permission is missing or denied, Meeting Assistant SHALL fail capture with an actionable message identifying the required Microphone or Screen Recording/System Audio permission.
Meeting Assistant SHALL clean the microphone stream with a local acoustic echo cancellation stage that uses system loopback as the far-end reference.
Meeting Assistant SHALL produce final mono chunks by adding the cleaned microphone samples and system samples.
Meeting Assistant SHALL align microphone and system samples through per-source buffers before producing final chunks and SHALL apply the existing configured gains and clamping behavior.
Meeting Assistant SHALL write only the mixed stream to the temporary WAV used by transcription and finalization.
#### Scenario: macOS records both meeting-audio sources
- **GIVEN** the portable build is running on macOS
- **AND** Microphone and Screen Recording/System Audio permissions are granted
- **WHEN** a meeting recording starts
- **THEN** Meeting Assistant captures microphone audio through AVFoundation
- **AND** captures computer output through ScreenCaptureKit
- **AND** passes both signed 16-bit PCM streams through the existing mixer
#### Scenario: macOS capture uses run audio format
- **GIVEN** an active macOS recording configures a sample rate and channel count
- **WHEN** the native capture helpers start
- **THEN** both helpers emit signed 16-bit PCM with that sample rate and channel count
#### Scenario: macOS recording stops native capture
- **GIVEN** macOS microphone and system capture are active
- **WHEN** Meeting Assistant stops capture
- **THEN** it terminates both native capture processes
- **AND** PCM already delivered to the managed pipeline before stop remains available to the existing recording pipeline
#### Scenario: macOS privacy permission is unavailable
- **WHEN** macOS denies microphone or Screen Recording/System Audio capture permission
- **THEN** Meeting Assistant reports which macOS privacy permission is required
#### Scenario: Windows audio capture remains isolated
- **GIVEN** Meeting Assistant is compiled for the Windows target
- **WHEN** the application registers and starts meeting audio capture
- **THEN** it uses the existing NAudio microphone and WASAPI loopback sources
- **AND** does not invoke or require the macOS native helper