Audio node
Transcription
On-device speech-to-text from ANY Audio port — microphone, Audio Player, Video Player, even a synth. Live mode streams captions as you speak; Timeline mode pre-transcribes a whole file (≈15× faster than realtime) and serves words in perfect sync with a player's Time output — karaoke-exact and scrub-safe. Emits the formatted transcript, per-word Segments (text, start, duration, confidence, finality, sentence, age) for kinetic text, event pulses (New Word / New Sentence / Corrected), and Speaking / WPM / Pause metrics. SRT and VTT subtitle export from the inspector. Powered by Apple SpeechAnalyzer — 30 locales, models download once through the system, audio never leaves the Mac.
Inputs
| Port | Type | Default |
|---|---|---|
| AudioLive mode's ear: cable an Audio Input node's Audio Data here (or any audio structure). Timeline mode ignores it — the file rules there. | structure | — |
| EnableOff pauses the recognizer (live) or the serve (Timeline). The transcript is kept — re-enabling continues where it was; use Reset to start over. | bool | true |
| ModeLive: the microphone stream, words arrive on the wall clock with recognizer latency. Timeline: a transcribed FILE replayed on the audio clock — exact word times, scrub-safe; connect Source and Time from a player. | int | 0 |
| SourceTimeline: cable a Video/Audio Player's Info output — THE file connection. The player's file is transcribed once and cached; File below is only the manual fallback. | structure | — |
| FileTimeline fallback: a manual audio-file path when no player is in the patch. Ignored while Source is connected. | string | |
| TimeTimeline: the playhead in seconds — cable the player's Time output so words land exactly when spoken. Scrubbing replays the kinetics deterministically. | float | 0 |
| LocaleRecognition language, e.g. en-US, de-DE, lv-LV. Also decides word-class tagging for the Segments contract — languages without POS support simply serve untagged words. | string | en-US |
| ChunkSeconds of audio fed per analyzer push (default 0.4). Smaller = lower latency but more overhead; larger = smoother CPU, laggier words. Live only. | float | 0.4 |
| CensorOn: the recognizer's built-in profanity masking replaces offensive words with asterisks. Applied at recognition time, both modes. | bool | false |
| CorrectionsWord dictionary for names the recognizer keeps getting wrong: an array of [from, to] pairs — Array Zip two string lists, e.g. [graffit, Grafit], [aple, Apple]. Matching ignores case and keeps punctuation; the to-side may be several words. Applied to every output, live and Timeline; edits re-correct instantly. | structure | — |
| Max WordsThe TOTAL served window in words (volatile tail included; newest win). Caps Segments and Live Text so day-long sessions never grow without bound. 0 = a 5000-word safety cap. | int | 500 |
| ResetRising edge clears the whole transcript and starts a fresh session — sentence and word counters restart. Pulse it, don't hold it high. | bool | false |
Outputs
| Port | Type |
|---|---|
| Text | string |
| Live Text | string |
| Sentence | string |
| Word | string |
| Segments | structure |
| New Word | bool |
| New Sentence | bool |
| Corrected | bool |
| Speaking | bool |
| WPM | float |
| Confidence | float |
| Pause | float |
| Info | structure |
How It Works
Live mode (Mode 0): the node drains the connected Audio ring continuously on a background task, converts to the model's format and streams it into Apple's on-device SpeechAnalyzer. Instant volatile guesses appear first (marked final:false, no reliable times, confidence −1) and are later replaced in place by finalized words carrying word-level start/duration from the model — when the finalization changed the text, Corrected pulses, so displays can animate the fix. Live captions inherently trail speech by 1–3 s at finalization; the per-word age field (wall-clock seconds since the word appeared) is what kinetic displays should animate on.
Timeline mode (Mode 1): cable a player's Info output into Source — one file pick in the player feeds playback AND transcription (the manual File path is the fallback for player-less patches) — and the node pre-transcribes the whole file once, faster than realtime. The Time input (cable it from the player's Time output) then serves Text/Word/Segments exactly as of that playhead — zero lag, scrub-safe in both directions, loops follow. In this mode age = Time − start (audio-clock), and NEGATIVE age means the word is still coming — kinetics can pre-stage it.
Speaking comes from the SpeechDetector voice-activity module riding the same analyzer. The Segments output is the kinetic-text contract: an array of dicts {text, index, start, duration, end, confidence, final, sentence, age}, indices absolute and stable.
State is volatile (project load starts empty); Reset clears on a rising edge; locale/censor/source changes rebuild the session. The engine feeds from a private accumulator, so every Audio Input Quality preset works — the ring only has to survive one 40 ms poll.
Parameters in Depth
Audio (structure) — any Audio port. For pristine results transcribe the SOURCE directly (Audio/Video Player cable), not a microphone listening to speakers.
Mode (int dropdown) — Live / Timeline; ports follow the mode. Source (structure) — a player's Info output: the file connection of record in Timeline mode. File (string) — manual fallback path (hidden while Source is cabled). Time (float) — Timeline playhead in seconds.
Locale (string, default en-US) — inspector dropdown lists the 30 supported locales; ⇣ marks models not yet downloaded (they install once, system-wide). Unsupported locales report honestly in Info. Latvian is not currently supported by Apple's model.
Censor — etiquette replacements (f··· style). Max Words — rolling transcript window (hard cap 5000); transcript LENGTH is governed here, never by audio buffer sizes. Reset — rising edge clears.
Outputs: Text (finalized), Live Text (+volatile tail), Sentence, Word, Segments (the contract), pulses New Word/New Sentence/Corrected, Speaking (VAD level), WPM (10 s window), Confidence (last final result), Pause (seconds of silence), Info (status/locale/words/ring warnings).
Use Cases
- Live captions — Audio Input → Transcription → Live Text → UI Text: on-stage captions with zero cloud.
- Karaoke — Audio Player Info → Source, Time → Time (Timeline mode); Word → UI Text: one file pick, and the current word lands exactly on the beat of the voice.
- Voice-triggered visuals — Word → String Compare ("storm") → Magic Storm trigger: say the magic word.
- Silence dramaturgy — Pause → Smooth → Drone brightness: the longer nobody speaks, the heavier the room gets.
- Speech-rate energy — WPM → particle turbulence: fast talkers whip the swarm.
- Subtitles for delivery — Timeline mode + inspector Export SRT/VTT: broadcast-format subtitle files (42 chars, 2 lines) from any media file.
Tips
- One-frame pulses (New Word) chain perfectly into Hold Trigger for visible flashes.
- Segments'
ageis the animation clock: fade words in by age, ghost thefinal:falsetail, snap solid on finalization. - Two nodes, two locales, one mic = simultaneous bilingual captions.
- Brand names and invented words will be misheard — the model formats numerals ("42", "$5") but knows no custom vocabulary yet.
- Mic quality honesty: room echo and speaker playback degrade recognition heavily; cable the digital source whenever one exists.
Open Transcription in the interactive catalog →
Transcription is one of 381 nodes in Grafit Pro.
Free download. Every feature for 7 days, no card. Then €99.99 once — or keep playing your projects as a Player.