Files
church-translate/docs/AUDIO.md
T
christianandClaude Opus 5 c9eef0672c Church Translate, as it runs at the campuses
Live sermon translation into 100+ languages, running entirely on one Mac per
campus: audio in, voice detection, Whisper on the GPU, NLLB-200 in its own
process, and a built-in web server the congregation reads from on their
phones. No audio leaves the building.

This is the source only. What used to sit beside it — 14 GB of speech and
translation models, 8 GB of voice bundles, 6 GB of natural voices, the Electron
caches, and the app data holding the operator PIN and every service transcript
— is machine state and downloaded assets, and stays in the NAS backup where it
belongs. The vendored node, cloudflared and Windows ffmpeg binaries are out too
(533 MB, re-fetched for packaging); the browser-side runtime beside them is
kept, so a checkout still serves the congregation page.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 15:41:21 -04:00

4.1 KiB

Getting the pastor's mic into the Mac

The engine takes any CoreAudio input. It does not care how the audio got there. Pick whichever of these matches the room, and it shows up in the Sermon audio → Input device list like any other sound card.


The one rule

Feed it the pastor's microphone, not the main mix.

A direct out, a matrix, an aux, a bus — anything that is that one voice. Music, congregational singing and room noise all make the transcription worse, and the voice-detection has to work much harder to find the speech.

Post-EQ and post-compression is good. Post-fader is fine. Post-reverb is not.


Dante

Dante Controller is already installed on this Mac, but a Mac cannot receive Dante audio without something to receive it with. Two options:

Dante Virtual Soundcard (about $50, one time)

The normal answer. It turns the Mac itself into a Dante device.

  1. Buy and install Dante Virtual Soundcard from audinate.com.
  2. Start it. Set it to 2 channels, sample rate 48 kHz.
  3. Open Dante Controller, find the row for this Mac, and subscribe channel 1 to the pastor's mic transmit channel.
  4. In the engine, pick Dante Virtual Soundcard (1-2).

There is no subscription. It is the only money this whole system costs.

RedNet hardware you may already own

This Mac has RedNet Control 2 and the Focusrite PCIe driver installed, but no RedNet device is currently attached. If there is a RedNet box or a PCIeNX card in a Thunderbolt chassis somewhere in the building, reconnecting it gives you Dante input for free and with lower latency than DVS.


Waves SoundGrid

For the locations on a Waves network instead of Dante.

  1. Install Waves SoundGrid Studio (free from waves.com) on the Mac.
  2. Connect the Mac to the SoundGrid network. SoundGrid Studio will find the server and I/O.
  3. In SoundGrid Studio, patch the pastor's mic channel to the driver — that is the thing that appears to macOS as a sound card.
  4. In the engine, pick Waves SoundGrid as the input device.

The Mac needs a wired Ethernet connection to the SoundGrid network, and it should be a separate interface from the one reaching the NAS if the two networks are separate VLANs.


Console USB (free, works today)

Your M32 does 32 channels of USB audio to a Mac with no extra hardware.

  1. USB cable from the console's USB port to the Mac.
  2. On the console, route the pastor's mic channel to a USB send.
  3. In the engine, pick the console as the input device.

Least elegant, zero cost, and completely reliable. A good way to prove the whole system works before spending anything on Dante.


BlackHole (for testing)

BlackHole 2ch is already installed. Anything playing on the Mac can be routed into the engine through it, which is useful for rehearsing with a recording of last week's sermon before you trust it live.


If Dante is not in the list

Restart the app. Chromium reads the audio devices when it starts, and if Dante Virtual Soundcard was launched afterwards it will not be there. The app now watches for devices appearing and picks them up on its own, but a restart is the certain fix.

Also worth checking: DVS running, set to Core Audio, and at least one channel subscribed in Dante Controller. If the app lists the device but the meter never moves, the device is there and the subscription is not.

Level

Aim for speech peaking around -20 dB on the app's meter. Measured on this rig the Dante feed peaked at -44 dB, which works but leaves only about 14 dB above the speech/silence line — quiet passages can slip under it. Raising the send at the console is better than winding Sensitivity down, because Sensitivity lowers the bar for room noise too.

Checking it works

The engine has a level meter with a notch on it.

  • The bar is the incoming level.
  • The notch is the line between silence and speech.

Speech should push the bar clearly past the notch and turn it green. Room noise between sentences should sit below it. If it doesn't, move the Sensitivity slider — left if quiet speech is being missed, right if noise is triggering it.