Repository navigation
macOS: microphone recorded as silence (native ScreenCaptureKit capture, 1.11.0) #709
Description
Summary
On macOS, a recording made with the microphone enabled has a silent audio track. The screen video is fine, and the microphone works elsewhere in the app.
Reported by a user (private message, 2026-09-18):
- MacBook Pro M1, macOS Tahoe 26.6.2 (25G83)
- OpenScreen 1.11.0 (DMG)
- Tried both the built-in microphone and an external one. Both are listed in the HUD device settings, and the level meter moves there.
- Every take opens in the editor with blank audio.
- Recording a voice-over in the editor afterwards works, and so does transcribing it. So the microphone, its permission and STT are all fine. Only the native capture path is affected.
What was ruled out
- Signing / entitlements: the published
Openscreen-Mac-arm64-1.11.0.zipis notarized. Both the app andopenscreen-screencapturekit-helpercarrycom.apple.security.device.audio-inputunder the hardened runtime, andNSMicrophoneUsageDescriptionis present. - Permission: the helper throws
permissionDeniedwhen access is not authorized, so a missing grant would fail the take outright rather than record silence.
Probable cause
AudioTrackMixer (electron/native/screencapturekit/Sources/OpenScreenCaptureCore) places every source buffer on the timeline by its raw presentation timestamp. That assumes the microphone output is stamped on the host clock the writer session runs on. ScreenCaptureKit does not promise this: according to Apple, the microphone and app audio are on independent clocks (forum thread 805892).
If the microphone's time base is off by more than a moment, all of its audio lands either before frame 0, where it is trimmed as pre-roll, or after the end of the take, where it is never reached. The result is a silent track with no error surfaced.
Why we never saw it: the only macOS test machine has no input device at all. There, ScreenCaptureKit's microphone output mirrors system audio, clock included, so the assumption held every time we tested.
Not yet confirmed on real hardware. The diagnostics export (helperOutput.mac) carries the audio-timeline-summary line. With the fix it also reports microphone.clockOffsetSeconds, which confirms or refutes this in one take.
Fix
The first buffer of each source decides whether its clock is foreign:
- Within 1 s of the capture clock, nothing changes. That gap is ordinary latency.
- Beyond 1 s, the source is realigned once so that first buffer ends at arrival. Later buffers keep their own spacing.
The offset is reported in the timeline summary, and an audio-source-clock-rebased warning is emitted once.
Activity
EtienneLescot commentedon Sep 18, 2026
Update: the reporter tested the PR #710 build (run 35338321322, notarized arm64 DMG) and the microphone track is still silent. The foreign-clock hypothesis is either wrong or incomplete, so #710 should not be presented as the fix for this issue yet. Next step: collecting the diagnostics export (helper
audio-timeline-summary+ the[native-sck] starting macOS capturerequest) and the raw recording file from an affected take.fix(macos): decode 24-bit integer microphone audio
EtienneLescot commentedon Sep 18, 2026
Root cause found from the reporter's diagnostics export: the ScreenCaptureKit microphone output arrives as 48 kHz mono 24-bit integer on their MacBook Pro, and the mixer only decoded Float32/Int16/Int32. Every microphone buffer was rejected (
audio-source-undecodable), so the whole take's microphone was undelivered. The foreign-clock hypothesis above was wrong and is reverted. The fix is in #710.fix(macos): decode 24-bit integer microphone audio
github-actions commentedon Sep 18, 2026
Fixed by #710 and merged into
main.This change is assigned to the
Next Releaserelease milestone and is not necessarily available in the latest downloadable desktop release yet. It is currently marked asstatus: pending releaseuntil a packaged release containing it is published.EtienneLescot commentedon Sep 18, 2026
Moved into
v1.12.1as part of the pre-release cut.fix(macos): decode 24-bit integer microphone audio