Is Tracktion Engine / JUCE suitable for my task?

Hi everyone,

I developed a few Audio Units plugins and now I would want to wrap them into a standalone app. I wonder if Tracktion Engine / JUCE could simplify some things for me. Basically I need the following from the app:

  • Cross-platform: Mac and Windows
  • Custom GUI (use custom art, not OS built-in controls)
  • Support stereo/mono audio
  • Playback, pause, move playhead
  • Simple waveform display with playhead
  • Import and export audio clip (support multiple codecs, through plugins may be)
  • Both real-time and non-realtime processing (pre-render?)
  • Start/stop/pause the final render
  • Apply Audio Units of course, I can wrap the actual processing codes into the native Tracktion Engine plugins.
  • Some of Audio Units require data pre-roll (latency in AU terms)

Distant road-map (may never happen):

  • multi-track support
  • editing features
  • import audio tracks from video clips (may be through plugins)

I would appreciate if anyone could tell me if anything from the list is impossible/hard to implement with the framework. Won’t the framework be an obstacle for implementing some of the features?
And what is better to use Tracktion Engine or JUCE?


Roman

Tracktion Engine will get you going very fast on what you want to build. If you look at the plugin demo or recording, they do most of what you want: https://github.com/Tracktion/tracktion_engine/tree/develop/examples I’ll try and get a rendering demo together fairly soon.

Out of the box, juce supports aiff, flac, mp3, ogg, wav, core audio & windows media formats. The engine adds support for rex files. Adding more formats requires creating a new class that inherits from AudioFormat and passing them to AudioFileFormatManager::addFormat

Supporting windows means you’ll need to rewrite your Audio Units. Might be easiest to use juce to rewrite them as juce plugins. We have a way to compile juce plugins into apps that use the engine and be stand alone vst, au, etc plugins. This way you aren’t duplicating code if you still want to sell standalone plugins and your users that use the app don’t need to worry about installing and scanning plugins.

For importing audio from video, I recommend stripping the audio with something like ffmpeg and the import the resulting audio file.

JUCE on it’s own dosen’t have a concept of a playhead or tracks, so starting with the Tracktion Engine will save you a lot of time. The biggest obstacle will be if the engine does something differently than the way you want to handle it. That might be the handling of mono and stereo. The engine doesn’t have specific mono and stereo tracks, instead it looks at the content on the track, the plugins and the output and adapts to the content.

I advise downloading the demo of Tracktion Waveform (which uses the latest engine) and try and ‘build’ you app. If all the routing you want works and latency is handled correctly, then the engine will work for you. You’ll just need to build a GUI, which is still a lot of work, but at least you’ll have a head start.

Also, not sure what you mean by ‘editing features’. If it’s trimming, splitting clips. Levels, pan, etc, engine can do that. If you want the user to be able to edit individual samples, they there aren’t features for that.