ArchitecturalSummary » History » Version 6

Chris Cannam, 2012-01-13 05:02 PM

1 1 Chris Cannam
h1. Sonic Visualiser: architectural summary
2 1 Chris Cannam
3 1 Chris Cannam
Sonic Visualiser is a substantial application written in C++ using the "Qt": user interface toolkit.
4 1 Chris Cannam
5 1 Chris Cannam
It is a cross-platform application that can be built on (at least) OS/X, Windows, Linux, and Solaris, but it has a substantial number of dependencies on third-party libraries which contribute to the complexity of the build process. The code also does not currently build with Visual C++; the Windows build is done using MinGW and g++.
6 1 Chris Cannam
7 1 Chris Cannam
The Sonic Visualiser code is provided as a number of separate libraries, with varying dependencies. These are managed in separate projects on this code site, and are as follows:
8 1 Chris Cannam
9 6 Chris Cannam
* "*svcore*":/projects/svcore -- Non-interactive code, without user interface or audio device I/O. This code is used by batch applications such as "Sonic Annotator":/projects/sonic-annotator as well as Sonic Visualiser. It contains a number of submodules:
10 1 Chris Cannam
** *system* -- Some system-dependent code that Qt did not provide
11 1 Chris Cannam
** *base* -- Miscellaneous handy classes 
12 4 Chris Cannam
** *data/fft* -- FFT code _[depends on fftw]_
13 5 Chris Cannam
** *data/fileio* -- Audio file import and export and related classes _[depends on libmad, liboggz, libfishsound, libsndfile]_
14 5 Chris Cannam
** *data/midi* -- MIDI-related code _[using rtmidi]_
15 1 Chris Cannam
** *data/model* -- Data models used for Sonic Visualiser's internal representations. These include waveforms (including zoomed previews) as well as grids (spectrograms etc) and editable data (time/value plots, MIDI-style note tracks, text etc).
16 5 Chris Cannam
** *data/osc* -- OSC control _[depends on liblo]_
17 5 Chris Cannam
** *plugin* -- Interfaces for audio plugins such as LADSPA, DSSI, "Vamp": _[depends on vamp-hostsdk]_
18 3 Chris Cannam
** *transform* -- A set of classes that use such plugins to transform the models found in *data/model* into one another (through audio analysis or effects transformations)
19 1 Chris Cannam
** *rdf* -- Classes to carry out RDF queries and to import and export RDF data to models or transforms _[depends on librdf]_
20 6 Chris Cannam
21 6 Chris Cannam
* "*svgui*":/projects/svgui -- User interface widgets and helpers, with the following submodules:
22 6 Chris Cannam
** *widgets* -- Custom Qt widgets
23 6 Chris Cannam
** *layer* -- Classes that manage rendering of the data models found in *svcore/data/model* onto a widget surface, and limited interactive editing. These include the waveform renderer, line plots, grids, time ruler, etc. Layers rely on a lot of common code to carry out scaling and manage adjustable properties.
24 6 Chris Cannam
** *view* -- Classes (in fact also widgets) which display layers on top of one another. The View class handles drawing, and the Pane subclass handles interaction.
25 6 Chris Cannam
26 6 Chris Cannam
* "*svapp*"