A minimal macOS menu bar app that transcribes system audio in real time using Apple’s Speech framework (SFSpeechRecognizer) and ScreenCaptureKit for audio capture. The app provides a simple window to view the live transcript, a Start/Stop control, an “Always on Top” toggle, and menu bar access.
- Real-time transcription of system audio (not just microphone)
- Menu bar control to Start/Stop and bring window to front
- “Always on Top” toggle to keep the transcript window floating
- Partial results appear continuously; finalized segments are indicated in the status
- macOS 14.0+ (Sonoma)
- Xcode 15+ (recommended)
- App requires the following permissions:
- Screen Recording (to capture system audio via ScreenCaptureKit)
- Speech Recognition (for SFSpeechRecognizer)
Note: Some locales require a network connection for recognition unless on-device models are available. This app defaults to en-US.
- Open
simpletranscribe.xcodeprojin Xcode. - Select the
simpletranscribescheme and a “My Mac” destination. - In Signing & Capabilities, select your Development Team if prompted.
- Build and run (⌘R).
- On first run, macOS will prompt for permissions:
- Allow Screen Recording for the app (System Settings → Privacy & Security → Screen Recording).
- Allow Speech Recognition (System Settings → Privacy & Security → Speech Recognition).
- Click the menu bar item (waveform icon) to Start/Stop transcription, toggle “Always on Top,” or show the main window.
- Press Space to Start/Stop from the main window.
- The transcript appears in the scrollable text area.
- Status messages (e.g., “Listening…”, errors, or “Finalized segment”) appear in the UI and the menu bar menu.
- Locale: The recognizer defaults to
en-US. You can change the locale by editingTranscriptionServiceinitialization inContentViewModel. - On-device recognition: The code currently sets
requiresOnDeviceRecognition = false. Change this if you want to force on-device only where available.
AudioCaptureManageruses ScreenCaptureKit to start a stream that captures system audio (excluding the app’s own audio) and forwardsCMSampleBuffers.TranscriptionServicewrapsSFSpeechRecognizer, feeding it audio buffers and publishing partial/final text updates.ContentViewModelwires capture → transcription, exposes state to SwiftUI, and handles Start/Stop.ContentViewandMenuBarExtraprovide the minimal UI.
- No audio or text is appearing:
- Ensure you granted Screen Recording and Speech Recognition permissions.
- Quit and relaunch the app after changing permissions in System Settings.
- “Speech recognition not authorized”:
- System Settings → Privacy & Security → Speech Recognition → enable for this app.
- Build/Signing errors:
- Open the project in Xcode, go to the
simpletranscribetarget → Signing & Capabilities, and set your Development Team.
- Open the project in Xcode, go to the
- Locale issues or low accuracy:
- Try a different locale identifier (e.g.,
en-GB,fr-FR) in theTranscriptionServiceinitializer.
- Try a different locale identifier (e.g.,
- This project uses SwiftUI and Apple frameworks only (no external dependencies).
Item.swiftincludes a placeholderSwiftDatamodel that isn’t currently used by the app logic.- ScreenCaptureKit requires relatively recent macOS; this project targets macOS 14+.
- Export/save transcripts
- Microphone-only mode option
- Choose capture source (specific app/window)
- Configurable locale and on-device-only toggle in UI
Add a license of your choice (e.g., MIT, Apache 2.0) before publishing.