using System; namespace ytLive.Helpers; /// The accessible mono fold: average each stereo pair into both channels. /// /// Creator context (2026-10-30): profoundly deaf on the right. Hard-panned content is not /// quieter to them, it is ABSENT, so a single-sided game or clip is unusable. Folding to mono puts /// everything on both sides — the loudness cost is honest (a one-sided signal arrives at half /// amplitude) and speech is unaffected because the mic is already centred. public static class AudioFold { /// Folds an interleaved buffer in place. Mono buffers are left untouched: there is /// nothing to combine, and rewriting them would be a silent no-op that hides a caller's bug. public static void ToMono(Span interleaved, int channels) { if (channels < 2) return; var frames = interleaved.Length / channels; for (var frame = 0; frame < frames; frame++) { var offset = frame * channels; var mono = (interleaved[offset] + interleaved[offset + 1]) * 0.5f; interleaved[offset] = mono; interleaved[offset + 1] = mono; } } }