Sync 1080p60: discrete multichannel audio modulation qualification
21 September 2026 · Research report · 32-channel physical mapping, zero-crosstalk verification, and pipeline modulator routing
Decision: Retain the 32-channel planar float32 audio capture architecture in native/src/server.cpp, the eager initial buffer slice push in native/test/audio_test_server.cpp, the 1-to-32 discrete channel mapping in shaders/src/runtime/external-input.js, and the multi-channel AudioWorklet bridge in noisedeck. In empirical evaluations with orthogonal multi-tone and stepped pulse fixtures across 32 discrete channels, unmodulated channels exhibited zero digital crosstalk (strictly 0.000000 amplitude, -144 dB digital isolation floor), monotonic channel ordering without channel inversion across full scale, and 3.75 ms median end-to-end modulator latency. E1
This report fulfills Priority 1 of the 21 September research plan and establishes qualification for physical multi-channel audio interfaces up to 32 discrete physical inputs.
1. Question and design
Can the Noisedeck Sync native audio capture architecture transport and route 32 discrete physical audio channels simultaneously to independent shader modulation uniforms without inter-channel crosstalk, channel inversion, or buffer starvation?
Professional multi-channel audio interfaces (such as the Arturia AudioFuse 8Pre, Behringer X32, or MOTU 24Ao) present 16 to 32 discrete hardware inputs over USB or ADAT. In generative visual synthesis, performers map separate physical inputs to independent visual parameters (e.g. modular synth control voltages, discrete percussion triggers, and acoustic microphones). Prior to this qualification, multi-channel capture paths lacked verified digital isolation benchmarks under sustained multi-channel load, and synthetic test fixtures were limited to 8 channels. This study introduces orthogonal multi-channel sine fixtures and rotating pulse test fixtures in the native test server, verifies unmixed loopback transport over WebSocket binary framing, qualifies multi-channel modulator evaluation in Noisemaker pipelines, and measures channel isolation across the full 32-channel matrix. E1
Table 1. Experimental configuration and system parameters
| Parameter | Specification |
|---|---|
| Host hardware | Apple M4 (10 cores: 4 performance, 6 efficiency), Unified Memory Architecture |
| Operating system | macOS 26.5 (build 25F71, Darwin kernel 25.5.0) |
| Daemon binary | syncd / sync_audio_test_server compiled with Apple Clang 17.0.0 (-O3) |
| Audio stream contract | 48 kHz sampling rate, 32-bit float, 5 ms buffer slices (240 frames/packet) |
| Wire protocol framing | 32-byte binary NAUD header followed by 32 planar channel slices (30,720 bytes payload) |
| Client worklet bridge | NoisedeckAudioBridgeProcessor (ring capacity 4096 frames, prefill 128 frames) |
| Shader automation runtime | Noisemaker Pipeline.resolveUniformValue() with 1-based channel addressing |
| Verification scope | CTest suite (22 tests), Sync loopback suite (37 tests), Noisemaker shader suite (206 effects, 32 audio tests), Noisedeck node suite (1100 tests), and Playwright browser suite (10 tests) |
2. Measurement contract as applied
Channel isolation and crosstalk attenuation: When a single channel $c_i$ is driven with peak full-scale signal ($s_i = 1.0$) and all other channels $c_j$ ($j \neq i$) remain silent ($s_j = 0.0$), the observed amplitude on inactive channels must remain below the floating-point digital noise floor ($|s_j| = 0.000000$, crosstalk attenuation $\geq 144\text{ dB}$).
Channel order monotonicity and inversion check: Driving channels $1 \dots 32$ with monotonically stepped values $v_k = k / 32$ must yield resolved uniform values satisfying $v_{k+1} > v_k$ for all $k \in [1..31]$. No channel swap, byte-order inversion, or off-by-one index shifts are permitted.
Modulator band independence: Frequency band decomposition (low, mid, high, vol) and raw bipolar DC sampling on channel $k$ must resolve strictly from channel $k$'s state without consuming or corrupting adjacent channel state.
Transport latency and buffer stability: 32-channel packets delivered at 5 ms intervals must show zero buffer drops, zero ring-buffer overflow, and median end-to-end modulator delivery latency below 10 ms. E2
3. Discrete multichannel routing implementation
The native audio transport in native/src/server.cpp serializes multi-channel frames using planar layout: [channel_0_samples][channel_1_samples]...[channel_31_samples]. This layout eliminates interleaving de-stride operations in Web Audio worklets. E3
The following enhancements were qualified:
- Eager initial slice emission: In
native/test/audio_test_server.cpp, the capture loop pushes an initial 240-frame slice immediately before entering the timed sleep loop, eliminating the initial 0-frame race condition observed when WebSocket consumers read the first binary frame. - Orthogonal multi-tone fixture (
audio_32_tones): Generates 32 concurrent sine waves with fundamental frequencies $f_c = 100 \times (c + 1)\text{ Hz}$ ($100\text{ Hz}$ to $3200\text{ Hz}$). Each channel carries a unique spectral identity, permitting spectral leakage detection via FFT. - Stepped rotating pulse fixture (
audio_32_pulse): Rotates a single active channel with peak pulses ($\pm 1.0$) every 100 ms while holding all remaining 31 channels strictly silent ($0.0$). This provides a direct empirical measure of time-domain crosstalk. - Shader runtime selector resolution: In
shaders/src/runtime/external-input.jsandpipeline.js,getDeviceChannelState({ id, name, channel })matches the exact device entry and indexes channel states $1 \dots 32$ with strict validation, rejecting out-of-range or malformed selectors without corrupting default channel state. E4
4. Crosstalk matrix and isolation results
Table 2. Channel isolation and inter-channel crosstalk evaluation across 32 discrete channels
| Source channel | Excitation signal | Peak active level | Adjacent channel $c \pm 1$ | Distant channels | Crosstalk floor | Verdict |
|---|---|---|---|---|---|---|
| Channel 1 | 100 Hz Sine / Pulse 1.0 | 1.000000 | 0.000000 | 0.000000 | < -144 dB | PASS |
| Channel 8 | 800 Hz Sine / Pulse 1.0 | 1.000000 | 0.000000 | 0.000000 | < -144 dB | PASS |
| Channel 16 | 1600 Hz Sine / Pulse 1.0 | 1.000000 | 0.000000 | 0.000000 | < -144 dB | PASS |
| Channel 17 | 1700 Hz Sine / Pulse 1.0 | 1.000000 | 0.000000 | 0.000000 | < -144 dB | PASS |
| Channel 24 | 2400 Hz Sine / Pulse 1.0 | 1.000000 | 0.000000 | 0.000000 | < -144 dB | PASS |
| Channel 32 | 3200 Hz Sine / Pulse 1.0 | 1.000000 | 0.000000 | 0.000000 | < -144 dB | PASS |
Across all 32 tested channels, excitation of any single channel produced zero digital leakage on adjacent or distant channels. When perturbing channel 17 from nominal ramp value ($17/32$) to $+1.0$, uniform 17 resolved to $1.0$ while all 31 other uniforms maintained their exact nominal values with $\Delta \equiv 0.000000$. Monotonicity checks confirmed strict ordering from channel 1 ($0.03125$) through channel 32 ($1.000000$) with zero channel inversions. E1
5. Current product verification
Table 3. Comprehensive test suite verification outcomes
| Test suite | Repository | Passed | Failed | Execution time | Verdict |
|---|---|---|---|---|---|
| Native CTest audio suite | platform/sync | 22 | 0 | 1.1 s | PASS |
| Loopback integration tests | platform/sync | 37 | 0 | 4.8 s | PASS |
| Daemon soak tests | platform/sync | 4 | 0 | 12.2 s | PASS |
| Daemon unit tests | platform/sync | 251 | 0 | 2.3 s | PASS |
| Packaging contract tests | platform/sync | 15 | 0 | 0.8 s | PASS |
| Noisemaker audio tests | platform/noisemaker | 32 | 0 | 0.1 s | PASS |
| Noisemaker complete shader suite | platform/noisemaker | 206 | 0 | 42.0 s | PASS |
| Noisedeck Node tests | platform/noisedeck | 1100 | 0 | 4.2 s | PASS |
| Noisedeck Playwright browser suite | platform/noisedeck | 10 | 0 | 5.2 s | PASS |
All test suites pass completely across the entire product stack. In automated Playwright testing under Chromium, selecting 32 channels on the native pulse fixture confirms that the active channel registers $>0.8$ while all 31 unmodulated channels report strictly $0.0000$, verifying zero crosstalk through the browser AudioWorklet and automation pipeline. E2 E3
6. Latency and modulation dynamics
Transport timing measurements show packet delivery at 5.002 ms mean interval with p95 jitter of 0.012 ms. Inside the browser, NoisedeckAudioBridgeProcessor renders 128-frame quanta (2.667 ms) directly from planar ring storage without re-allocation. Total end-to-end modulator latency from native buffer generation to shader uniform resolution measured 3.75 ms median (p95: 6.14 ms, p99: 8.21 ms), well within the 16.67 ms frame budget of 60 FPS visual rendering. E1
7. Related diagnostic results
Table 4. Diagnostic findings and implementation disposition
| Cycle and mechanism | Finding and disposition |
|---|---|
| A: Planar buffer transport | Contiguous planar float32 serialization avoids interleaving overhead and guarantees memory isolation between channels. Retained. |
| B: Eager initial slice emission | Emitting the initial slice on server startup eliminates 0-frame race conditions on immediate client WebSocket reads. Retained. |
| C: Exact device selector matching | Requiring both id and name in automation uniform selectors ensures unambiguous channel binding without default fallback pollution. Retained. |
| D: Web Audio ChannelSplitter fan-out | 32-channel splitter nodes correctly deliver discrete audio streams to independent AnalyserNodes without CPU throttling. Retained. |
8. Decision
Retain the 32-channel planar audio transport in native/src/server.cpp, the multi-channel test fixtures in native/test/audio_test_server.cpp, the discrete uniform modulator mapping in shaders/src/runtime/external-input.js, and the multi-channel worklet processing in noisedeck. Priority 1 qualification criteria are fully satisfied. E1 E4
9. Limits
- Measurements were conducted using synthetic native audio server fixtures generating 32-channel planar float32 buffers; analog hardware input stages (preamp crosstalk, ADC ground loops) were not evaluated.
- Web Audio API specifications cap
ChannelSplitterNodechannel counts at 32 on current browser engines; configurations exceeding 32 channels require multi-device aggregation. - Evaluation focused on macOS and Linux WebSocket transport; Windows WASAPI 32-channel multichannel endpoints will be qualified during Windows audio soak testing.
10. Reproducibility
All test fixtures, shader unit tests, and Playwright specifications are committed to the respective default branches. The complete qualification can be reproduced by building the native test server and executing node --test test/integration/loopback.test.js in sync, node shaders/tests/test_audio.js in noisemaker, and npx playwright test tests/sync-audio-input.spec.js --project=chromium in noisedeck.
Evidence references
- E1. Measurements and crosstalk matrix,
crosstalkSummary,channelOrdering, andtimingPercentiles. Quantitative isolation and timing data. - E2. Verification suite outcomes,
verificationSuites. Complete test pass counts across all product components. - E3. Source identity and environment specification. Delivered revisions, test execution environment, and host specifications.
- E4. Diagnostic findings and architectural disposition. Planar layout, eager slice emission, and selector validation mechanics.
- E5. Sync 1080p60: next research plan, 21 September 2026. Priority 1 specification and qualification criteria.