iPadOS: AUv3 does not receive MIDI messages [SOLVED]

Hi,

I’ve ported my desktop plugin to iPadOS and I’ve noticed that only the standalone versione receives MIDI messages, while the AUv3 does not.

Important: this is not a synth, is an audio plugin that uses MIDI only for things like tap tempo, preset change, FXs on/off and so on.

In my CMakeList:

IS_SYNTH FALSE                              
NEEDS_MIDI_INPUT TRUE               
NEEDS_MIDI_OUTPUT FALSE              
IS_MIDI_EFFECT FALSE  

The same plugin works in different desktop DAWs (not Pro Tools: AAX Plugin doesn't not receive MIDI input) and also in the standalone version for iPad.

I’m testing it in AUM.

First of all: can an AUv3 audio plugin actually receive also MIDI? If yes, is there something that I need to add to my project? I’ve searched about this topic and I didn’t find anything relevant. Thank you!

From Apple doc (Audio Unit Development Fundamentals):

  • Effect units ('aufx'), such as volume controls, equalizers, and reverbs, which modify an audio data stream
  • Music effect units ('aumf'), such as loopers, which combine features of instrument units (such as starting and stopping a sample) with features of effect units
  • Offline effect units ('auol'), which let you do things with audio that aren’t practical in real time, such as time reversal or look-ahead level normalization
  • Instrument units ('aumu'), which take MIDI and soundbank data as input and provide audio data as output—letting a user play a virtual instrument
  • Generator units ('augn'), which programmatically generate an audio data stream or play audio from a file
  • Data format converter units ('aufc'), which change characteristics of an audio data stream such as bit depth, sample rate, or playback speed
  • Mixer units ('aumx'), which combine audio data streams
  • Panner units ('aupn'), which distribute a set of input channels, using a spatialization algorithm, to a set of output channels

I think that I need an “aumf”, how can I set this property for my AUv3 plugin? As mentioned above, I do not use Projucer, only CMake.

Update: searching inside JUCE codebase I found that settings the CMake flags as above makes the AUv3 an “aumf”. Auval tool confirms that my plugin is an “aumf”, so why I can’t receive MIDI messages?

I’m sure that is something related to a wrong setting, because the same code works without any issue in Standalone (iPadOS/macOS/Windows) and in AU format on macOS.

If I modify the AudioPlugin CMake example with the flags you provided, then load it in AUM on an iPhone running iOS 17.4, the plugin is able to receive MIDI messages.

After loading the plugin, pressing the ‘keyboard’ icon in the plugin editor’s titlebar opens a keyboard that sends MIDI straight to the plugin.

Sending MIDI from other sources also works, e.g. the MIDI output of the AudioPluginDemo synth plugin can be routed to the AudioPluginExample using the routing view:

If you’re still running into problems, please provide the exact steps you’re taking so that we can attempt to reproduce the issue.

Issue solved here: