ArchitecturalSummary » History » Version 7
Chris Cannam, 2012-01-13 05:13 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":http://qt.nokia.com 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":http://vamp-plugins.org/ _[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 | 7 | Chris Cannam | * "*svapp*":/projects/svapp -- Higher-level code for use by applications that "look a bit like Sonic Visualiser". In practice, this code is largely specific to SV itself. It includes: |
27 | 7 | Chris Cannam | ** *audioio* -- Real-time callback-driven audio playback, including plugin application, time stretching, and sonification from data models. Despite the name, there is no recording code. _[depends on rubberband and portaudio, pulseaudio, or jack]_ |
28 | 7 | Chris Cannam | ** *framework* -- Contains the Sonic Visualiser document class and file load/save, and a "generic" main window implementation (generic in the sense that it does not refer to SV explicitly and subclasses can pick and choose which aspects to include). |
29 | 7 | Chris Cannam | |
30 | 7 | Chris Cannam | * "*sonic-visualiser*":/projects/sonic-visualiser -- This project. Contains the concrete main window implementation, main entry point, and images and other resources. |