Commit 65daf44
committed
fix: handle high channel count audio devices (e.g., 34-channel interfaces)
Problem: Cap crashed or produced chipmunk audio on systems with professional
audio interfaces that report many channels (like RME Digiface with 34 outputs).
Root causes:
1. channel_layout() panicked when channel count exceeded 8 (FFmpeg's max)
2. Audio data was processed assuming device's channel count, but FFmpeg
can only handle up to 8 channels, causing buffer size mismatches
3. Output audio stream was configured for 34 channels but only 8 channels
of data were being sent, causing ~4x playback speed (chipmunk effect)
Fixes:
- AudioInfo now stores actual device channel count for correct data parsing
- Added for_ffmpeg_output() helper that clamps channels to 8 for FFmpeg ops
- channel_layout() gracefully handles any channel count by clamping
- AudioResampler, AudioPlaybackBuffer, and PrerenderedAudioBuffer all clamp
- Output stream config now matches clamped channel count
The key insight: we need the real channel count to correctly parse interleaved
audio data from the device, but must clamp to 8 channels for FFmpeg processing
and audio output streams.1 parent 58009a5 commit 65daf44
3 files changed
+46
-16
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
264 | 264 | | |
265 | 265 | | |
266 | 266 | | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
267 | 270 | | |
268 | 271 | | |
269 | 272 | | |
| |||
391 | 394 | | |
392 | 395 | | |
393 | 396 | | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
394 | 400 | | |
395 | 401 | | |
396 | 402 | | |
| |||
460 | 466 | | |
461 | 467 | | |
462 | 468 | | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
463 | 473 | | |
464 | 474 | | |
465 | 475 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
940 | 940 | | |
941 | 941 | | |
942 | 942 | | |
| 943 | + | |
| 944 | + | |
| 945 | + | |
| 946 | + | |
| 947 | + | |
| 948 | + | |
| 949 | + | |
943 | 950 | | |
944 | 951 | | |
945 | 952 | | |
| |||
1159 | 1166 | | |
1160 | 1167 | | |
1161 | 1168 | | |
| 1169 | + | |
| 1170 | + | |
| 1171 | + | |
| 1172 | + | |
| 1173 | + | |
| 1174 | + | |
1162 | 1175 | | |
1163 | | - | |
1164 | 1176 | | |
1165 | 1177 | | |
1166 | 1178 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| 29 | + | |
| 30 | + | |
29 | 31 | | |
30 | 32 | | |
31 | 33 | | |
| |||
71 | 73 | | |
72 | 74 | | |
73 | 75 | | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | | - | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
80 | 81 | | |
81 | 82 | | |
82 | 83 | | |
83 | 84 | | |
84 | | - | |
85 | | - | |
| 85 | + | |
86 | 86 | | |
87 | 87 | | |
88 | 88 | | |
| |||
146 | 146 | | |
147 | 147 | | |
148 | 148 | | |
149 | | - | |
150 | | - | |
151 | | - | |
152 | | - | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
153 | 155 | | |
154 | 156 | | |
155 | | - | |
| 157 | + | |
156 | 158 | | |
157 | 159 | | |
158 | 160 | | |
| |||
162 | 164 | | |
163 | 165 | | |
164 | 166 | | |
165 | | - | |
| 167 | + | |
166 | 168 | | |
167 | 169 | | |
168 | | - | |
| 170 | + | |
169 | 171 | | |
170 | 172 | | |
171 | 173 | | |
| |||
208 | 210 | | |
209 | 211 | | |
210 | 212 | | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
211 | 219 | | |
212 | 220 | | |
213 | 221 | | |
| |||
0 commit comments