Audacity Transcription Presets
July 28, 2026 · View on GitHub
Export presets, silence-trimming settings and macros for turning an Audacity recording into a file that is cheap to store, fast to upload, and loses nothing that a speech-to-text engine can actually use.
This is a staged project. Right now it is a plan plus the settings research behind it; see Status for what has been verified and what has not.
The problem
The default Audacity export is tuned for music: stereo, 44.1 kHz, ~192 kbps. For a dictation recording that is heading straight into Whisper or AssemblyAI, most of that is thrown away on arrival:
- ASR engines resample to 16 kHz mono internally. AssemblyAI's own docs say the API "converts all files to 16 kHz uncompressed audio as part of its transcription pipeline"; Whisper does the same. A stereo 192 kbps file is downmixed and downsampled before the model sees a single sample.
- Stereo is pure waste for a single speaker at one microphone. Both channels carry the same signal, doubling file size for zero information.
- Upload size is a real constraint. OpenAI's transcription endpoint is capped at 25 MB per file. At 192 kbps stereo that is about 17 minutes; at 64 kbps mono it is about 52 minutes.
So the goal is a one-click path from "stop recording" to "correctly encoded file on the Desktop, ready to transcribe".
The three stages
| Stage | What | Feasibility |
|---|---|---|
| 1. Export presets | voice-mp3 and voice-opus — mono, sane bitrate, one keystroke | Practicable now. Fully specified below. |
| 2. Trim + export macro | One macro: Truncate Silence → export to Desktop | Likely. Both steps are exposed to macros; needs testing. |
| 3. Transcribe in Audacity | Whisper runs inside Audacity, text lands on the Desktop | Stretch. Real but Linux means a source build. |
Detail, acceptance criteria and open questions: docs/roadmap.md.
Stage 1 — the presets
Two presets, because the right answer depends on where the file is going.
| Preset | Format | Channels | Rate | Use for |
|---|---|---|---|---|
voice-mp3 | MP3, CBR | Mono | 64 kbps (96 for difficult audio) | The default. Accepted everywhere. |
voice-opus | Opus, VBR, VoIP mode | Mono | 24–32 kbps | Local Whisper, AssemblyAI, archival. |
Why MP3 is still the default
Opus is the better codec by a wide margin — roughly a third of the bitrate for
equivalent speech quality — but OpenAI's transcription API will not take it.
The accepted extensions are mp3, mp4, mpeg, mpga, m4a, wav, webm. Neither
.opus nor .ogg is on that list. Opus inside a .webm container would pass,
but Audacity cannot write WebM.
That makes MP3 the safe default and Opus the efficient one, which is worth
knowing before you standardise on the wrong one. See
docs/format-choice-for-asr.md for the
per-service ingest constraints.
Why these bitrates
64 kbps CBR mono is not an arbitrary choice — it is what the Audacity manual itself recommends for spoken-word podcasts ("64 kbps CBR mono for small files, 96 kbps CBR mono for excellent voice quality"). Against the current 192 kbps setting on this machine that is a 6× size reduction with no loss the ASR model can perceive, since it is resampling to 16 kHz regardless.
For Opus, 24–32 kbps mono with the encoder in VoIP mode sits in the same perceptual tier for speech. VoIP mode matters: it is the libopus setting explicitly "optimized for voice", versus the default "Audio" mode tuned for music.
The catch: Audacity has no shareable export preset
This is the finding that shapes the whole design. An Audacity export preset is
not an object. There is no preset file to drop in, no named entry in the export
dialog. Export settings are global mutable state held in audacity.cfg, and
the Export2 macro command takes only a filename and a channel count — no
format, no bitrate. Format is inferred from the file extension; everything else
comes from whatever was last set in the Export dialog.
Consequently a "preset" here is a fragment of audacity.cfg keys plus a macro
that exports with the matching extension. The mechanics, the exact config keys
and their observed values are documented in
docs/audacity-export-internals.md.
Stage 2 — trim silence, then export
Audacity does expose silence removal to macros: the Truncate Silence effect,
scripting id TruncateSilence. So the envisaged single macro is real:
SelectAll
TruncateSilence (compress mode)
Export2 (mono, to ~/Desktop)
For dictation the manual recommends Compress Excess Silence rather than truncate-to-fixed-length — it scales the excess proportionally and so "tightens lectures and dictation without harming the words", rather than flattening every pause to the same length and destroying the natural rhythm.
Settings, the threshold-tuning trap, and why you should measure your own noise
floor first: docs/truncate-silence-for-speech.md.
Draft macro files: macros/ — not yet tested, see the caveat there.
Stage 3 — transcription inside Audacity
This exists. Intel maintains
openvino-plugins-ai-audacity,
which adds a Whisper Transcription effect (whisper.cpp on an OpenVINO
backend) running entirely locally. It writes the transcript into a label track,
exportable as SRT, VTT or plain text via File → Export Other → Export Labels.
On this hardware it is the wrong vehicle. OpenVINO is Intel's stack: the GPU
plugin is documented as targeting "Intel GPUs, both integrated and discrete", and
the CPU plugin as covering "Intel® x86-64 and Arm® CPUs". This laptop is an AMD
Ryzen 7 5700U with Radeon integrated graphics and no NPU, so nothing in that
stack has anything to accelerate — it would fall back to generic CPU inference.
The build cost (Audacity from source, then mod-openvino, plus OpenVINO runtime,
Libtorch and whisper.cpp) buys the label-track UI and nothing else.
On-device Whisper itself is perfectly viable here — see
docs/roadmap.md for the hardware analysis. It just does not
need to happen inside Audacity. Stage 1 plus a plain whisper.cpp call covers the
workflow at a fraction of the effort.
Status
Researched and written 2026-07-28 against Audacity 3.7.7 on Ubuntu.
Nothing in this repo has been executed yet. Every setting below is sourced — either read off this machine or taken from the Audacity manual — but the macros have not been run and the config fragments have not been applied.
| Confirmed on this machine | Audacity 3.7.7; config at ~/.config/audacity/audacity.cfg; MP3 + Opus exporters present and enabled; mod-script-pipe.so present; Export2 registered in Scriptables2 |
| Confirmed from the manual | TruncateSilence parameters and defaults; MP3 and Opus export options; OpenAI/AssemblyAI ingest constraints |
| Inferred, needs testing | The exact Export2 scripting parameter keys; the audacity.cfg enum mappings; that encoder settings are read from config at export time |
Inferences are flagged as such at the point they are made. Verification steps are
listed in docs/roadmap.md.
Version warning. The current online scripting reference no longer lists
Export2at all — it documents a parameterlessExportAudioinstead. This machine's 3.7.7 does registerExport2. Macros written here are therefore 3.7.x-specific and are likely to break on a future Audacity. Re-verify after any major upgrade.
Layout
docs/
audacity-export-internals.md how export settings are actually stored and applied
format-choice-for-asr.md what each transcription service will accept
truncate-silence-for-speech.md settings for dictation, and how to tune them
roadmap.md stages, acceptance criteria, open questions
macros/ draft Audacity macro files (untested)
presets/ audacity.cfg fragments for each preset