Skip to main content
Docker Desktop on macOS runs Linux containers. Those containers cannot open CoreAudio or /dev/snd the way a Linux edge host can. Cyberwave mirrors the camera MJPEG bridge pattern: host ffmpeg captures AVFoundation audio and serves raw PCM over HTTP; the microphone driver container reads that URL via AudioBridgeCapture instead of PortAudio.

Architecture

On Linux Docker hosts, skip the bridge: Edge Core bind-mounts /dev/snd and the driver uses PortAudio/ALSA directly. See Native microphone driver — Linux.

Prerequisites

  • Docker Desktop installed and running (daemon up before cyberwave edge install).
  • ffmpeg on the Mac host (the CLI installer expects it on PATH).
  • A microphone twin linked to this edge (catalog generic-microphone asset).
  • Microphone privacy granted to the terminal or process running ffmpeg when macOS prompts.

First-time setup

  1. Install the CLI and Edge Core (pairing flow):
  1. During cyberwave edge install on macOS, the installer:
    • Lists AVFoundation input devices and prompts for a microphone (by index; stored in audio_streams.json).
    • Installs a LaunchAgent (com.cyberwave.audio-stream) on port 8101 (additional mic twins use 8102, …).
    • Writes ~/.cyberwave/audio_streams.json with twin_to_stream_url entries.
    • Restarts Edge Core so driver containers receive CYBERWAVE_METADATA_AUDIO_DEVICE.
  2. Link your microphone twin to the edge in the Cyberwave UI, then restart if you added the twin after install:

Switch microphone or fix a broken bridge

Re-run selection without a full reinstall:
Skip the interactive picker when you already know the AVFoundation index:
cyberwave edge restart also self-heals silent ffmpeg slots (launchctl kickstart -k on com.cyberwave.audio-stream*) and warns when audio_streams.json references a port with no running service — same pattern as the camera bridge.

Verify

Healthy container logs (MQTT/backend errors aside):
Failure signals:

audio_streams.json shape

Edge-core reads this file (and TCP-probes the port) when launching each generic-microphone container. The driver does not enumerate PortAudio devices on macOS Docker when the bridge URL is present.

Local debugging without Docker

Run the driver on the host with direct PortAudio (no HTTP bridge):

Native microphone driver

WebRTC, recording, Zenoh, and env var reference.

Edge overview

macOS edge install, camera bridge, and CLI lifecycle.

Native speaker driver

Playback counterpart — macOS uses a host PCM sink on port 8201 (same bridge pattern).