AudioUnit

RSS for tag

Create audio unit extensions and add sophisticated audio manipulation and processing capabilities to your app using AudioUnit.

Posts under AudioUnit tag

139 Posts

Post

Replies

Boosts

Views

Activity

Logic Pro: third-party effect AU not processed on an empty audio track — request for the opt-in some vendors have (aumf/Acnt/EINX)
We have a product where Logic Pro's "process effects only when needed" optimisation blocks the core use case, and we would like to ask for the opt-in that some third-party plug-ins already have. Filed as FB25426476. The plug-in ACENTAUR (Audio Unit v2, type aumf, subtype Acnt, manufacturer EINX; EINAUX, Germany) is an AI music generator that lives in the Audio FX slot of an audio track. It renders its own material from the host's tempo, time signature and transport, so the natural workflow is: empty audio track, insert ACENTAUR, press Play, generate. There is no region and no input signal. The plug-in is the source. What happens On an empty audio track Logic never calls the render callback, so the plug-in never receives the host clock through the HostCallbacks: tempo and transport stay unknown and our UI stays locked. Everything else works: the same build renders in the instrument slot, in other hosts, and on a Logic audio track as soon as a region or live input is present. Inserting Logic's Test Oscillator (bypassed) in the same strip also makes it work, which shows the strip is simply not scheduled. Logic engineering described this optimisation on coreaudio-api in February 2024 (https://www.mail-archive.com/coreaudio-api@lists.apple.com/msg01859.html). What we observed A number of third-party effects (Celemony Melodyne, Antares, Synchro Arts, Waves and others) are processed on an empty track. We verified on Logic Pro 12.4 (6707) / macOS 26.6.2 that this is tied to the plug-in's identity plus a private global property Logic queries when the plug-in is loaded: with a listed manufacturer code and that property answered, our plug-in is rendered immediately on an empty track and the host clock arrives. We are of course not going to ship under another vendor's identity; this was a one-off local test to make sure we understand the mechanism before asking. Log excerpt from that test (plug-in log, out-of-process hosting, empty audio track, 48 kHz): 09:19:38 host asked property 101000 → 0 09:19:38 host asked property 101001 → 1 09:19:38 Initialize → 0 · in 2 ch @ 48000 Hz · out 2 ch 09:19:39 First render after 0s · input callback · tempo 120.00 Same build under our own manufacturer code EINX: "No render after 30s · host clock tempo+transport · flags 0". The request Could ACENTAUR (aumf / Acnt / EINX) be added to the set of plug-ins Logic keeps processing without input? The plug-in already answers the property in question; the only missing piece is on Logic's side. If there is a different or public mechanism you would prefer third parties to adopt (a component tag, an AU property, an AUv3 property), we will implement it right away. Happy to provide a build, a demo project and whatever else helps. Christoph Kahse, EINAUX
0
0
36
1d
Automatic project-scoped sharing between AU MIDI FX instances in Logic
We develop Donuts, an AUv2 MIDI processor (aumi), using JUCE 8.0.12 on Apple Silicon. Test environment: Logic Pro 12.4 (6707), macOS 27.0.1 (26A434). Instances within one Logic project need to share an editable chord chart automatically, while retaining independent voicing/output settings. Instances in different open projects must keep separate charts, without manual pairing. Is there a supported Logic/AU API that supplies a project-scoped identity or ownership context to an AU MIDI FX instance? If not, does Logic guarantee that an AUHostingService process cannot contain live instances from different projects, including during project switching, loading and recovery? Can one project's instances be distributed across more than one hosting process? Do these guarantees depend on Logic version or hosting configuration? We completed labelled native captures on 18 October 2026 using a diagnostic observer at the AudioUnitSDK AUMethodSetProperty entry dispatcher, after the original setter returns. This includes properties handled by AUBase before the JUCE SetProperty override. It records status, selected property metadata and top-level restored state key names/types; it does not dereference opaque host client data. Automatic AU sharing remains disabled. Observed in the corrected 0.2.40 probe: Original track and duplicate in project A were both in PID 27015. Each received a different HostCallbackInfo.hostUserData value and a different ContextName. We compare process-local hashes, not dereferenced pointers. Both received all four transport callback functions; AUHostIdentifier matched within the process. No NickName assignment was observed before the captures. There were no recorded capture losses. Keeping A's project window open and opening a separate project B unloaded both A processors at 18:12:27, reaching a live count of zero. B's fresh instance loaded in PID 27146 at 18:12:50. A previous labelled project-switch test also unloaded the original processors and loaded the new project's instance in a different process. These observations do not establish a general isolation guarantee. Restored state in A contained data, jucePluginState, manufacturer, name, subtype, type and version. B was a fresh insertion with no state restore. Payload contents were not recorded. Saved plug-in IDs alone cannot distinguish ownership when tracks, presets or projects are duplicated. ContextName and hostUserData equality do not group the original and duplicate in this test. We have not established a project-ownership contract for either. The application identity also does not distinguish projects. Please advise on the supported mechanism or hosting-process ownership and lifetime guarantees for this use case. Our aim is automatic discovery without ever combining charts from different projects. Local evidence: context-evidence-0.2.40/01-original-and-duplicate and context-evidence-0.2.40/02-separate-project contain raw captures, lifecycle logs, SHA-256 hashes and observations. Nothing has been submitted externally.
0
0
254
2w
Does Logic Pro expose completion of an Audio Unit MIDI output route?
I am looking for the documented observability boundary of Audio Unit version 3 MIDI output in Logic Pro. When an Audio Unit submits events through AUMIDIOutputEventBlock, is there a supported public interface or documented ordering guarantee that can establish that all events accepted for a particular output route and stopped session have been processed, with none still pending for later delivery? I mean that component's route, not unrelated tracks or every queue in the host. I have reviewed the public documentation for AUMIDIOutputEventBlock, scheduleMIDIEventBlock/AURenderEvent, render observers, transportStateBlock, contextPresentationLatency, tailTime, and AUMessageChannel. I have not found a route-completion acknowledgment. A successful submission callback, stopped transport, received event list, or finite silent recording seems to describe a different observation point from completion of all pending delivery. Does Logic support a documented AUMessageChannel protocol or other public mechanism for this purpose? If so, which Logic/macOS versions support it, what is the completion notification's scope and clock domain, and what are its ordering and caller-thread requirements? In particular, does it remain available if transport stops and no final render callback occurs? If receiving every expected event at a downstream Audio Unit can establish completion instead, what documented guarantee rules out later delivery or duplicates from the same stopped session? Instrument processing, effects tails, and actual hardware playback are separate observation boundaries; I am not treating their completion as implied by MIDI receipt. Confirmation that this internal state is not exposed by a supported public interface would also be useful. This is an API-capability question, not a report of an observed Logic defect. I am not seeking private APIs, confidential implementation details, queue flushing, process instrumentation, virtual drivers, or audio-device reconfiguration. No project source, logs, recordings, or account information are included.
0
0
291
2w
How is AUv3 MIDI plug-in supposed to figure out the sample rate of the host?
For an AUv3 plug-in of type kAudioUnitType_MIDIProcessor how is the plug-in supposed to figure out the sample rate of the host? I think this might be an API limitation. For instruments and effects, we can read the AUAudioUnit's output bus format and check the sample rate. But MIDI FX plug-ins have no audio I/O. And even if I set them, Logic Pro, for example, doesn't update the AU if I change the sample rate in Logic. Looking at AVAudioSession.sharedInstance.sampleRate doesn't work either, because the host can have a different sample rate from the hardware. Is there a solution to this that I'm not aware of?
4
0
2k
4w
AUv3 extension icon cannot be resolved on one iPad across all host applications
I am developing an iOS/iPadOS application containing an AUv3 Audio Unit extension. The standalone application icon displays correctly on the affected iPad. However, the AUv3 extension icon is not displayed correctly by any tested host on that device: AUM displays a red-X placeholder icon. Cubasis displays a small generic Swift-style placeholder icon. apeMatrix displays a generic AUv3 placeholder icon. The same TestFlight build displays the correct AUv3 icon on another iPad, and the icon also displays correctly on my iPhone. This therefore appears to be device-specific AUv3 extension icon registration or resolution failure rather than missing icon artwork in the submitted application. Troubleshooting already performed: Deleted and reinstalled the application. Deleted and reinstalled host applications. Restarted the iPad. Installed both local development and TestFlight builds. Confirmed the AUv3 extension contains its compiled asset catalog and icon metadata. Renamed the primary icon set from AppIcon to AppIconV2 and verified that both generated bundles used AppIconV2. Temporarily changed the AudioComponent subtype from Vped to Vpe2 and verified the generated extension plist contained Vpe2. Installed the newly identified component successfully. The AUv3 icon still failed in every tested host. The unchanged TestFlight build displays correctly on another iPad. Expected result: The AUv3 extension icon should display consistently in host applications, as it does on the comparison iPad and iPhone. Actual result: Every host on the affected iPad receives or displays a fallback placeholder instead of the AUv3 extension icon. TLDR - The key questions: Is there is a supported way to rebuild or clear the iPadOS AUv3 extension registration database without erasing the device? Is there any useful information available on Audio Unit extension registration, LaunchServices/icon-services database, or related iPadOS component-icon resolution on an affected device? Thanks.
1
0
832
Jun ’26
Logic Pro 12 crashes when AudioUnit takes too long to load
Note: This issue has also been reported using feedback assistant: FB23098465 We observed that with Logic Pro version 12, the Logic Pro application process crashes systematically if an audio unit takes more than 20~30 seconds to initialize. The audio unit is loaded from AUHostingServiceXPC process, which does not crash, only the Logic Pro process crashes. As a plugin developper we are trying to do our best to reduce the Audio Unit initialization duration in order to avoid this crash, but we do think that Logic should not crash in this scenario. The Feedback Assistant report contains detailed information including: the Logic Pro process crashlog A basic test plugin that triggers the crash to help you reproduce the issue detailed analysis of the issue, system profile, ... Since we did not get any answer on feeedback assistant so far, any feedback will be very much appreciated :) Thank you for your help
0
0
626
Jun ’26
Apple AUGraphicEQ dead-lock
Hi, I encounter a dead-lock with Apple AUGraphicEQ. I have attached backtrace: thread #44, name = 'com.apple.audio.toolbox.AUScheduledParameterRefresher' frame #0: 0x0000000182059bb0 libsystem_kernel.dylib`semaphore_wait_trap + 8 frame #1: 0x000000018e9e7e00 caulk`caulk::semaphore::timed_wait(double) + 224 frame #2: 0x000000018e9e7cac caulk`caulk::concurrent::details::worker_thread::run() + 32 frame #3: 0x000000018e9e794c caulk`void* caulk::thread_proxy<std::__1::tuple<caulk::thread::attributes, void (caulk::concurrent::details::worker_thread::*)(), std::__1::tuple<caulk::concurrent::details::worker_thread*>>>(void*) + 96 frame #4: 0x000000018209dc58 libsystem_pthread.dylib`_pthread_start + 136 regards, Joël
2
0
1.1k
Jun ’26
Logic Pro is not displaying AUv3 currentPreset
I have an AUv3 plug-in that works on both iOS and macOS. Some users have complained that after they create a track in Logic Pro (on either iPad or Mac version) and insert my plug-in as an instrument, the track always shows "Untitled" instead of the name of the active preset. Even if the user changes the factory preset, it still says "Untitled". I started debugging my AUv3 API usage for presets, specifically currentPreset and factoryPresets and tried pretty much everything with no success. For example, I tried overriding and not overriding currentPreset, and I tried issuing KVO for currentPreset. But Logic Pro still shows "Untitled" in all cases. In the following screenshot, I'm selecting a factory preset using Logic's interface. Here we see the factory preset is selected and diplayed using the UI of my plug-in, but Logic's interface is still showing Untitled. I noticed AUv2 plug-ins don't seem to suffer from this issue. For example, FabFilter Pro-Q 3 doesn't expose its factory parameters, but I can create a custom preset inside it or load a factory preset and Logic's interface will display the name of the plug-in. I'm assuming the v2 API kAudioUnitProperty_PresentPreset doesn't suffer fron this issue? Here's Logic Pro showing Pro-Q 3's custom preset name I created using the plug-in interface. Is there a solution to this? Or is this a bug? And then whose bug is it Logic's or Core Audio?
1
0
1.4k
Jun ’26
AUV3 effects in Swift Playground iPad - info.plist
Hi everyon. I‘d like to ask If there’s a way of including info.plist into swift playground on the iPad. I’m currently developing a daw on the iPad, I can see and use Apple’s auv3 plugins but can’t see third party apps like fab filter etc installed on the iPad. I think it’s needs inter app or auv3 entitlement. Is there a work around? I have attached my code for auv3 section. if anyone is interested , here is a video of my progress so far https://youtu.be/_2-L3oowfd0?si=cbr_9vYc3DOXV3R1 AUV3Diagnostic.swift
1
0
1.4k
May ’26
Xcode/codesign login keychain password issue
I’m trying to build and run a brand-new Xcode project created from the Audio Unit Extension App template for local macOS development on a brand-new Mac, and I’m blocked by a signing/keychain issue. Environment: macOS on a brand-new Mac Xcode 26.4.1 Build version 17E202 Personal Team Targeting My Mac Project type: Audio Unit Extension App Main symptom: During build/run, Xcode repeatedly shows this prompt: codesign wants to access key "Apple Development: Sam Magnant (...)" in your keychain It asks for the login keychain password. Important detail My current Mac password successfully unlocks the login keychain manually in Keychain Access every time. So the issue seems specific to Xcode / codesign using the Apple Development private key, not a general inability to unlock the keychain. What I’ve already tried Reset the default keychain Logged out and back in after reset Changed my Mac account password to a new password Confirmed the login keychain unlocks manually with the current Mac password Deleted and recreated local Apple Development certificate/private key where possible Removed and re-added my Apple account in Xcode Checked the private key in Keychain Access Confirmed the private key exists under the Apple Development certificate Confirmed Allow all applications to access this item is already checked on the private key Removed App Groups and other extra capabilities to simplify the project Tried security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k '' ~/Library/Keychains/login.keychain-db Tried switching the project to simpler signing configurations, then switched back to standard Apple Development signing What’s confusing Xcode appears to know about an Apple Development certificate/private key Keychain Access shows the identity under login > My Certificates The login keychain unlocks fine manually But codesign still prompts, and the machine reports 0 valid identities found Questions What would cause Keychain Access to show the Apple Development identity, but security find-identity -v -p codesigning to report 0 valid identities found? Is this most likely a broken certificate/private key pairing, trust chain issue, or something specific to Personal Team signing? Is there a recommended way to fully repair the local Apple Development signing identity on the current macOS user account without creating a new macOS user? Are there known issues with the Audio Unit Extension App template and Personal Team local development on macOS?
0
0
587
May ’26
Using StoreKit from an AUv3 plugin that can be loaded in-process
I have a bunch of Audio Unit v3 plugins that are approaching release, and I was considering using subscription-model pricing, as I have done in a soon to be released iOS app. However, whether this is possible or not is not at all obvious. Specifically: The plugin can, depending on the host app, be loaded in-process or out-of-process - yes, I know, Logic Pro and Garage Band will not load a plug-in in-process anymore, but I am not going to rule that out for other audio apps and force on them the overhead of IPC (I spent two solid weeks deciphering the process to actually make it possible for an AUv3 to run in-process - see this - https://github.com/timboudreau/audio_unit_rust_demo - example with notes) Depending on how it is loaded, the value of Bundle.main.bundleIdentifier will vary. If I use the StoreKit API, will that return product results for my bundle identifier when being called as a library from a foreign application? I would expect it would be a major security hole if random apps could query about purchases of other random apps, so I assume not. Even if I restricted the plugins to running out-of-process, I have to set up the in-app purchases on the app store for the App container's ID, not the extension's ID, and the extension is what run - the outer app that is what you purchase is just a toy demo that exists solely to register the audio unit. I have similar questions with regard to MetricKit, which I would similarly like to use, but which may be running inside some random app. If there were some sort of signed token, or similar mechanism, that could be bundled or acquired by the running plugin extension that could be used to ensure both StoreKit and MetricKit operate under the assumption that purchases and metrics should be accessed as if called from the container app, that would be very helpful. This is the difference between having a one-and-done sales model and something that provides ongoing revenue to maintain these products - I am a one-person shop - if I price these products where they would need to be to pay the bills assuming a single sale per customer ever, the price will be too high for anyone to want to try products from a small vendor they've never heard of. So, being able to do a free trial period and then subscription is the difference between this being a viable business or not.
10
0
2.2k
Mar ’26
Final Cut Pro not loading my plugin
I have exhausted standard debugging approaches and need guidance on Final Cut Pro's AU plugin loading behavior. PLUGIN OVERVIEW My plugin is an AUv2 audio plugin built with JUCE 8. The plugin loads and functions correctly in: Pro Tools (AAX) Media Composer (AAX) Reaper (AU + VST3) Logic Pro (AU) GarageBand (AU) Audacity (AU) DaVinci Resolve / Fairlight (AU) Harrison Mixbus (AU) Ableton Live (AU) Cubase (VST3) Nuendo (VST3) It does NOT load in Final Cut Pro (tested on 10.8.x, macOS 14.6 and 15.2). DIAGNOSTICS COMPLETED auval passes cleanly: auval -v aufx Hwhy Manu → AU VALIDATION SUCCEEDED Plugin is notarized and stapled: xcrun stapler validate → The validate action worked spctl --assess --type exec → Note: returns 'not an app' which we understand is expected for .component bundles. Hardened Runtime is enabled on the bundle. We identified that our Info.plist contained a 'resourceUsage' dictionary in the AudioComponents entry. We found via system logs that this was setting au_componentFlags = 2 (kAudioComponentFlag_SandboxSafe), causing FCP to attempt loading the plugin in-process inside its sandbox, where our UDP networking is denied. We removed the resourceUsage dict, confirmed au_componentFlags = 0 in the CAReportingClient log, and FCP now loads the plugin out-of-process via AUHostingServiceXPC_arrow. Despite au_componentFlags = 0 and out-of-process loading confirmed, the plugin still does not appear in FCP's effects browser. We also identified and fixed a channel layout issue — our isBusesLayoutSupported was not returning true for 5-channel layouts (which FCP uses internally). This is now fixed. AU cache has been fully cleared: ~/Library/Caches/com.apple.audio.AudioComponentRegistrar /Library/Caches/com.apple.audio.AudioComponentRegistrar coreaudiod and AudioComponentRegistrar killed to force rescan auval -a run to force re-registration
0
0
1.4k
Mar ’26
How to mark Audio Unit as dirty (needing to be saved)
I'm working on a v2 Audio Unit that has some complicated internal state (audio, midi, other settings). When the internal state changes, I want to inform the host (f.i. Logic Pro) that my plugin state has changed, and that the main window should show the 'project changed' status through the window close button. This was easy to achieve for the VST version of the plugin, but I can't figure out a way to do it for the Audio Unit. I've tried: Notifying change of the kAudioUnitProperty_ClassInfo property that stores the plugin state: unit->PropertyChanged(kAudioUnitProperty_ClassInfo, kAudioUnitScope_Global, 0); Setting the kAudioUnitProperty_ClassInfo property value each time the plugin state changes. Adding a new parameter called 'dirtystate' and toggling it and notifying the change each time the plugin state changes. But nothing really make Logic take notice. This should be an easy task, but I can't put my finger on it. How do I flag may AUv2 as needing its status saved (i.e. the host project needs saving)?
0
0
440
Jan ’26
Mac Catalyst: AUv3 Extension no longer works on MacOS, still works on iOS
I have a Catalyst app ('container') which hosts an embedded AUv3 Audio Unit extension ('plugin'). This used to work for years and has worked with this project until a few days ago. it still works on iOS as expected on MacOS the extension is never registered/installed and won't load extension won't show up with AUVal seems to have stopped working with the 26.1 XCode update I'm fairly certain the problem is not code related (i.e. likely build settings, project settings, entitlements, signing, etc.) I have compared all settings with another still-working project and can't find any meaningful difference (I can't request code-level support because even the minimal thing vastly exceeds the 250 lines of code limit.) How can I debug the issue? I literally don't know where to start to fix this problem, short of rebuilding the entire thing and hope that it magically starts working again.
0
1
843
Nov ’25
Correct way for an Audio Unit v3 to return fewer than requested number of samples given a buffer
I have an AUv3 plugin which uses an FFT - which requires n samples before it can produce any output - so, depending on the relation between the host's buffer size and the FFT window size, it may receive a several buffers of samples, producing no output, and then dumping out what it has once a sufficient number of samples have been received. This means that output is produced in fits and starts, in batches that match the FFT size (modulo oversampling) - e.g. if being fed buffers of 256 samples with an fft size of 1024, the output buffer sizes will be 0 for the first 3 buffers, and upon the fourth, the first 256 processed samples are returned and the remaining 768 cached; the next three buffers will return the remaining cached samples while processing and buffering subsequent ones, and so forth. The internal mechanics of that I have solved, caching output if the current output buffer is too small, and so forth - so it all works as advertised, and the plugin reports its latency correctly. And when run as an app in demo-mode, playback works as expected. In the plugin's render block, it captures the number of frames written, and if it is less than the number of frames passed in, adjusts the mDataByteSize of the output buffers to match the actual quantity of data being returned: unsigned int framesWritten = (unsigned int) processHelper->processWithEvents(inAudioBufferList, outAudioBufferList, timestamp, frameCount, realtimeEventListHead); if (framesWritten < frameCount) { for (UInt32 i = 0; i < outAudioBufferList->mNumberBuffers; ++i) { outAudioBufferList->mBuffers[i].mDataByteSize = framesWritten * 4; // assume 4 byte floats } } However, there are a couple of serious issues: auval -v fails it with - Render Test at 64 frames, sample rate: 22050 Hz ERROR: Output Buffer Size does not match requested When connected to Logic Pro, it appears that mDataByteSize is ignored, and the entire allocated buffer is read - audio has sections of silence snipped into it which corresponds the number of empty buffers being returned If I set Logic's buffer size to 1024 and use a 1024 sample FFT window, the plugin works correctly - but of course a plugin cannot dictate buffer size, and `1024 is too small a window size to be useful for anything but filtering very high frequencies This seems like it has to be a solvable problem, and most likely the issue is in how my code reports the number of usable samples in the returned buffer. So, what is the correct way for a plugin to report that it has no samples to return, but will, uh, real soon now? I know I could convert this plugin to be one that does offline rendering of the entire input, but this is real-time processing, just with a fixed amount of latency, so that should not be necessary.
0
0
913
Nov ’25
Hosting x86 Audio Units on Silicon Mac
My app encountered problems when trying to open an x86 audioUnit v2 on a Silicon Mac (although Rosetta is installed). There seems to be a XPC connection issue with the AUHostingService that I don't know how to fix. I observed other host apps opening the same plugins without problem, so there is probably something wrong or incompatible in my codes. I noticed that: The issue occurs whether or not the app is sandboxed. The issue does no longer occur when the app itself runs under Rosetta. There is no error reported by CoreAudio during allocation and initialization of the audio unit. The first notified errors appears when the unit calls AudioUnitRender from the rendering callback. With most x86 plugins, the error is on first call: kAudioUnitErr_RenderTimeout and on any subsequent call: kAudioComponentErr_InstanceInvalidated On the UI side, when the Cocoa View is loaded, it appears shortly, then disappears immediately leaving its superview empty. With another x86 plugin, the Cocoa View is loaded normally, but CoreAudio still emits kAudioUnitErr_NoConnection from AudioUnitRender, whether the view has been loaded or not, and the plugin produces no sound. I also find these messages in the console (printed in that order): CLIENT ERROR: RemoteAUv2ViewController does not override - and thus cannot react to catastrophic errors beyond logging them AUAudioUnit_XPC.mm:641 Crashed AU possible component description: aumu/Helm/Tyte My app uses the AUv2 API and I suspect that working with the AUv3 API would spare me these problems. However, considering how my audio system is built (audio units are wrapped into C++ classes and most connections between units are managed on the fly from the rendering callback), it would be a lot of work to convert, and I’m even not sure that all I do with the AUv2 API would be possible with the AUv3 API. I could possibly find an intermediate solution, but in the immediate future I'm looking for the simplest and fastest possible fix. If I cannot find better, I see two fallback options: In this part of the doc: “Beginning with macOS 11, the system loads audio units into a separate process that depends on the architecture or host preference”, does “host preference” means that it would be possible to disable the “out of process” behavior, for example from the app entitlements or info.plist? Otherwise, as a last resort, I could completely disable the use of x86 audioUnits when my app runs under ARM64, for at least making things cleaner. But the Audio Component API doesn’t give any info about the plugin architecture, how could I found it? Any tip or idea about this issue will be much appreciated. Thanks in advance!
2
0
2.3k
Nov ’25
Audio Unit v3 host v2 third party plugins
Hi, I have just implemented an Audio Unit v3 host. AgsAudioUnitPlugin *audio_unit_plugin; AVAudioUnitComponentManager *audio_unit_component_manager; NSArray<AVAudioUnitComponent *> *av_component_arr; AudioComponentDescription description; guint i, i_stop; if(!AGS_AUDIO_UNIT_MANAGER(audio_unit_manager)){ return; } audio_unit_component_manager = [AVAudioUnitComponentManager sharedAudioUnitComponentManager]; /* effects */ description = (AudioComponentDescription) {0,}; description.componentType = kAudioUnitType_Effect; av_component_arr = [audio_unit_component_manager componentsMatchingDescription:description]; i_stop = [av_component_arr count]; for(i = 0; i < i_stop; i++){ ags_audio_unit_manager_load_component(audio_unit_manager, (gpointer) av_component_arr[i]); } /* instruments */ description = (AudioComponentDescription) {0,}; description.componentType = kAudioUnitType_MusicDevice; av_component_arr = [audio_unit_component_manager componentsMatchingDescription:description]; i_stop = [av_component_arr count]; for(i = 0; i < i_stop; i++){ ags_audio_unit_manager_load_component(audio_unit_manager, (gpointer) av_component_arr[i]); } But this doesn't show me Audio Unit v2 plugins, why? regards, Joël
3
0
1.7k
Aug ’25
Logic Pro: third-party effect AU not processed on an empty audio track — request for the opt-in some vendors have (aumf/Acnt/EINX)
We have a product where Logic Pro's "process effects only when needed" optimisation blocks the core use case, and we would like to ask for the opt-in that some third-party plug-ins already have. Filed as FB25426476. The plug-in ACENTAUR (Audio Unit v2, type aumf, subtype Acnt, manufacturer EINX; EINAUX, Germany) is an AI music generator that lives in the Audio FX slot of an audio track. It renders its own material from the host's tempo, time signature and transport, so the natural workflow is: empty audio track, insert ACENTAUR, press Play, generate. There is no region and no input signal. The plug-in is the source. What happens On an empty audio track Logic never calls the render callback, so the plug-in never receives the host clock through the HostCallbacks: tempo and transport stay unknown and our UI stays locked. Everything else works: the same build renders in the instrument slot, in other hosts, and on a Logic audio track as soon as a region or live input is present. Inserting Logic's Test Oscillator (bypassed) in the same strip also makes it work, which shows the strip is simply not scheduled. Logic engineering described this optimisation on coreaudio-api in February 2024 (https://www.mail-archive.com/coreaudio-api@lists.apple.com/msg01859.html). What we observed A number of third-party effects (Celemony Melodyne, Antares, Synchro Arts, Waves and others) are processed on an empty track. We verified on Logic Pro 12.4 (6707) / macOS 26.6.2 that this is tied to the plug-in's identity plus a private global property Logic queries when the plug-in is loaded: with a listed manufacturer code and that property answered, our plug-in is rendered immediately on an empty track and the host clock arrives. We are of course not going to ship under another vendor's identity; this was a one-off local test to make sure we understand the mechanism before asking. Log excerpt from that test (plug-in log, out-of-process hosting, empty audio track, 48 kHz): 09:19:38 host asked property 101000 → 0 09:19:38 host asked property 101001 → 1 09:19:38 Initialize → 0 · in 2 ch @ 48000 Hz · out 2 ch 09:19:39 First render after 0s · input callback · tempo 120.00 Same build under our own manufacturer code EINX: "No render after 30s · host clock tempo+transport · flags 0". The request Could ACENTAUR (aumf / Acnt / EINX) be added to the set of plug-ins Logic keeps processing without input? The plug-in already answers the property in question; the only missing piece is on Logic's side. If there is a different or public mechanism you would prefer third parties to adopt (a component tag, an AU property, an AUv3 property), we will implement it right away. Happy to provide a build, a demo project and whatever else helps. Christoph Kahse, EINAUX
Replies
0
Boosts
0
Views
36
Activity
1d
Automatic project-scoped sharing between AU MIDI FX instances in Logic
We develop Donuts, an AUv2 MIDI processor (aumi), using JUCE 8.0.12 on Apple Silicon. Test environment: Logic Pro 12.4 (6707), macOS 27.0.1 (26A434). Instances within one Logic project need to share an editable chord chart automatically, while retaining independent voicing/output settings. Instances in different open projects must keep separate charts, without manual pairing. Is there a supported Logic/AU API that supplies a project-scoped identity or ownership context to an AU MIDI FX instance? If not, does Logic guarantee that an AUHostingService process cannot contain live instances from different projects, including during project switching, loading and recovery? Can one project's instances be distributed across more than one hosting process? Do these guarantees depend on Logic version or hosting configuration? We completed labelled native captures on 18 October 2026 using a diagnostic observer at the AudioUnitSDK AUMethodSetProperty entry dispatcher, after the original setter returns. This includes properties handled by AUBase before the JUCE SetProperty override. It records status, selected property metadata and top-level restored state key names/types; it does not dereference opaque host client data. Automatic AU sharing remains disabled. Observed in the corrected 0.2.40 probe: Original track and duplicate in project A were both in PID 27015. Each received a different HostCallbackInfo.hostUserData value and a different ContextName. We compare process-local hashes, not dereferenced pointers. Both received all four transport callback functions; AUHostIdentifier matched within the process. No NickName assignment was observed before the captures. There were no recorded capture losses. Keeping A's project window open and opening a separate project B unloaded both A processors at 18:12:27, reaching a live count of zero. B's fresh instance loaded in PID 27146 at 18:12:50. A previous labelled project-switch test also unloaded the original processors and loaded the new project's instance in a different process. These observations do not establish a general isolation guarantee. Restored state in A contained data, jucePluginState, manufacturer, name, subtype, type and version. B was a fresh insertion with no state restore. Payload contents were not recorded. Saved plug-in IDs alone cannot distinguish ownership when tracks, presets or projects are duplicated. ContextName and hostUserData equality do not group the original and duplicate in this test. We have not established a project-ownership contract for either. The application identity also does not distinguish projects. Please advise on the supported mechanism or hosting-process ownership and lifetime guarantees for this use case. Our aim is automatic discovery without ever combining charts from different projects. Local evidence: context-evidence-0.2.40/01-original-and-duplicate and context-evidence-0.2.40/02-separate-project contain raw captures, lifecycle logs, SHA-256 hashes and observations. Nothing has been submitted externally.
Replies
0
Boosts
0
Views
254
Activity
2w
Does Logic Pro expose completion of an Audio Unit MIDI output route?
I am looking for the documented observability boundary of Audio Unit version 3 MIDI output in Logic Pro. When an Audio Unit submits events through AUMIDIOutputEventBlock, is there a supported public interface or documented ordering guarantee that can establish that all events accepted for a particular output route and stopped session have been processed, with none still pending for later delivery? I mean that component's route, not unrelated tracks or every queue in the host. I have reviewed the public documentation for AUMIDIOutputEventBlock, scheduleMIDIEventBlock/AURenderEvent, render observers, transportStateBlock, contextPresentationLatency, tailTime, and AUMessageChannel. I have not found a route-completion acknowledgment. A successful submission callback, stopped transport, received event list, or finite silent recording seems to describe a different observation point from completion of all pending delivery. Does Logic support a documented AUMessageChannel protocol or other public mechanism for this purpose? If so, which Logic/macOS versions support it, what is the completion notification's scope and clock domain, and what are its ordering and caller-thread requirements? In particular, does it remain available if transport stops and no final render callback occurs? If receiving every expected event at a downstream Audio Unit can establish completion instead, what documented guarantee rules out later delivery or duplicates from the same stopped session? Instrument processing, effects tails, and actual hardware playback are separate observation boundaries; I am not treating their completion as implied by MIDI receipt. Confirmation that this internal state is not exposed by a supported public interface would also be useful. This is an API-capability question, not a report of an observed Logic defect. I am not seeking private APIs, confidential implementation details, queue flushing, process instrumentation, virtual drivers, or audio-device reconfiguration. No project source, logs, recordings, or account information are included.
Replies
0
Boosts
0
Views
291
Activity
2w
How is AUv3 MIDI plug-in supposed to figure out the sample rate of the host?
For an AUv3 plug-in of type kAudioUnitType_MIDIProcessor how is the plug-in supposed to figure out the sample rate of the host? I think this might be an API limitation. For instruments and effects, we can read the AUAudioUnit's output bus format and check the sample rate. But MIDI FX plug-ins have no audio I/O. And even if I set them, Logic Pro, for example, doesn't update the AU if I change the sample rate in Logic. Looking at AVAudioSession.sharedInstance.sampleRate doesn't work either, because the host can have a different sample rate from the hardware. Is there a solution to this that I'm not aware of?
Replies
4
Boosts
0
Views
2k
Activity
4w
AUv3 extension icon cannot be resolved on one iPad across all host applications
I am developing an iOS/iPadOS application containing an AUv3 Audio Unit extension. The standalone application icon displays correctly on the affected iPad. However, the AUv3 extension icon is not displayed correctly by any tested host on that device: AUM displays a red-X placeholder icon. Cubasis displays a small generic Swift-style placeholder icon. apeMatrix displays a generic AUv3 placeholder icon. The same TestFlight build displays the correct AUv3 icon on another iPad, and the icon also displays correctly on my iPhone. This therefore appears to be device-specific AUv3 extension icon registration or resolution failure rather than missing icon artwork in the submitted application. Troubleshooting already performed: Deleted and reinstalled the application. Deleted and reinstalled host applications. Restarted the iPad. Installed both local development and TestFlight builds. Confirmed the AUv3 extension contains its compiled asset catalog and icon metadata. Renamed the primary icon set from AppIcon to AppIconV2 and verified that both generated bundles used AppIconV2. Temporarily changed the AudioComponent subtype from Vped to Vpe2 and verified the generated extension plist contained Vpe2. Installed the newly identified component successfully. The AUv3 icon still failed in every tested host. The unchanged TestFlight build displays correctly on another iPad. Expected result: The AUv3 extension icon should display consistently in host applications, as it does on the comparison iPad and iPhone. Actual result: Every host on the affected iPad receives or displays a fallback placeholder instead of the AUv3 extension icon. TLDR - The key questions: Is there is a supported way to rebuild or clear the iPadOS AUv3 extension registration database without erasing the device? Is there any useful information available on Audio Unit extension registration, LaunchServices/icon-services database, or related iPadOS component-icon resolution on an affected device? Thanks.
Replies
1
Boosts
0
Views
832
Activity
Jun ’26
Logic Pro 12 crashes when AudioUnit takes too long to load
Note: This issue has also been reported using feedback assistant: FB23098465 We observed that with Logic Pro version 12, the Logic Pro application process crashes systematically if an audio unit takes more than 20~30 seconds to initialize. The audio unit is loaded from AUHostingServiceXPC process, which does not crash, only the Logic Pro process crashes. As a plugin developper we are trying to do our best to reduce the Audio Unit initialization duration in order to avoid this crash, but we do think that Logic should not crash in this scenario. The Feedback Assistant report contains detailed information including: the Logic Pro process crashlog A basic test plugin that triggers the crash to help you reproduce the issue detailed analysis of the issue, system profile, ... Since we did not get any answer on feeedback assistant so far, any feedback will be very much appreciated :) Thank you for your help
Replies
0
Boosts
0
Views
626
Activity
Jun ’26
Apple AUGraphicEQ dead-lock
Hi, I encounter a dead-lock with Apple AUGraphicEQ. I have attached backtrace: thread #44, name = 'com.apple.audio.toolbox.AUScheduledParameterRefresher' frame #0: 0x0000000182059bb0 libsystem_kernel.dylib`semaphore_wait_trap + 8 frame #1: 0x000000018e9e7e00 caulk`caulk::semaphore::timed_wait(double) + 224 frame #2: 0x000000018e9e7cac caulk`caulk::concurrent::details::worker_thread::run() + 32 frame #3: 0x000000018e9e794c caulk`void* caulk::thread_proxy<std::__1::tuple<caulk::thread::attributes, void (caulk::concurrent::details::worker_thread::*)(), std::__1::tuple<caulk::concurrent::details::worker_thread*>>>(void*) + 96 frame #4: 0x000000018209dc58 libsystem_pthread.dylib`_pthread_start + 136 regards, Joël
Replies
2
Boosts
0
Views
1.1k
Activity
Jun ’26
Logic Pro is not displaying AUv3 currentPreset
I have an AUv3 plug-in that works on both iOS and macOS. Some users have complained that after they create a track in Logic Pro (on either iPad or Mac version) and insert my plug-in as an instrument, the track always shows "Untitled" instead of the name of the active preset. Even if the user changes the factory preset, it still says "Untitled". I started debugging my AUv3 API usage for presets, specifically currentPreset and factoryPresets and tried pretty much everything with no success. For example, I tried overriding and not overriding currentPreset, and I tried issuing KVO for currentPreset. But Logic Pro still shows "Untitled" in all cases. In the following screenshot, I'm selecting a factory preset using Logic's interface. Here we see the factory preset is selected and diplayed using the UI of my plug-in, but Logic's interface is still showing Untitled. I noticed AUv2 plug-ins don't seem to suffer from this issue. For example, FabFilter Pro-Q 3 doesn't expose its factory parameters, but I can create a custom preset inside it or load a factory preset and Logic's interface will display the name of the plug-in. I'm assuming the v2 API kAudioUnitProperty_PresentPreset doesn't suffer fron this issue? Here's Logic Pro showing Pro-Q 3's custom preset name I created using the plug-in interface. Is there a solution to this? Or is this a bug? And then whose bug is it Logic's or Core Audio?
Replies
1
Boosts
0
Views
1.4k
Activity
Jun ’26
AUV3 effects in Swift Playground iPad - info.plist
Hi everyon. I‘d like to ask If there’s a way of including info.plist into swift playground on the iPad. I’m currently developing a daw on the iPad, I can see and use Apple’s auv3 plugins but can’t see third party apps like fab filter etc installed on the iPad. I think it’s needs inter app or auv3 entitlement. Is there a work around? I have attached my code for auv3 section. if anyone is interested , here is a video of my progress so far https://youtu.be/_2-L3oowfd0?si=cbr_9vYc3DOXV3R1 AUV3Diagnostic.swift
Replies
1
Boosts
0
Views
1.4k
Activity
May ’26
Xcode/codesign login keychain password issue
I’m trying to build and run a brand-new Xcode project created from the Audio Unit Extension App template for local macOS development on a brand-new Mac, and I’m blocked by a signing/keychain issue. Environment: macOS on a brand-new Mac Xcode 26.4.1 Build version 17E202 Personal Team Targeting My Mac Project type: Audio Unit Extension App Main symptom: During build/run, Xcode repeatedly shows this prompt: codesign wants to access key "Apple Development: Sam Magnant (...)" in your keychain It asks for the login keychain password. Important detail My current Mac password successfully unlocks the login keychain manually in Keychain Access every time. So the issue seems specific to Xcode / codesign using the Apple Development private key, not a general inability to unlock the keychain. What I’ve already tried Reset the default keychain Logged out and back in after reset Changed my Mac account password to a new password Confirmed the login keychain unlocks manually with the current Mac password Deleted and recreated local Apple Development certificate/private key where possible Removed and re-added my Apple account in Xcode Checked the private key in Keychain Access Confirmed the private key exists under the Apple Development certificate Confirmed Allow all applications to access this item is already checked on the private key Removed App Groups and other extra capabilities to simplify the project Tried security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k '' ~/Library/Keychains/login.keychain-db Tried switching the project to simpler signing configurations, then switched back to standard Apple Development signing What’s confusing Xcode appears to know about an Apple Development certificate/private key Keychain Access shows the identity under login > My Certificates The login keychain unlocks fine manually But codesign still prompts, and the machine reports 0 valid identities found Questions What would cause Keychain Access to show the Apple Development identity, but security find-identity -v -p codesigning to report 0 valid identities found? Is this most likely a broken certificate/private key pairing, trust chain issue, or something specific to Personal Team signing? Is there a recommended way to fully repair the local Apple Development signing identity on the current macOS user account without creating a new macOS user? Are there known issues with the Audio Unit Extension App template and Personal Team local development on macOS?
Replies
0
Boosts
0
Views
587
Activity
May ’26
Using StoreKit from an AUv3 plugin that can be loaded in-process
I have a bunch of Audio Unit v3 plugins that are approaching release, and I was considering using subscription-model pricing, as I have done in a soon to be released iOS app. However, whether this is possible or not is not at all obvious. Specifically: The plugin can, depending on the host app, be loaded in-process or out-of-process - yes, I know, Logic Pro and Garage Band will not load a plug-in in-process anymore, but I am not going to rule that out for other audio apps and force on them the overhead of IPC (I spent two solid weeks deciphering the process to actually make it possible for an AUv3 to run in-process - see this - https://github.com/timboudreau/audio_unit_rust_demo - example with notes) Depending on how it is loaded, the value of Bundle.main.bundleIdentifier will vary. If I use the StoreKit API, will that return product results for my bundle identifier when being called as a library from a foreign application? I would expect it would be a major security hole if random apps could query about purchases of other random apps, so I assume not. Even if I restricted the plugins to running out-of-process, I have to set up the in-app purchases on the app store for the App container's ID, not the extension's ID, and the extension is what run - the outer app that is what you purchase is just a toy demo that exists solely to register the audio unit. I have similar questions with regard to MetricKit, which I would similarly like to use, but which may be running inside some random app. If there were some sort of signed token, or similar mechanism, that could be bundled or acquired by the running plugin extension that could be used to ensure both StoreKit and MetricKit operate under the assumption that purchases and metrics should be accessed as if called from the container app, that would be very helpful. This is the difference between having a one-and-done sales model and something that provides ongoing revenue to maintain these products - I am a one-person shop - if I price these products where they would need to be to pay the bills assuming a single sale per customer ever, the price will be too high for anyone to want to try products from a small vendor they've never heard of. So, being able to do a free trial period and then subscription is the difference between this being a viable business or not.
Replies
10
Boosts
0
Views
2.2k
Activity
Mar ’26
Final Cut Pro not loading my plugin
I have exhausted standard debugging approaches and need guidance on Final Cut Pro's AU plugin loading behavior. PLUGIN OVERVIEW My plugin is an AUv2 audio plugin built with JUCE 8. The plugin loads and functions correctly in: Pro Tools (AAX) Media Composer (AAX) Reaper (AU + VST3) Logic Pro (AU) GarageBand (AU) Audacity (AU) DaVinci Resolve / Fairlight (AU) Harrison Mixbus (AU) Ableton Live (AU) Cubase (VST3) Nuendo (VST3) It does NOT load in Final Cut Pro (tested on 10.8.x, macOS 14.6 and 15.2). DIAGNOSTICS COMPLETED auval passes cleanly: auval -v aufx Hwhy Manu → AU VALIDATION SUCCEEDED Plugin is notarized and stapled: xcrun stapler validate → The validate action worked spctl --assess --type exec → Note: returns 'not an app' which we understand is expected for .component bundles. Hardened Runtime is enabled on the bundle. We identified that our Info.plist contained a 'resourceUsage' dictionary in the AudioComponents entry. We found via system logs that this was setting au_componentFlags = 2 (kAudioComponentFlag_SandboxSafe), causing FCP to attempt loading the plugin in-process inside its sandbox, where our UDP networking is denied. We removed the resourceUsage dict, confirmed au_componentFlags = 0 in the CAReportingClient log, and FCP now loads the plugin out-of-process via AUHostingServiceXPC_arrow. Despite au_componentFlags = 0 and out-of-process loading confirmed, the plugin still does not appear in FCP's effects browser. We also identified and fixed a channel layout issue — our isBusesLayoutSupported was not returning true for 5-channel layouts (which FCP uses internally). This is now fixed. AU cache has been fully cleared: ~/Library/Caches/com.apple.audio.AudioComponentRegistrar /Library/Caches/com.apple.audio.AudioComponentRegistrar coreaudiod and AudioComponentRegistrar killed to force rescan auval -a run to force re-registration
Replies
0
Boosts
0
Views
1.4k
Activity
Mar ’26
How to mark Audio Unit as dirty (needing to be saved)
I'm working on a v2 Audio Unit that has some complicated internal state (audio, midi, other settings). When the internal state changes, I want to inform the host (f.i. Logic Pro) that my plugin state has changed, and that the main window should show the 'project changed' status through the window close button. This was easy to achieve for the VST version of the plugin, but I can't figure out a way to do it for the Audio Unit. I've tried: Notifying change of the kAudioUnitProperty_ClassInfo property that stores the plugin state: unit->PropertyChanged(kAudioUnitProperty_ClassInfo, kAudioUnitScope_Global, 0); Setting the kAudioUnitProperty_ClassInfo property value each time the plugin state changes. Adding a new parameter called 'dirtystate' and toggling it and notifying the change each time the plugin state changes. But nothing really make Logic take notice. This should be an easy task, but I can't put my finger on it. How do I flag may AUv2 as needing its status saved (i.e. the host project needs saving)?
Replies
0
Boosts
0
Views
440
Activity
Jan ’26
Mac Catalyst: AUv3 Extension no longer works on MacOS, still works on iOS
I have a Catalyst app ('container') which hosts an embedded AUv3 Audio Unit extension ('plugin'). This used to work for years and has worked with this project until a few days ago. it still works on iOS as expected on MacOS the extension is never registered/installed and won't load extension won't show up with AUVal seems to have stopped working with the 26.1 XCode update I'm fairly certain the problem is not code related (i.e. likely build settings, project settings, entitlements, signing, etc.) I have compared all settings with another still-working project and can't find any meaningful difference (I can't request code-level support because even the minimal thing vastly exceeds the 250 lines of code limit.) How can I debug the issue? I literally don't know where to start to fix this problem, short of rebuilding the entire thing and hope that it magically starts working again.
Replies
0
Boosts
1
Views
843
Activity
Nov ’25
Correct way for an Audio Unit v3 to return fewer than requested number of samples given a buffer
I have an AUv3 plugin which uses an FFT - which requires n samples before it can produce any output - so, depending on the relation between the host's buffer size and the FFT window size, it may receive a several buffers of samples, producing no output, and then dumping out what it has once a sufficient number of samples have been received. This means that output is produced in fits and starts, in batches that match the FFT size (modulo oversampling) - e.g. if being fed buffers of 256 samples with an fft size of 1024, the output buffer sizes will be 0 for the first 3 buffers, and upon the fourth, the first 256 processed samples are returned and the remaining 768 cached; the next three buffers will return the remaining cached samples while processing and buffering subsequent ones, and so forth. The internal mechanics of that I have solved, caching output if the current output buffer is too small, and so forth - so it all works as advertised, and the plugin reports its latency correctly. And when run as an app in demo-mode, playback works as expected. In the plugin's render block, it captures the number of frames written, and if it is less than the number of frames passed in, adjusts the mDataByteSize of the output buffers to match the actual quantity of data being returned: unsigned int framesWritten = (unsigned int) processHelper->processWithEvents(inAudioBufferList, outAudioBufferList, timestamp, frameCount, realtimeEventListHead); if (framesWritten < frameCount) { for (UInt32 i = 0; i < outAudioBufferList->mNumberBuffers; ++i) { outAudioBufferList->mBuffers[i].mDataByteSize = framesWritten * 4; // assume 4 byte floats } } However, there are a couple of serious issues: auval -v fails it with - Render Test at 64 frames, sample rate: 22050 Hz ERROR: Output Buffer Size does not match requested When connected to Logic Pro, it appears that mDataByteSize is ignored, and the entire allocated buffer is read - audio has sections of silence snipped into it which corresponds the number of empty buffers being returned If I set Logic's buffer size to 1024 and use a 1024 sample FFT window, the plugin works correctly - but of course a plugin cannot dictate buffer size, and `1024 is too small a window size to be useful for anything but filtering very high frequencies This seems like it has to be a solvable problem, and most likely the issue is in how my code reports the number of usable samples in the returned buffer. So, what is the correct way for a plugin to report that it has no samples to return, but will, uh, real soon now? I know I could convert this plugin to be one that does offline rendering of the entire input, but this is real-time processing, just with a fixed amount of latency, so that should not be necessary.
Replies
0
Boosts
0
Views
913
Activity
Nov ’25
Hosting x86 Audio Units on Silicon Mac
My app encountered problems when trying to open an x86 audioUnit v2 on a Silicon Mac (although Rosetta is installed). There seems to be a XPC connection issue with the AUHostingService that I don't know how to fix. I observed other host apps opening the same plugins without problem, so there is probably something wrong or incompatible in my codes. I noticed that: The issue occurs whether or not the app is sandboxed. The issue does no longer occur when the app itself runs under Rosetta. There is no error reported by CoreAudio during allocation and initialization of the audio unit. The first notified errors appears when the unit calls AudioUnitRender from the rendering callback. With most x86 plugins, the error is on first call: kAudioUnitErr_RenderTimeout and on any subsequent call: kAudioComponentErr_InstanceInvalidated On the UI side, when the Cocoa View is loaded, it appears shortly, then disappears immediately leaving its superview empty. With another x86 plugin, the Cocoa View is loaded normally, but CoreAudio still emits kAudioUnitErr_NoConnection from AudioUnitRender, whether the view has been loaded or not, and the plugin produces no sound. I also find these messages in the console (printed in that order): CLIENT ERROR: RemoteAUv2ViewController does not override - and thus cannot react to catastrophic errors beyond logging them AUAudioUnit_XPC.mm:641 Crashed AU possible component description: aumu/Helm/Tyte My app uses the AUv2 API and I suspect that working with the AUv3 API would spare me these problems. However, considering how my audio system is built (audio units are wrapped into C++ classes and most connections between units are managed on the fly from the rendering callback), it would be a lot of work to convert, and I’m even not sure that all I do with the AUv2 API would be possible with the AUv3 API. I could possibly find an intermediate solution, but in the immediate future I'm looking for the simplest and fastest possible fix. If I cannot find better, I see two fallback options: In this part of the doc: “Beginning with macOS 11, the system loads audio units into a separate process that depends on the architecture or host preference”, does “host preference” means that it would be possible to disable the “out of process” behavior, for example from the app entitlements or info.plist? Otherwise, as a last resort, I could completely disable the use of x86 audioUnits when my app runs under ARM64, for at least making things cleaner. But the Audio Component API doesn’t give any info about the plugin architecture, how could I found it? Any tip or idea about this issue will be much appreciated. Thanks in advance!
Replies
2
Boosts
0
Views
2.3k
Activity
Nov ’25
Audio Unit v3 host v2 third party plugins
Hi, I have just implemented an Audio Unit v3 host. AgsAudioUnitPlugin *audio_unit_plugin; AVAudioUnitComponentManager *audio_unit_component_manager; NSArray<AVAudioUnitComponent *> *av_component_arr; AudioComponentDescription description; guint i, i_stop; if(!AGS_AUDIO_UNIT_MANAGER(audio_unit_manager)){ return; } audio_unit_component_manager = [AVAudioUnitComponentManager sharedAudioUnitComponentManager]; /* effects */ description = (AudioComponentDescription) {0,}; description.componentType = kAudioUnitType_Effect; av_component_arr = [audio_unit_component_manager componentsMatchingDescription:description]; i_stop = [av_component_arr count]; for(i = 0; i < i_stop; i++){ ags_audio_unit_manager_load_component(audio_unit_manager, (gpointer) av_component_arr[i]); } /* instruments */ description = (AudioComponentDescription) {0,}; description.componentType = kAudioUnitType_MusicDevice; av_component_arr = [audio_unit_component_manager componentsMatchingDescription:description]; i_stop = [av_component_arr count]; for(i = 0; i < i_stop; i++){ ags_audio_unit_manager_load_component(audio_unit_manager, (gpointer) av_component_arr[i]); } But this doesn't show me Audio Unit v2 plugins, why? regards, Joël
Replies
3
Boosts
0
Views
1.7k
Activity
Aug ’25