[BUG] Dictation (record button) does nothing when the default audio output device cannot start
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Summary
In Claude desktop for macOS, the dictation/record button silently does nothing when
the default audio output device fails to start. The microphone permission is
granted and the microphone works in other apps. The recorder never captures audio
because its Web Audio graph is clocked by the output device.
Environment
- Claude desktop 2.16120.0 (a staged update, 2.19675.0, had not been applied yet, was later applied and the bug persisted.)
- Claude Code 2.1.284 (bundled)
- macOS 26.6.2, MacBookPro18,2
- Default input: MacBook Pro Microphone (works in other apps)
- Default output: MacBook Pro Speakers (hardware fault; cannot start)
Steps to reproduce
- Have a default output device that cannot start (here: failed built-in speakers).
- Click the record button in a Code session.
Expected
Recording starts. A broken output device should not matter for capturing mic audio.
Actual
Nothing happens. No error is shown in the UI.
Evidence
- TCC allowed the request:
AUTHREQ_RESULT ... service=kTCCServiceMicrophone, authValue=2. - App log:
Media permission probe { result: 'granted', captureKind: 'audio', ... }. coreaudiod: built-in mic_StartIO ... succeeded; built-in speaker fails every time:
IOA2UCDevice::StartIO: got an error when telling the hardware to start, Error: 0xE00002E9
- Any app that plays sound also fails on this Mac (
afplay→AudioQueueStart failed ('what')). claude.ai-web.logat each attempt:
The ScriptProcessorNode is deprecated. Use AudioWorkletNode instead.
then The AudioContext encountered an error from the audio device or the WebAudio renderer.
Diagnosis
Test page in the app's own browser pane (Web Audio, ScriptProcessorNode fed by aConstantSourceNode, run for 2 s):
| AudioContext option | state | onaudioprocess callbacks |
|---|---|---|
| default output (broken speaker) | suspended | 0 |
| { sinkId: { type: 'none' } } | running | 23 |
The recorder's audio graph is clocked by the output sink. When the sink cannot
start, the graph never runs and no mic samples are delivered.
Suggested fix
Do not depend on an output device to capture mic audio. Use MediaRecorder, or anAudioWorkletNode in a context created with sinkId: { type: 'none' }. Also show
an error in the UI when recording cannot start.
Related
- #65471 (closed as stale, never diagnosed): macOS desktop, dictation "captures audio but never
transcribes". It shows the same burst of ~10 kTCCServiceMicrophone requests in ~100 ms, and no
output-device check was recorded. It may share this root cause.
- No existing issue found that names the output device,
AudioContextorsinkIdas the cause.
Workaround
Select a working output device (headphones, AirPods, a virtual device) in
System Settings → Sound → Output.
What Should Happen?
Recording starts. A broken output device should not matter for capturing mic audio.
Error Messages/Logs
## Evidence
- TCC allowed the request: `AUTHREQ_RESULT ... service=kTCCServiceMicrophone, authValue=2`.
- App log: `Media permission probe { result: 'granted', captureKind: 'audio', ... }`.
- `coreaudiod`: built-in mic `_StartIO ... succeeded`; built-in speaker fails every time:
`IOA2UCDevice::StartIO: got an error when telling the hardware to start, Error: 0xE00002E9`
- Any app that plays sound also fails on this Mac (`afplay` → `AudioQueueStart failed ('what')`).
- `claude.ai-web.log` at each attempt:
`The ScriptProcessorNode is deprecated. Use AudioWorkletNode instead.`
then `The AudioContext encountered an error from the audio device or the WebAudio renderer.`
Steps to Reproduce
Steps to reproduce
- Have a default output device that cannot start (here: failed built-in speakers).
- Click the record button in a Code session.
Claude Model
Opus
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.284
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
_No response_