A native macOS app for real-time meeting transcription and translation. Captures system audio (browser, meeting apps — including Bluetooth headset output) and microphone, transcribes with on-device speech recognition, and translates to Chinese via OpenAI-compatible APIs.
- System Audio Capture — Uses ScreenCaptureKit to capture audio from any app (Chrome, Safari, Teams, Zoom, etc.), including audio routed to Bluetooth headphones. Core Audio process taps cannot capture Bluetooth A2DP output; ScreenCaptureKit captures the decoded system mix instead.
- Microphone Mixing — Microphone audio is blended in with energy gating: when the mic is quiet (you're not speaking), system audio passes through untouched so meeting speech is never diluted.
- On-Device Speech Recognition — Powered by macOS 26
SpeechAnalyzer/SpeechTranscriber(progressive transcription) for free, real-time, offline transcription. - Chinese Translation — Integrates with any OpenAI-compatible API (OpenAI, DeepSeek, Ollama, LM Studio, etc.)
- Native SwiftUI Interface — Clean, Notion-like experience with one-click start/stop
- Export — Save transcripts as Markdown with original text and Chinese translation side by side
- Privacy First — All API keys stored locally via UserDefaults, no telemetry, no cloud relay
- macOS 26+ (SpeechAnalyzer / ScreenCaptureKit)
- Xcode 26+ or Swift 6 command line tools
- Screen Recording permission — required by ScreenCaptureKit to capture system audio (System Settings → Privacy & Security → Screen Recording)
- An OpenAI-compatible API key for translation (optional — transcription works without it)
cd native/MeetingTranslatorApp
swift build
# Create .app bundle
mkdir -p .build/EchoMeet.app/Contents/MacOS
cp .build/debug/EchoMeet .build/EchoMeet.app/Contents/MacOS/
cp MeetingTranslatorApp/Info.plist .build/EchoMeet.app/Contents/
codesign --force --deep --sign - .build/EchoMeet.app
# Launch
open .build/EchoMeet.appNote: The app must be code-signed with a stable identity (Apple Development certificate) for the Screen Recording permission to persist. Re-signing with a different identity (or ad-hoc
codesign -s -) invalidates the TCC grant and ScreenCaptureKit will fail with "no display available" until you re-authorize in System Settings.
On first launch, macOS will prompt for Microphone, Speech Recognition, and Screen Recording permissions. If prompts don't appear, go to System Settings → Privacy & Security.
- System audio is captured via ScreenCaptureKit (
SCStreamwithcapturesAudio = true) — this is the same path screen recorders use, so it works with every output device including Bluetooth. - Microphone is captured with a dedicated
AVAudioEnginetap. - Both streams are resampled to 16 kHz Int16 and mixed in 256 ms windows with energy gating.
- The mixed stream feeds macOS 26
SpeechAnalyzerfor progressive on-device transcription. - Completed sentences are translated (optional) and appended to the transcript.
Launch with -autoStart to begin capture automatically without UI interaction (useful for automated testing):
open .build/EchoMeet.app --args -autoStartRuntime diagnostics are written to ~/Library/Application Support/EchoMeet/debug.log (frame counts, RMS levels, recognition events).