Post

Replies

Boosts

Views

Activity

providing kAudioFormatFlagIsFloat support for CoreAudio server plugin
Since we have to en/decode the audio stream to/from our audio device anyway and we are using NEON SIMD to do so, we could just convert it into a stream of float on the fly. Since floats are the natural CoreAudio data format we probably can avoid having to involve an additional int-float/float-int conversion by CoreAudio this way. Does this make sense? Thanks, hagen
0
0
1.5k
Mar ’22
CoreAudio server plugin with generic kAudioControlClassID
Hi, our CoreAudio server plugin provides the standard kAudioVolumeControlClassID, kAudioMuteControlClassID, kAudioSoloControlClassID incl. kAudioDataSourceControlClassID. But it looks like controllers can be created in a general way. Due to signal processing capabilities of our device it could provide way more controllers, but would there be any application that is able to present those generic controllers? Will Audio MIDI Setup.app or AU Lab be able to display those? Any DAW? Thanks, hagen
0
0
1.2k
Sep ’22
CoreAudio server plugin: 24bit big endian audio streams
At least under macOS Sonoma 14.2.1 kAudioFormatFlagIsBigEndian for 24bit audio doesn't seem to be supported by the CoreAudio engine when providing kAudioServerPlugInIOOperationWriteMix streaming buffers for our CoreAudio server plugin. Is that correct and to be expected? Or how should the AudioStreamBasicDescription be filled out on a kAudioStreamPropertyPhysicalFormat request to correctly announce 24bit big endian audio to CoreAudio? Thanks, hagen.
0
0
804
Feb ’24
(Audio) WorkGroup in CoreAudio server plugin
Hi, we have multiple threads in our CoreAudio server plugin carrying out necessary asynchronous work (namely handling USB callbacks and shuffling the required data to the IO). Although these threads have been set up with the appropriate THREAD_TIME_CONSTRAINT_POLICY (which actually improves it) - on M* processors there is an extremely high, non-realtime amount of jitter of >10ms(!) Now either the runloop notification from the USB stack comes that late or the thread driving the runloop hasn't been set up to correctly handling the callbacks in a timely manner. Since AudioUnits threads requiring to comply to the frame deadlines can join the workgroup of the audio device is there a similar opportunity for the CoreAudio server plugin threads? And if so, how should these correctly be set up? Thanks for any hints! Or pointing me to the docs :)
0
0
763
Jun ’24
CoreAudio server plugin: updating kAudioStreamPropertyAvailablePhysicalFormats
Hi, our CoreAudio server plugin supports different clock sources. A switch might result in a change of the selectable sample rates (and other settings). On a clock source switch the plugin reconfigures the set of available kAudioStreamPropertyAvailablePhysicalFormats and announces the change via AudioServerPlugInHostInterface::PropertiesChanged(). However at least the Audio MIDI Setup seems to ignore to update it's UI. The changes are first reflected after selecting another device and re-selecting the device of interest. (Latest macOS, M4 macMini) Is this a bug? Or is our CoreAudio server plugin required to indicate the change in the list of available audio formats differently? Thanks!
0
0
84
May ’25
CoreMIDI driver - flow control
Hi, when a CoreMIDI driver controls physical HW it is probably quite commune to have to control the amount of MIDI data received from the system. What comes to mind is to just delay returning control of the MIDIDriverInterface::Send() callback to the calling process. While the application trying to send MIDI really stalls until the callback returns it seems only to be a side effect of a generally stalled CoreMIDI server. Between the callbacks the application can send as much MIDI data as it wants to CoreMIDI, it's buffering seems to be endless... However the HW might not be able to play out all the data. It seems there is no way to indicate an overflow/full buffer situation back the application/CoreMIDI. How is this supposed to work? Thanks, any hints or pointers are highly appreciated! Hagen.
0
0
147
Oct ’25
USB interface iterator broken @ USB device match notification in 10.14
When opening the USB device in response to the first match notification, the USB interface iterator (since 10.14) does not return a USB interface anymore.However, if the USB device is already connected at the time calling IOServiceAddMatchingNotification(), and therefor it is iterated with its resulting iterator (without match notification) then the interfaces are found and from then on the USB interface iterator works.Once the interface iterator has successfully returned a USB interface, it now also works as a reaction to USB match notification. (Therefore a reboot is necessary to reproduce the problem once the iterator found an USB interface).Interestingly, it doesn't seem to be a simple timing problem, because a delay doesn't help, but a BP does...Any suggestion is highly recommend.Thanks!
1
0
1.4k
Jun ’21
features, features, features, bugs, bugs, bugs!
I understand it's much more fun to implement new features, than to debug. However since generations Xcode is deteriorating. There are uncountable bugs, the most annoying (C++) though are: right click "Jump to Definition" rarely works, click and jump to the causing line of code for build errors nearly never works, The internet is full of workarounds, however those strongly depend on moon phase, formation of chem trails and temporal karma. How to get those things to work once for all? I think those things are used to work in Xcode 3 or something. Every new release presents less working parts and tons of new features serious developer rarely need.
1
0
947
Mar ’22
CoreAudio server plugin RunLoop for MatchingNotification
Hi, to be able to receive IOServiceAddMatchingNotification we need to attach to an appropriate CFRunLoop/IONotificationPort. To avoid race condition the matching notification ideally would be serialized with the CoreAudio notification/callbacks. How can this be achieved? Attaching it to the runloop returned by CFRunLoopGetCurrent() does not yield to any notifications at all, to CFRunLoopGetMain leads to notifications asynchronous to CoreAudio callbacks. There are a set of deprecated AudioHardwareAdd/RemoveRunLoopSource() but apart of its deprecation at least on Big Sur @ Apple Silicon this does not lead to any notification as well. So, how is this supposed to be implemented? Do we really need to introduce locks? Also on the process calls? Wasn't it the purpose of runloops to manage exactly those kinds of situation? And more importantly over everything: Where is the documentation? Thanks for any hints, all the best, hagen.
1
0
1.6k
Mar ’22
CoreAudio server plugin: propagate kAudioObjectPropertyName change
When my virtual CoreAudio server plugins propagates a change to it´s device name the CoreAudio system does not seem to reflect the change. My user mode application subscribes to the property change and receives the change though. I also alternatively submitted a kAudioObjectPropertyName change with the same effect. Is this possible at all and what needs to be done then? Are there restrictions about which properties can be successfully changed and are reflected by the system? Any hint is highly appreciated! Thanks
1
0
64
Mar ’25
Did syslog break for CoreAudio/MIDI server plugins?
The very little and outdated 'documentation' shared by Apple about CoreAudio and CoreMIDI server plugins suggested to use syslog for logging. At least since Bug Sur syslog doesn't end up anywhere. (So, while you seem to think its OK to not document your APIs you could at least remove not working APIs then! Not to do so causes unnecessary and frustrating bug hunting?) Should we replace syslog by unified logging? For debugging purpose only our plugins write to our own log files. Where can I find suitable locations? Where is this documented? Thanks, hagen.
2
0
1.2k
Jan ’22
CoreAudio server plugin gaining write access with SystemConfiguration.framework functions
Hi, our CourAudio server plugin utilizes the SystemConfiguration.framework to store and restore specific shared system wide settings. While our application can authenticate to utilize the SystemConfiguration.framework to gain write access to the shared configuration settings the CoreAudio server plugin obviously can't have any user interaction and therefor does not authenticate. Is it possible to authenticate the CoreAudio server plugin to gain write permissions? Are there any entitlements or other means that would allow this? Thanks!
2
0
107
Apr ’25