The SALIERI Language is a newly developed programming language specifically designed for applications, studies and experiments in computational musicology. It is based on an hierarchical model of formal music representation and supports representation of musical material on both score- and structural level. SALIERI combines features of traditional functional and procedural programming languages with powerful concepts for manipulating musical material. These features allow to significantly reduce programming overhead with respect to conventional programming languages such as LISP or C. The SALIERI Language is the core of the SALIERI System, an integrated, interactive software environment comprising program editors, workspace browsers, viewers for musical material, and an extensive online-help.
The SALIERI Language is based on a dynamic typing system which supports function overloading and polymorphism. Its object types include musical data-types sequence and segment as well as the commonly used simple object types boolean, integer, real, and string. The complex datatyp list implements heterogeneous lists of objects, thereby forming the basis for more sophisticated data-structures which are needed in individual, problem-specific contexts. Since part of the SALIERI Language is based on the functional programming paradigm, functions and macros are regarded as ordinary objects which can be stored in lists or passed as parameters, thus allowing the flexible realization of higher-order concepts (as can be used for aleatoric music generation or variation).
One of the most important aspects of SALIERI is its set of carefully selected, powerful built-in functions. Among these, complex musical operations can be found, such as tonal transposition based on generalized scales or transcription, which allows the translation of music material between different keys and generalized scales.Of course, the SALIERI built-in functions include also common arithmetic, comparison-, set-, list-, and I/O-operations, as well as control flow functions like conditional and loop structures. By extending the system with new, user-defined functions, the expert user can take full advantage of the power of musical programming offered by SALIERI.