Interval/30 microphone transcription - #33
Merged
Merged
Conversation
Adds a capture mode — application audio or the microphone, one per meeting — and a microphone capturer behind the existing AudioCapturing boundary, so recognition, persistence, gap incidents, pause and resume and recovery run unchanged for either source. CaptureModeRouter is the one capturer the runtime holds and sends each start to the capturer for the meeting's mode. MicrophoneAudioCapturer taps AVAudioEngine's input node, mixes to mono and cuts audio into 20 ms buffers so the bounded recognition backlog means the same thing for both sources. A configuration change ends the meeting as interrupted rather than moving to another microphone. AudioCapturing gains prepare(configuration:), run before any artifact exists: it is where the microphone permission is first asked for, so a refusal leaves nothing on disk. A start never prompts. Requests that mix modes, or ask a Microphone meeting to keep audio, are refused. Adds the audio-input sandbox entitlement and a microphone usage description.
The session record gains an optional captureMode, written for every new session; records written before it, including every v0.1.0 session, decode unchanged and the schema version stays 1. A microphone is named in the transcript header and the record as "Microphone (<input>)", and its device identifier is never written. History carries the mode and labels a Microphone meeting's source as a source rather than an application. Diagnostic reports state the mode, never the microphone's name, and report no requested format for a microphone, which asks for none.
A "Transcribe from" choice at the top of the Meeting tab decides what the rest of the screen asks for. Microphone mode shows the Mac's current input and macOS's own answer about microphone access, offers to ask while macOS never has, and names System Settings after a refusal. It does not run application discovery, so it never triggers the Screen & System Audio Recording prompt, and App Audio never reads the microphone permission. Readiness keeps its four prerequisites in both modes, titled for the mode. The choice is remembered; the microphone is not. The menu bar says a Microphone meeting is being listened to rather than captured.
Drives Microphone meetings through the real runtime with the microphone replaced at the capture boundary: a start with permission, refusals before anything is created (including through the real capturer with stated permission answers), input start failure, audio reaching recognition, pause and resume media time, stop, an input change ending the meeting as interrupted, gap incidents, and durable Markdown, the session record, recovery and History against real files. Also covers application state, window and tab changes not being inputs to a running meeting, conflicting starts during a permission prompt, App Audio never consulting the microphone, the PCM adapter and tap, the access gate, the router, readiness, the setup model, record compatibility with v0.1.0, and diagnostics leaving the microphone unnamed.
Adds a Microphone Transcription page covering App Audio versus Microphone, the permission, which input is used and why it is never switched, what is and is not kept, background behaviour stated as design rather than as observation, and failure and recovery behaviour. Updates permissions, background operation, architecture, audio capture, failure semantics, session metadata, transcript format, diagnostics and limitations, and adds a real-Mac validation checklist to Testing. Adds an Unreleased changelog entry and records the interval's state in CONTEXT.md, including that nothing in it has been built or run on a Mac yet. v0.1.0's release notes are unchanged.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
Why
Validation
xcodebuild -project ScribeKit.xcodeproj -scheme ScribeKit -destination 'platform=macOS' buildxcodebuild -project ScribeKit.xcodeproj -scheme ScribeKit -destination 'platform=macOS' testTranscript and privacy impact
Energy and performance impact