Mic-device change while recording. Returns the stream to hand to
recorder.switchStream, or null if the strategy swapped its mic input
internally (mixer) and the recorded stream is unchanged.
Returns the stream to pass to recorder.resume.
Returns the stream to record + a cleanup to run when recording fully ends.
Decides which stream the recorder records and how the mic is swapped, without the recorder or the UI knowing about it. The strategy never touches the recorder — it only returns streams; the
RecordingProviderowns allrecorder.*calls. This keeps the asymmetry between recording paths (mic-only mustswitchStream; a mixer-backed path must not, because the recorded stream is stable) encapsulated in one place.