Before: you passed a multi-channel buffer. The SDK mixed it down to mono internally, enhanced it, and mixed the result back into your channels. That mixback was hard to predict per channel, so the output level and spatial presentation could surprise you.
Now: every audio API takes one mono buffer. Channel handling is yours, so the result is whatever you decide it is.
The same release also moves voice activity detection into a dedicated Vad object and removes energy-based VAD. If you read a VAD signal from a processor, see Migrate to the dedicated VAD.
What changed
Your old num_frames value is your new block_size, because it already meant samples per channel. Error codes were renamed too, see the changelog.
Do not pass the total length of a multi-channel buffer. A stereo block of 480 frames holds 960 samples, but the mono block size is still 480. A mismatch returns AIC_ERROR_CODE_AUDIO_CONFIG_MISMATCH.
If you still want multi-channel output
Two steps: downmix to mono, then distribute the enhanced mono back across your channels.
1. Downmix to mono
Cast back to float32, because mean() widens to float64. process() also needs a contiguous array. Allocate mono once outside the processing loop, because allocation is not real-time safe.
2. Copy the enhanced mono into each channel
This does not reproduce the old mixback. Every channel now carries the identical enhanced signal, so any stereo image in the input is gone and the perceived level may differ. Check loudness and enhancement level against representative audio.
See Audio Format for downmix caveats when channel gain or phase matters.
If your channels are independent streams
Do not downmix. Two sides of a call, or two speakers on separate mics, are separate streams. Create one processor per stream, each with its own state:
The processors can share one model. The old 16-channel limit is gone, since concurrency is now bounded only by how many instances you create. The same applies to the analyzer: one collector and analyzer pair per stream.
Migrate to the dedicated VAD
Move voice activity detection onto a dedicated VAD model.
Python SDK 2.5 to 3.0
Every Python-specific rename in this release.