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:
Which tracks are selected in the Host or even a list of the current tracks in the host.
Where in the timeline do those tracks start/stop.
Access to the audio data/midi data for a specific track.
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.
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.
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.
…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.
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…
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.
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.)
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.