aboutsummaryrefslogtreecommitdiff
path: root/tests/test-video-audio-recording--build-audio-command.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-07-01 13:45:19 -0400
committerCraig Jennings <c@cjennings.net>2026-07-01 13:45:19 -0400
commite46376a2d9263ba9c8ef26891de44bd5920bd4a9 (patch)
treea4c9e52ae6d1d1e9b028f691a3b7822442134ada /tests/test-video-audio-recording--build-audio-command.el
parent5a887435102236ac8381d24db5c75c02b9109276 (diff)
downloaddotemacs-e46376a2d9263ba9c8ef26891de44bd5920bd4a9.tar.gz
dotemacs-e46376a2d9263ba9c8ef26891de44bd5920bd4a9.zip
fix(recording): record audio-only to lossless FLAC, not AAC/M4A
Audio-only recordings were written as AAC in an MP4/.m4a container. The stop path SIGINTs ffmpeg, and if the MP4 muxer doesn't write its moov trailer before exit, the file has no moov atom and won't decode. ffmpeg and AssemblyAI both reject it. Three recordings were lost that way and had to be rebuilt with untrunc. The video path already avoids this by using Matroska, which needs no finalize pass. I switched the audio-only path to FLAC. FLAC frames are self-contained, so an abruptly stopped recording still decodes, with no trailer to miss at close. It's also lossless, dropping the 64k AAC encode that degraded speech before transcription. AssemblyAI recommends a lossless source and accepts FLAC directly. The transcription path passes audio files through untouched.
Diffstat (limited to 'tests/test-video-audio-recording--build-audio-command.el')
-rw-r--r--tests/test-video-audio-recording--build-audio-command.el13
1 files changed, 8 insertions, 5 deletions
diff --git a/tests/test-video-audio-recording--build-audio-command.el b/tests/test-video-audio-recording--build-audio-command.el
index 54e5f56c..9577899b 100644
--- a/tests/test-video-audio-recording--build-audio-command.el
+++ b/tests/test-video-audio-recording--build-audio-command.el
@@ -3,8 +3,8 @@
;;; Commentary:
;; Unit tests for cj/recording--build-audio-command.
;; Verifies correct ffmpeg command construction for audio-only recording
-;; (mic + system monitor mixed to M4A/AAC), including shell quoting of
-;; device names and output paths.
+;; (mic + system monitor mixed to lossless FLAC), including shell quoting
+;; of device names and output paths.
;;; Code:
@@ -19,14 +19,17 @@
;;; Normal Cases
(ert-deftest test-video-audio-recording--build-audio-command-normal-uses-ffmpeg-pulse ()
- "Normal: audio command uses ffmpeg with two PulseAudio inputs mixed to AAC."
+ "Normal: audio command uses ffmpeg with two PulseAudio inputs mixed to FLAC."
(let ((cj/recording-mic-boost 2.0)
(cj/recording-system-volume 1.0))
- (let ((cmd (cj/recording--build-audio-command "mic" "sys" "/tmp/out.m4a")))
+ (let ((cmd (cj/recording--build-audio-command "mic" "sys" "/tmp/out.flac")))
(should (string-match-p "ffmpeg" cmd))
(should (string-match-p "-f pulse -i" cmd))
(should (string-match-p "amix=inputs=2" cmd))
- (should (string-match-p "-c:a aac" cmd)))))
+ (should (string-match-p "-c:a flac" cmd))
+ ;; Lossless: no lossy bitrate cap should be emitted.
+ (should-not (string-match-p "-b:a" cmd))
+ (should-not (string-match-p "-c:a aac" cmd)))))
(ert-deftest test-video-audio-recording--build-audio-command-normal-devices-in-command ()
"Normal: both mic and system device names appear in the command."