Low-latency native macOS utility that routes live audio from any input device to any output device.
No recording. No effects. No DAW. Just a Core Audio patch cable with a tiny UI.
Guitar / mic / interface
↓
┌─────────────┐
│ In2Speakers │ input → output
└─────────────┘
↓
Speakers / headphones / HDMI
macOS won’t freely route an arbitrary USB audio interface into the built-in speakers without extra plumbing. In2Speakers is that plumbing — useful when your amp/FX already live on the hardware and you only need to monitor.
Example: a Valeton GP-200 (or any USB interface) into MacBook speakers while practicing.
- macOS 15+
- Apple Silicon or Intel
- Microphone / audio input permission (for USB interfaces and mics)
- Pick any Core Audio input and output
- Buffer sizes: 32 → 1024 samples (default 128)
- Channel modes: stereo 1/2, mono left/right/sum
- Software volume (−∞ … +6 dB) and input level meter
- Device hot-plug detection with optional auto-resume
- Feedback warning when input and output are the same device
- Remembers last devices, buffer, channel mode, and volume
Open in2speakers.xcodeproj in Xcode and run the in2speakers scheme, or:
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
# or Xcode-beta.app if that’s what you use
xcodebuild \
-project in2speakers.xcodeproj \
-scheme in2speakers \
-configuration Debug \
-destination 'platform=macOS' \
build
open ~/Library/Developer/Xcode/DerivedData/in2speakers-*/Build/Products/Debug/in2speakers.appOn first launch, allow microphone access so Core Audio can open input devices.
SwiftUI
↓
AudioRouter (protocol)
↓
CoreAudioRouter
├── Input HAL AudioUnit
├── Lock-free ring buffer
└── Output HAL AudioUnit
UI never talks to Core Audio directly. Real-time callbacks stay allocation-free aside from the ring buffer copy path; metering is polled on the main thread (~30 FPS).
in2speakers/
├── App/ entry point
├── Audio/ devices, ring buffer, Core Audio router
├── Services/ preferences, permissions, controller
└── UI/ SwiftUI shell
- Not a recorder
- Not an amp / FX / plugin host
- Not a mixer or DAW
- Not Electron / Tauri / WebAudio
If your multi-FX unit already does the tone, keep it that way. In2Speakers only moves PCM from A → B.
Provided as is, without warranty of any kind — express or implied — including but not limited to merchantability, fitness for a particular purpose, and noninfringement.
Use at your own risk. The authors and Codse accept no liability for hearing damage, feedback loops, dropped audio, device conflicts, data loss, or any other damage arising from use of this software. Mind your levels; same-device input/output can howl.
MIT © Codse — see LICENSE for the full terms.
