Syrinx |
|
Syrinx is a music and sound synthesis programming language similar to Csound and other MUSIC-N languages. MUSIC-N language compilers typically read an orchestra file and a score file and output an audio file containing a piece of music. The orchestra file contains specifications for the synthesized instruments that will be used to generate the sounds used in the piece. The instruments defined in the orchestra file are then "played" according to the instructions contained in the score file. Score files, like a traditional musical score, contain information about the notes played in the piece, including pitch, duration, and dynamics. In a traditional MUSIC-N orchestra file, a programmer defines an instrument by patching together one or more "unit generators." A unit generator (or UG) is a basic sound-producing or sound-altering unit, such as an oscillator, an envelope, a filter, or a delay. The output of one UG is routed to the input of another UG or to the output, similar to the way modular synthesizers are patched. In Syrinx, composers will be able to create their own unit generators right in the orchestra file using the same language syntax that they use to define instruments. In fact, in Syrinx, instruments and unit generators are really the same thing. In this way, Syrinx is more similar to Max/MSP than Csound -- the only way to create your own UG in Csound is to hack the Csound source code. Because of this, Syrinx allows for true functional decomposition. Composers will be able to build up complex sounds from simple sounds in a bottom-up fashion. Syrinx also allows for a similar sort of functional decomposition in the score file: the composer will be able to create "sections" which can be composed of other sections. Below is a simple example of a Syrinx orchestra file:
@@note @@trig @@velo | delayflute
[[
@flute1: { flute pitch=@@note dyn=@@velo }
@output: { fileout filename="out.raw" }
@delay: { delay time=".2" feedback=".1" }
@flute1 \ @delay \ @output < <
]]
flute | @@out
pitch=@@n
dyn=@@v
[[
@osc1: { osc type="sine" freq=@@n }
@env1: { env type="adsr" a="0" d="4" s=".7" r=".1" level=@@v }
@osc1 \ @env1 \ @@out < <
]]
This orchestra file contains two UG definitions (aka instrument definitions). The first is for a UG called "delayflute" which has three direct inputs (called "note", "trig", and "velo"). The statements between the double braces ("[[" and "]]") actually define what this UG does. In this case, it uses three UG's ("flute", "delay", and "fileout"). The output of the flute is routed to the input of the delay, and the output of the delay is routed to the fileout UG. Note that the "flute" UG is not built-in to the engine, and is defined below "delayflute" in this same orchestra file. A Syrinx score file uses a notation that is similar to the piano-roll form that may be familiar to users of professional DAW's. The time axis is vertical, and the pitch axis is horizontal. This means that if a quarter-note rhythm is being notated, then each line of the file represents a quarter note, and the character position of the note character represents the pitch that is being played. Period characters (.) are ignored by the compiler: they are analogous to black keys on the piano keyboard. +=section part1=+ =set[ flute= . . . . . [. . . . . . . . . . . . .[. . . . . . . . . . . . .[ . . . . . . . . . . . .[ . . . . . -- . . . . .[ . . . . . . . . . . . . [. . . . . . . . . . . . [. . . . . . . . . . . . .[. . . . . . +==+ +=section part2=+ =set[ delayflute= . . . . . . .[ . . . . . . . . . . . . [. . . . . . . . . . . . .[. . . . . . . . . . . [. . . . . -- . . . . .[ . . . . . . . . . . .[. . . . . . . . . . . . .[ . . . . . . . . . . . . [. . . . . . . +==+ +=section main=+ =duration 1.22= ~part1~ ~part2~ ~part1 & part2~ +==+ This score has two different parts, one played by the flute instrument, and the other played by the delayflute instrument. First they are played one after the other, then both parts are played at the same time. Syrinx is currently in development and the above features are subject to change without notice. Complete documentation and downloadable binaries for Linux and Windows are roughly planned for end of summer 2008. Please direct all inquiries to info@instanttheories.com. © 2008 Jason Scherer. This web page is a publication of details of an invention and constitutes prior art for that invention. This file was last modified on Tuesday, 19-Feb-2008 21:41:41 MST |