aa39a821db
Audio flows in MXL use mxlFlowWriterOpenSamples/CommitSamples, not the grain API (mxlFlowWriterOpenGrain is for discrete video flows). Using the grain API silently did nothing — hence "last published index: 0". MXL audio is float32 planar: each channel occupies its own ring buffer region accessed at base.fragments[*].pointer + c * slice.stride. Two fragments handle ring buffer wraparound. No int32 conversion needed. Also log continuous.channelCount/bufferLength instead of the discrete sliceSizes field (wrong union member for audio). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>