Ardour Source-Tree layout (Feb 2022) ===== Front Ends ===== gtk2_ardour/ The main Ardour GUI -- This is where most of the complexity is :) It is cleanly separated from the backend and processing engine. headless/ hardour -- headless Ardour, mostly demo-code how to use Ardour without a GUI. session_utils/ command-line tools using libardour (e.g. export) luasession/ arlua -- commandline interface to libardour ===== LIBRARIES ===== A collection of libraries and utility functions. While most are shared libraries, and almost all are exclusive to Ardour. libs/ **** Independent, standalone libs **** - libs/appleutility/ Utility Classes, abstraction for CoreAudio and AudioUnits (OSX, macOS) - libs/ardouralsautil/ Utility Class for device-listing (used by the jack and ALSA backends). Device-reservation comandline tool (linked against libdbus), which is also available from https://github.com/x42/alsa_request_device - libs/clearlooks-newer/ GTK theme engine (used by gtk2_ardour) - libs/fluidsynth/ Stripped down (library only) and slightly customized version of fluidsynth use tools/update_fluidsynth.sh to update from upstream - libs/hidapi/ Unmodified https://github.com/signal11/hidapi for interaction with some control surfaces (Push2, NI Maschine) - libs/libltc/ Unmodified https://github.com/x42/libltc/ for Linear Timecode en/decoding - libs/lua/ Lua Script interpreter and C++ class abstraction - libs/lua/lua-5.3.5 is unmodified upstream Lua-5.3.5 - libs/lua/LuaBridge is a highly customized version of https://github.com/vinniefalco/LuaBridge (C++ bindings) - libs/midi++2/ (uses libpdb) MIDI parsing, MIDNAM handling, Port abstraction for I/O - libs/ptformat/ Unmodified https://github.com/zamaudio/ptformat for loading ProTools sessions - libs/temporal various utility code for dealing with different kinds of time, including Timecode (FPS) and musical time conversions - libs/qm-dsp/ Stripped down version of https://github.com/c4dm/qm-dsp The Queen Mary DSP library is used by VAMP Plugins - vamp-plugins VAMP plugins for audio analysis and offline processing (uses qm-dsp) - libs/vamp-pyin/ VAMP plugins for pitch and note-tracking (uses qm-dsp), offline analyis - libs/vfork/ A exec-wrapper which redirects file-descriptors to be used with vfork(2) - libs/vst3/ Stripped down version of Steinberg's VST3 SDK https://github.com/steinbergmedia/vst3sdk/ see also tools/update_vst3.sh - libs/plugins/ LV2 Plugins included with Ardour. These are currently mostly independent (a-fluidsynth uses libfluidsynth). Most of them are custom version of existing plugins (zamaudio, x42), that have been customized to be bundled with Ardour on all platforms tha ardour runs on. - libs/zita-convolver/ convolution kernel, so far only avialable to Lua scripts. - libs/zita-resampler/ Efficient resampler with variable rate, useful for adaptive resampling. Mainly used for vari-speed playback. **** PBD dependent libs **** - libs/pbd/ Generic non-Ardour-specific utility classes. This is the basis for all Ardour specifics. It provides basic concepts and OS abstractions. The name comes from "Paul Barton-Davis", Paul's full name at the time he started working on working on audio software. - libs/evoral/ (uses libpbd) Control events, control lists, automation evaluation, parameter descriptions, incl MIDI event abstraction - libs/evoral/libsmf/ (contains several non-upstreamed fixes) (used inside evoral) Handling Standard MIDI File format. Abstracted to C++ in SMF.{cc,h} - libs/backends/ (uses libpdb, ardouralsautil | appleutility, implements libardour interface) Interaction with Operating System's Audio/MIDI API: ALSA, CoreAudio, JACK, PortAudio/ASIO, Pulseaudio - libs/surfaces/ (uses libpbd, libevoral, libtimecode, libardour ;; libgtkmm2ext, libcanvas) Control Surfaces, dynamically loaded by libardour on runtime, to remote-control ardour (midi bindings, network etc). - libs/panners/ (uses libpdb, implements libardour interface) Pan plugins (stereo-balance, VBAP, etc) are dynamically loaded at runtime. - libs/audiographer/ (uses libpdb) Mini Ardour inside Ardour to export audio-files from sessions. - libs/ardour/ (uses pretty much all the libs above) This is it. libardour runs Ardour sessions All realtime processing happens here, plugins are managed etc. **** Plugin Scan Tools **** - libs/auscan/ Apple Audio Unit Plugin Scan commandline tool. - libs/fst/ VST2/3 plugin scan commandline tool. **** UI related libs **** - libs/gtkmm2ext/ (uses libpbd) Utility Library to extend GDK, GTK, and basic abstraction for UIs and event-loops. This library is not limited to the GUI, but also used for other graphical interfaces (e.g. Push2, NI Maschine control surfaces). - libs/canvas/ (uses libpbd, libgtkmm2ext) Cairo Canvas, provides a slate for scalable drawing and basic layout/packing This is used by gtk2ardour's main editor. - libs/widgets/ (uses libpbd, libgtkmm2ext ;; libcanvas utils/colors) Ardour GUI widgets (buttons, fader, knobs, etc) - libs/waveview/ (uses libpbd, libgtkmm2ext, canvas, libardour) Threaded waveform rendering and waveform image cache ===== RESOURCE FILES ===== These are bundled as-is. share/export/ Export Presets share/mcp/ Mackie control surface device files share/midi_maps/ Generic MIDI control surface presets share/osc/ Configuration presets for the OSC control surface share/patchfiles/ MIDNAM files, MIDI synth descriptions (note-names, CC, PGM names) share/scripts/ Lua scripts (files with a leading underscore are not bundled) see also share/scripts/README share/templates/ Session templates (currently none) ===== MISC ===== doc/ Misc developer oriented documentation files and Doxygen patches/ Some .diff files for the build-stack. tools/ Various developer tools, most notably packaging scripts