Johannes Kaindl202 downloadsRead notes aloud with system voices and export them as WAV with a local, downloadable German voice. No cloud, no account.
🇬🇧 English · 🇩🇪 Deutsch
Read your notes aloud and turn them into WAV files — locally, with no cloud, no account, no Python.
Reading aloud works the moment you install the plugin, with the voices already on your computer. Exporting a note as a WAV file — say, a mailbox greeting for your phone system — is a deliberate opt-in: you enable it, you press Download, and only then does a voice (English or German) arrive on your disk.

Updates then arrive like any other community plugin update.
AnySource Sideloader installs and updates plugins from any git forge, independent of the Community Store. Add this repository as a source: https://git.jkaindl.de/jkaindl/audio-interface, then install Audio Interface and enable it.
Download main.js, manifest.json and styles.css from the latest Forgejo release and copy them into <vault>/.obsidian/plugins/audio-interface/, then enable the plugin. Or download audio-interface.zip from the release — it contains exactly these files — and unpack it into .obsidian/plugins/; checksums.sha256 lets you verify the download: shasum -a 256 -c checksums.sha256.
git clone https://git.jkaindl.de/jkaindl/audio-interface
cd audio-interface && npm install && npm run build
# main.js manifest.json styles.css → <vault>/.obsidian/plugins/audio-interface/
Source: git.jkaindl.de/jkaindl/audio-interface
| The status bar item shows what is happening — Reading 1/5, Rendering 2/9, Downloading 12/78 MB — and a click stops it. |
| Setting | What it does | Default |
|---|---|---|
| Voice | Which system voice reads aloud; Automatic picks the first German one | Automatic |
| Rate | Speech rate for reading aloud (0.5×–2×) | 1.0× |
| Read aloud with the downloaded voice | Use the Piper voice instead of the system voice for reading aloud (only shown once the voice is ready) | off |
| Enable WAV export | Reveals the voice row and the export settings — downloads nothing by itself | off |
| Voice for export | Which downloadable voice speaks: Piper · LJSpeech (en_US) or Piper · Thorsten (de_DE). Each entry shows what it still costs to download, or downloaded | follows Obsidian's display language |
| Piper · … (the selected voice) | The voice row: size, source and licenses, with Download / Cancel / Remove | not downloaded |
| Output profile | Phone system — 8 kHz mono or Native (voice sample rate) | Phone system |
| Target folder | Vault folder for the WAV files; empty = next to the note | empty |
| File name pattern | {{note}} and {{date}} are replaced; existing files get -2, -3, … |
{{note}} |
| Insert link into note | Append ![[file.wav]] at the cursor after a successful export |
off |
Reading aloud uses the browser's speech synthesis inside Obsidian — your operating system's voices, sentence by sentence, with pauses derived from the note's structure. No audio data is produced, which is also why system voices cannot export a file.
WAV export is an opt-in. Out of the box the plugin downloads nothing. When you enable export
and press Download, it fetches these files once, from this repository's Forgejo release
(https://git.jkaindl.de/jkaindl/audio-interface/releases); no other server is contacted:
| File | Size | What it is | License |
|---|---|---|---|
piper-worker.js |
≈ 3 MB | Synthesis worker (Piper pipeline, eSpeak-NG phonemizer as WASM, English + German dictionaries) | AGPL-3.0-or-later; contains ephone/eSpeak-NG (GPL-3.0-or-later), onnxruntime-web (MIT) |
ort-wasm-simd-threaded.wasm |
≈ 13 MB | ONNX Runtime Web (CPU) | MIT |
en_US-ljspeech-medium.onnx + .json |
≈ 61 MB | Piper voice LJSpeech (English, 22.05 kHz) | dataset public domain |
de_DE-thorsten-medium.onnx + .json |
≈ 60 MB | Piper voice Thorsten (German, 22.05 kHz) | dataset CC0 |
Only the voice you selected is fetched — the first two files are shared, so a second voice costs just its model.
Synthesis then runs in a Web Worker inside Obsidian (ONNX Runtime, CPU), the result is resampled
to the chosen profile, encoded as 16-bit WAV and written through Obsidian's vault API. There is no
telemetry. Architecture and measurements: AGENTS.md.
Nothing leaves your computer. Turning Turn audio files into text on lets the plugin talk to
one more address — a transcription program that you run on your own machine, by default
http://127.0.0.1:8765. The settings accept only local addresses (127.0.0.1, localhost,
[::1]); anything else falls back to the default, so a typo cannot send your recordings to a
stranger's server. The plugin never starts that program, and never installs it: if it is not
running, you get a message and nothing else happens.
When you transcribe a file, the plugin decodes it inside Obsidian, mixes it down to mono,
resamples it to 16 kHz and sends that as WAV. Decoding locally is not a detail — the program reads
audio through libsndfile, which does not understand webm or m4a, and those are exactly what
Obsidian's own audio recorder produces. The transcript is written as a new note next to the
recording; nothing is overwritten.
The companion program is audio-ui — speech
recognition (Parakeet) running locally on Apple Silicon. It is optional: without it, the plugin
does everything else exactly as before.
On iOS/iPadOS there is no local companion program and no downloadable voice, so two features run through an Apple Shortcut instead: transcription (a second backend next to the local program, switchable in the settings) and a new spoken-word file — turn a note or selection into an audio file, saved into the vault. Both work on the desktop too, as a second option. See Set up the Apple Shortcut for setup, limits (no streaming, the shortcut chooses the file extension) and troubleshooting.
Transcribing audio files is available now (see above). Live dictation — speaking and having the text appear as you go — needs the companion program to listen to the microphone itself, which is being built there; the plugin will stay a thin client that receives text. Higher-quality voices through the same local program are planned for a later release.
Issues and pull requests on git.jkaindl.de.
Test-driven (npm run gate); larger features via brainstorm → spec → plan → TDD
(specs and plans live in the maintainer's vault cockpit). See AGENTS.md.
LICENSE).LICENSE-DOCS).Copyright © 2026 Johannes Kaindl.