Hello,
I'm working with some USB audio chipsets that support hardware play-through (a.k.a. side-tone or direct-monitoring). The problem is that AppleUSBAudio.kext doesn't map these chipsets' playthrough mute or volume selectors to the expected "passthru" CoreAudio IOAudioControl objects, making those controls inaccessible from the HAL.
I'm assuming it's because these chipsets' published audio topologies differ from what AppleUSBAudio wants to see as detailed in
tn2274: Control Publishing Rules. Unfortunately I have no control over this aspect of the chipset.
I do however know which feature unit on the device contains the playthrough mute and volume selectors (in the case of the attached USB Prober output file, that would be unit ID #2), and I can actually force playthrough to activate by performing a specially-crafted IOUSBDevRequest upon calling USBInterfaceOpen from userspace IOKit. This works, but seems to completely remove the device from CoreAudio, making it inaccessible by other applications for at least 5-10 seconds and often permanently.
Is there a way to make the playthrough feature unit more easily accessible by somehow tricking AppleUSBAudio driver into adding mute and volume controls for it — for example, by using a codeless kext as in the SampleUSBAudioOverrideDriver project? (In that case, which properties would be relevant?) Or could a HAL plugin like the SampleDriverPlugin project do this?
Or should I instead try to provide an alternate interface to the feature unit myself, performing that same USB request from kernel space? E.g., calling it from within an AppleUSBAudioPlugin kext (a la the SampleUSBAudioPlugin project)? In that case, is there a way to piggy back on the IOAudioEngineUserClient used by the HAL in order to get my playthrough on/off notifications from userspace apps into the kext?
Thanks very much in advance!
Best,
Zachary Schneirov
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden