A quick test with the devices I have on hand, show that I can't
reproduce the problem. It's entirely possible that the format is
being rejected by the hardware itself, possibly due to bandwidth
usage issues. I don't have the specific device on hand to test with,
so it's hard to say.
At any rate, kAudioDevicePropertyStreamFormatMatch is one of the
properties that has been unofficially deprecated for quite some time
(you can see this most clearly in the Tiger version of CoreAudio/
AudioHardware.h where this is called out specifically). You should
not be using it. The right thing to do is to get the list of
available formats and iterate through it to find the format you are
interested in.
Also, applications should not be changing the hardware format to
begin with. Settings belong to the user and for hardware, global to
the entire system. Applications should not be changing settings willy
nilly. That's why the system ships with AMS. Of course, there are
exceptions (like when an app wants to deal with sending encoded data
to the hardware), but they are relatively few and far between.