Thank you Pallab, Henrik,
(I should have specified, I am using the native api!)
I have enumerated and allowed the user to select an appropriate audio device in my application.
I have managed to change the device at runtime though. To do this I stop the ADM, change the device, and restart it. The recording must be restarted even when only changing playout, as the buffers must be in sync for echo cancellation. Playout and Recording must also be initialised, as the object is de-initialised on stop. That is, the sequence looks like:
adm.StopPlayout();
adm.StopRecording();
adm.SetPlayoutDevice(device); // or recording...
adm.InitPlayout();
adm.InitRecording();
adm.StartPlayout();
adm.StartRecording();
The existing streams are piped to the new device so I don't interact with the transceivers or perform any signaling.
I am not sure if this is correct, as it is mainly from trial and error, but it works on multiple Windows PCs so far.
Sj