List of Host Interaction Classes


#1

Is there a list of classes available in JUCE that allow for data retrieval/interaction with the host? From browsing the API, one of the classes I found was AudioPlayHead (https://www.juce.com/doc/classAudioPlayHead) which lets you retrieve information about where the play head is currently located in the host (along with other information such as looping data). Are there others available?

What I’d specifically be looking for are things like:

  1. Which tracks are selected in the Host or even a list of the current tracks in the host.
  2. Where in the timeline do those tracks start/stop.
  3. Access to the audio data/midi data for a specific track.
  4. Project configuration data such as sample rate, resolution, etc.

I have a feeling these things aren’t available and the only way I can think of right now is to use the PluginHostType class to detect which DAW I’m in, have the user point to their project directory, and parse the files/data in that directory manually to pull out things like track information and project audio settings.

Thanks!
Tomek


#2

Yeah, none of that information is available to plugins.

Your workaround is interesting and creative and might work, but you’ll have to write parsers for every DAW you plan to support, and your plugin will be crippled for any you don’t.

Don’t forget that you’ll be able to pull the sample rate and buffer size from the prepareToPlay() callback, but that’s about all I can think of.


#3

Yea, maybe if I tackle the big DAWs first I can get a decent amount of coverage. In Garageband for example, the plist located at Alternatives/000/MetaData.plist contains a good number of the attributes such as NumberOfTracks, SampleRate, AudioFiles (which contain the list of audio files used in the project), bpm, and others. Will dig into this a bit more and see how viable this ends up being.

Thanks for the info Jon!


#4

…if that information is even readable. I think a proper interface is needed for that. I always thought a more open interface to the host would be good, but it makes little sense, as long as the hosts don’t support it.

For Nr. 3 there is an extension called ARA (link to wikipedia):

ARA Audio Random Access is an extension for audio plug-in interfaces like AU, VST and RTAS developed by Celemony together with PreSonus. With ARA, the DAW and plug-in can exchange information about the audio file, tempo, pitch, and rhythm, not only in the moment of playback but for the whole song. The transfer of audio material to Melodyne isn’t required anymore.

Would be cool, if JUCE could support that, but there are not much hosts that support it anyway, it reduces your market share drastically, if you rely on that…

For Nr. 4 you get sample rate and block size in your prepareToPlay call.

For 1 and 2 I doubt there is a generic way that would fit even most DAW types…


#5

Can anyone from ROLI reply to this ? This feature is definitely needed.


#6

It may be needed but there’s really no way to comprehensively implement it.


#7

Can you specify “This feature”, since there were different things talked about in this thread.
Are you talking of

  • List of Host Interaction Classes (as the title says?)
  • ARA - Random access to sample data?
  • Files and locations in the project file?

I agree, any information about the project and it’s layout would be nice, but keep in mind, that

a) the host needs to provide that
b) it should be covered by the different wrapper types (AU/VST/VST3/RTAS/AAX/IAA/AUv3) or at least some of them…

I agree with @Xenakios, most of them are unrealistic, unfortunately… but ARA would be cool for many use cases.


#8

The basic functionality we would like to have (for AudioSuite) is the files and locations in the project file. It would be great if it gives the currently selected file location.


#9

Instead of adding such specific features, I’d rather have them add features to JUCE that would make it easier for the developer to optionally add those features themselves. At the moment the plugin client abstraction is too closed, covering only the minimum feature set supported by all the plugin formats. (By the way, I don’t know what is supported by ProTools/AAX/AudioSuite. But at least VST2/VST3 plugins when run in Reaper have a very wide set of additional functionality possible. But at the moment accessing those features requires modifying the JUCE source code.)


#10

I was wondering if anyone started doing Celemony ARA for JUCE or there are plans.
Seems Tracktion / Waveform already got ARA from the host side (and I guess it’s some modifies JUCE hosting).

Looking at their SDK it seems that adding the actual ARA callbacks would be very easy though not sure how much encapsulation of their own structures should be done.