All Activity
Yesterday
-
Lisp/Opusmodus to Arduino
BWV 5 - Chorale: "Führ auch mein Herz und Sinn", performed by 4 singing motors (Opusmodus -> Arduino -> Motors) IMG_2977.mov
-
Frog-1987 joined the community
Last week
-
-
-
-
Messiaen Mode 3 Piano quintet
Hi, here's a small exploration of Messiaen mode 3 through a Piano quintet, just for fun with Opmo. Messiaen3-PianoQuintet_120926-1 - 1.mp3
-
-
-
-
-
-
Opusmodus 4.0.32018 Update
Instruments Meet ElectronicsCompose instrumental and synthesized audio material together in a single def-score. Combine MIDI instruments with prepared audio and CLM synthesis, arrange complete audio scenes with make-mix, and play everything in sync through Notation, MIDI Player, or Live Coding. Example: One score. Instruments and electronics. Fully integrated in Opusmodus. Best wishes, Janusz
-
opmo started following I would like to get a quintuplet of eighth notes with bracket (5) and Opusmodus 4.0.32018 Update
-
Vir joined the community
-
aaustintts6914 joined the community
Earlier
-
D-Lumet joined the community
-
Daniellumet joined the community
-
-
-
I would like to get a quintuplet of eighth notes with bracket (5)
Thank you very much, Janusz! :time-signature '((2 2) 4) solves exactly the problem I was having. I understand now that I need to look at how grouping works within time signatures. Could you please tell me where in the Opusmodus documentation I can find the information about this syntax, specifically the meaning and usage of: :time-signature '((2 2) 4)I would like to read the documentation about time-signature grouping so I can understand how to construct similar grouped time signatures myself. Thanks again!
-
I would like to get a quintuplet of eighth notes with bracket (5)
:time-signature '((2 2) 4) You need to explore what grouping means and how it works in OM time signature.
-
I would like to get a quintuplet of eighth notes with bracket (5)
I misspoke. I want a 4/4 measure containing two groups of quintuplets of eighth notes: 4/4 | 5 eighth notes = 2 beats | 5 eighth notes = 2 beats | So each group of 5 must occupy exactly one half note (2 beats), and two groups must fill a 4/4 measure. Opusmodus graphically produces the result I'm looking for for the quintuplet groups, but the displayed time signature is 1 2. If I simply replace it with: :time-signature '(4 4)' the display is with 2 2 display is I don't understand the logic... The last one should simply be 4 4 and the display of the quintuplets would be ok.
-
I would like to get a quintuplet of eighth notes with bracket (5)
:time-signature 1/2 will do that.
-
I would like to get a quintuplet of eighth notes with bracket (5)
Hi, Please, if someone can help me. I don't understand why I'm not getting a quintuplet of eighth notes with bracket (5) thank you! (progn (setf minor1 '((c4 dim) (a3 aug :rotate 1) (e4 maj) (g3 m :rotate 2) (c4 dim :rotate 1) (a3 aug :rotate 2) (e4 maj :rotate 1) (g4 m) (c4 dim :rotate 2) (a4 aug) (e4 maj :rotate 2) (g4 m :rotate 1) )) (setf minor1-down '((c5 dim) (a4 aug) (e4 maj :rotate 2) (g4 m :rotate 1) (c4 dim :rotate 2) (a3 aug :rotate 2) (e4 maj :rotate 1) (g4 m) (c4 dim :rotate 1) (a3 aug :rotate 1) (e4 maj) (g3 m :rotate 2) )) (setf comping-pitches (append (expand-chord minor1) (expand-chord minor1-down))) ;; 4. Création du flux OMN final (setf comping (make-omn :pitch comping-pitches :length '(5h = = = =) :span :pitch)) (setf res (gen-divide 3 (flatten (pitch-melodize comping)))) ;; dans ce cas quitolet avec gen-palindrome (setf omn1 (gen-palindrome (loop for i in '(0) append (pitch-transpose i res)))) (def-score score-name (:title "triad dim" :key-signature 'atonal :time-signature '(2 4) :tempo 72) (instrument :omn omn1 :channel 1 :sound 'gm :program 'acoustic-grand-piano)) )
-
david started following I would like to get a quintuplet of eighth notes with bracket (5)
-
HugibertRies joined the community
-
Having fun drafting an orchestral section with Opusmodus and VSL
Bravo, we like it!
-
opmo started following Having fun drafting an orchestral section with Opusmodus and VSL
-
Shota joined the community
-
Having fun drafting an orchestral section with Opusmodus and VSL
- Snippet
Snippet There are two types of omn snippets. The first one is a single voice snippet which displays and auditions a contents of a list and a list of lists into one staff notation. The second one is for a multi voice display. Each of the snippets has its own shortcut key. The single voice snippet shortcut is ⌘1 and the multi voice snippet shortcut is ⌘2. The best way to examine the examples below is to copy and paste the expressions into the editor file ie. composer panel. You can stop audition at anytime by pressing ⌘ESC keys. Single Voice Snippet - ⌘1'((s d5f5b5 f e5g5c6 e f5a5d6 s g5b5e6 f5a5d6 e5g5c6 d5f5b5) (e c5e5a5 c5e5a5 q d5f5b5 marc) (s d5f5b5 e5g5c6 f5a5d6 g5b5e6 e f5a5d6 s e5g5c6 d5f5b5) (e c5e5a5 c5e5a5 q d5f5b5 marc))) (I. Strawinsky, Petruschka, 1911/21) Multi Voice Snippet - ⌘2(setf p1 '(q d4 pp s eb4 < leg g4 < leg bb4 < leg a4 q. cs5 mf -e 3q gs5 > leg fs5 > leg c5 > b4 > leg f4 leg e4) p2 '(t d4 < leg eb4 < leg g4 < leg bb4 q. a4 marc t fs4 mf leg gs4 leg e. c5 e b4 t f5 leg e5 leg d5 leg eb5 3q bb5 > a4 > bb5 > e a4 pp stacc -e) p3 '(q d5 leg eb5 3q g4 stacc bb4 stacc a4 stacc e. cs4 marc s gs4 leg q gs4 -q) p4 '(q. fs3 pp 3e c3 < leg b4 < leg f4 e d3 mf s eb3 leg g3 leg bb3 leg a3 e fs3 leg fs3 3e gs4 > stacc c5 > stacc b5 > stacc t f5 pp e.. e5) ) (setf omn (list p1 p2 p3 p4))- MIDI Player
MIDI Player The Midi Player provides an instant visual guide to the play of pitch, rhythm, duration and velocity (dynamics). Sounding out a composer’s script is accompanied by its graphic representation and immediate playback in this Midi Player window. A pitch event’s intersection with a bar and beats grid is uniquely colour-coded and matched in a display of velocity below the bar and beat grid. Play and Rewind controls are activated from a contextual menu or from keystroke commands: Spacebar for Play and Return for Rewind. With Zoom In and Zoom Out one or any number of bars can be viewed in sharp detail. In the top left corner see the time signature display. Where changing signatures are frequent this display changes as the first bar on the left of the window appears. Tempo changes are displayed in a similar way at the bottom of the grid. The instruction Ignore Ports allows the composer to choose between the on-board GM sample-player or use personal outboard or inboard sound sources.- Notation Viewer
Notation Viewer That Opusmodus has adopted MusicXML as the de facto standard for displaying notated scores should be no surprise. This is inextricably bound up with the development of the distinctive Opusmodus Notation script (OMN). It gives the composer the means to design into the very composition of a score a host of musical details that have until now been impossible to bring together in a single line of script. Example:(setf rh '((-s) (e f4e5 pp -s db5) (-s) (-s eb4 pp c4d5 -) (-s) (-s c4d5 pp eb4 -) (-s) (e db5 pp -s f4e5) (-s) (s gb4f5 p a5 -) (s d4ab4db5 p bb4 -) (-s a5 p gb4f5) (-s) (s b5 f gb4g5 -) (s a3bb4 f ab4 -) (s c4d5 f> eb4 -) (s db5 f> f4e5 -) (-s) (s gb4f5 p a5 d4ab4db5 bb4 -) (-s) (-s a5 pp gb4f5) (-s) (-t b2 f e3 bb3 - d5 c4eb4) (-s) (s db3 f - s. g5 -t) (s gb4f5 p) (-t a3 mp ab3 mf -s. t db5f5 f c4 -) (s e3e4 p) (-t s. d2 f -s ab5 mf) (-s) (t gb4a4 p g3 mp - b2 f e3 bb3 e3 a3 eb4 - g5 mf f4ab4 mp) (-s) (s f2 f - s. c6 -t) (s b2bb3 p) (-s t db5 mp -s. t gb5bb5 f4 f -) (t a3 f ab2 - ab2 a3) (-t f4 f gb5bb5 mf) (-t a3 mp d4ab4 c4 p bb5db6 mf) (-t b2 f3 b2 -) (t bb5db6 c5 f d4ab4 a3 p) (-s) (t b4eb5 p bb3 -) (t d4 p db3 - db3 d4) (-t bb3 p b4eb5) (-s) (-s eb5 p bb3b4 -) (-s) (e d4db5 p -s c5) (-s) (e c5 p -s d4db5) (-s) (-s bb3b4 p eb5 -) (-s) (-s ab3g4 p e4 mf) (-s c4gb4b4 f5) (-s db5 mp bb3a4) (-s) (-s eb4d5 p gb4) (-s e4 p f3g4) (-s b3 p a2bb3) (-s c5db6 pp ab5) (-s) (-s e5eb6 p g5 c4f4b4 p> gb4) (-s) (-e) (e d5ab5db6 pp))) (setf lh '((-s) (-s b3 pp gb3g4 -) (-s) (e a2bb3 pp -s ab4) (-s) (e ab4 pp -s a2bb3) (-s) (-s gb3g4 pp b3 -) (-s) (-s e3eb4 p c3) (-s ab3d4g4 p db5) (s c3 p e3eb4 pp -) (-s) (-s f3e4 f db4) (-s eb4 f c4d5) (-s ab4 mp bb3a4) (-s g2gb3 mp b3) (-s) (-s e3eb4 p c3 ab3d4g4 db5) (-s) (s c3 pp e3eb4 -) (-s) (-e t ab4 pp a3 -) (s bb2a3 pp) (-t s. b3 pp -s db3) (-s) (t c4eb4 pp d5 - bb3 e3 b2 - g3 gb4a4) (-s) (s ab5 pp - s. d2 -t) (s e3eb4 pp) (-t c4 pp db5f5 -e. t db5 d4 -) (s b2bb3 pp) (-t s. c6 pp -s gb2) (-s) (t f4ab4 pp g5 - eb4 a3 e3 - c4 b4d5) (-t db3 pp g3 db3 -) (t b4d5 pp c4 -) (t e3 pp eb4 gb5 g4 -) (t eb4 pp e3 - e3 eb4) (-t g4 pp gb5 -) (-s) (-t f3 pp e4g4) (-t gb3 pp c4 gb3 -) (t e4g4 pp f3 -) (-s) (e a3ab4 pp -s f3) (-s) (-s g4 pp e4gb5 -) (-s) (-s e4gb5 pp g4 -) (-s) (e f3 pp -s a3ab4) (-s) (s bb3a3 p db5 mp -) (s gb4c5f5 f d5 -) (s e4 mp ab3g4 -) (-s) (s ab3 p db3c4 -) (s bb2a3 p b3 p> -) (s f3g4 p> e4 -) (s gb3 pp eb3d4 -) (-s) (s d5db6 p bb5 gb4b4f5 a5 -) (-s) (s g5 pp e5bb5eb6) (-e))) ;; Time Signature (setf time-events '((1 16 1) (4 16 1) (1 16 1) (4 16 1) (1 16 1) (4 16 1) (1 16 1) (4 16 1) (1 16 1) (3 16 3) (1 16 1) (3 16 4) (1 16 1) (5 16 1) (1 16 1) (3 16 1) (1 16 1) (7 32 1) (1 16 1) (4 16 1) (1 16 1) (9 32 1) (1 16 1) (4 16 1) (1 16 1) (12 32 1) (1 16 1) (4 16 1) (1 16 1) (9 32 1) (5 32 1) (3 32 1) (5 32 2) (4 32 1) (1 16 1) (3 32 1) (5 32 1) (3 32 1) (1 16 1) (4 16 1) (1 16 1) (4 16 1) (1 16 1) (4 16 1) (1 16 1) (4 16 1) (1 16 1) (3 16 3) (1 16 1) (3 16 4) (1 16 1) (5 16 1) (1 16 1) (2 16 2))) ;; Tempo (setf tempo-events '(("Sehr mäßig" e. 40 16) (:rit 40 26 1/64 2) (40 1) (:rit 40 26 1/64 3) (40 1) (:rit 40 26 1/64 1) (40 1) (:rit 40 26 1/64 1) (40 1) (:rit 40 26 1/64 1) (40 1) (:rit 40 26 1/64 1) (40 1) (:rit 40 26 1/64 1) (40 1) (:rit 40 26 1/64 1) (40 5) (:rit 40 24 1/64 5) (40 11) (:rit 40 26 1/64 2) (40 3) (:rit 40 26 1/64 2) (40 1) (:rit 40 20 1/64 3))) ;; Score (def-score webern-op.27-1 (:title "Variationen für Klavier Op.27, I" :composer "Anton Webern" :copyright "Copyright 1937 by Universal Edition" :key-signature 'chromatic :time-signature time-events :tempo tempo-events :accidentals :all :flexible-clef t :layout (piano-layout 'rhand 'lhand)) (rhand :omn rh :channel 1 :sound 'gm :program 0) (lhand :omn lh :channel 2) )- Spectral Analysis
Spectral Analysis OverviewThe Spectral Analysis window provides a real-time visualisation and control interface for frequency-domain analysis of audio signals. It combines Fast Fourier Transform (FFT) processing with a configurable analysis environment, supporting in-depth inspection of frequency components over time. The display includes magnitude spectra and peak detection, facilitating detailed timbral and structural audio analysis. In addition to its analytical capabilities, the environment supports direct integration with compositional workflows. The Export Partials function enables the extraction and preservation of spectral data in a format compatible with the Opusmodus library system. This allows composers to employ spectral data as a generative resource, thereby placing the techniques of spectral composition, including orchestration, transformation, and algorithmic modelling, immediately at their disposal. Spectrum View (Graph Area)X-axis: (Frequency, logarithmic scale): Ranges from ~8.17 Hz to 20 kHz (depending on user input). Y-axis: (Normalised Amplitude): Ranges from 0.0 to 1.0. Bars: Represent the magnitude spectrum at the current frame. Curve Line: Shows averaged or smoothed spectral envelope. Peak: Display detected frequency peaks (e.g., 21, 69, 144 etc. in Hz). Top Information BarFps: Frames per second of visual refresh. RMS: Root Mean Square amplitude of current frame. Bars: Number of spectral bins displayed. Pos: Current time/frame position and total duration. Cen: Spectral centroid (in Hz). Roll: Spectral roll-off frequency (in Hz). Spr: Spectral spread (standard deviation from centroid, in Hz). Flat: Spectral flatness (0.0 = harmonic; 1.0 = noise-like). Control Buttons and OptionsPlay: Initiates playback and real-time analysis. Rewind: Resets position to start of audio buffer. Scale: Log Selects frequency scale (e.g., Logarithmic or Linear). Show Octaves: Displays octave grid overlays. Analyser: Opens or configures the main Analyser module. Analysis ParametersFFT size: Number of points in FFT computation; affects frequency resolution, default: 16384. Window size: Size of analysis window (samples); affects time resolution, default: 2048. Hop size: Overlap between windows (samples), default: 1024. Frame interval: Time interval (seconds) between frames, default: 0.01. Min peak diff: Minimum difference between adjacent peaks for detection, default: 0.01. Min amp (dB): Minimum amplitude threshold for rendering spectrum, default: -90. Under-peak (dB): Threshold below peak for considering partials, default: -60. Min freq (Hz): Lower bound of frequency range displayed, default: 8.1758. Max freq (Hz): Upper bound of frequency range displayed, default: 12543.855. Window: Type of windowing function used for FFT (e.g., Hanning, Hamming, Blackman). Can be selected live to immediately observe its effect on the spectral analysis, default: :hanning. Inactive Buttons (Context-Sensitive)Export Partials (Disabled): Enables the export of spectral partials once sufficient analysis data is available. Upon activation, this function saves the extracted partials in a file conforming to the Opusmodus library format. The file is stored in the designated library location and indexed automatically for future retrieval, reuse in composition, or further spectral processing. Resample Rect (Disabled): Once active, performs rectangular resampling of the analysed audio. The resampled signal is saved as an audio file in the Media/Audio directory. The newly generated file is indexed automatically, allowing direct access through the Opusmodus Spectral Analysis or for subsequent processing. Interactive Controls and Selection ToolsTimeline Selection (Shift + Click & Drag)Holding the Shift key while clicking and dragging horizontally across the graph area allows the user to define a temporal selection on the timeline. This operation sets the active region for analysis playback and data export. The horizontal extent corresponds to the time range (start - end) under analysis. This selected interval can be used to constrain playback or to focus data extraction (e.g., exporting partials within the selected window). Rectangular Selection (Option + Click & Drag)Holding the Option (Alt) key while dragging the mouse enables a rectangular selection within the spectral display. This selection defines both frequency and time bounds. The vertical axis of the selection restricts frequency range. The horizontal axis restricts time range. This selection becomes active for specific functions such as resampling or focused spectral export. Once defined, the rectangular region is visually highlighted and is used as a contextual domain for subsequent operations. Graphical LabelsPeak Frequency: Numeric labels (e.g., 21, 69, 144) appear above detected spectral peaks, denoting the frequency (in Hz) of dominant components. Cursor Markers: While hovering or selecting, real-time frequency and amplitude information may be displayed depending on implementation. Time Cursor: A vertical line or pointer indicates the current playback or analysis frame. Keyboard ShortcutsSpacebar Play/Pause the analysis. Starts or halts real-time playback. Return Rewind to the beginning of the signal buffer.- Graphs
Graphs Making 2-D visualisations of musical parameters offer a new way of conceptualisation. Opusmodus graphical tools can plot pitch, rhythms, duration, dynamics and orchestration and there's a host of different display paradigms available. The composer can now view the interaction of multiple streams of parametric data, a perfect way to take in complex algorithmically-generated material. Composers often use such visualisations in the early stages of a project before precise pitches or rhythms are decided upon.- NCODE
Ncode Interactive Score Building in OpusmodusThis document explains how NCODE works from a user’s point of view, focusing on its two main areas: the Function and Variables window and the Def-Score pane. It is for anyone who wants to explore algorithmic composition in Opusmodus without writing Lisp code. The document has five sections: Introduction; Function and Variables window; Def-Score pane; Typical workflows; and Conventions and troubleshooting. 1. IntroductionNCODE is an interactive workspace in Opusmodus for exploring functions and building musical ideas step by step. It lets you: adjust a function’s inputs using simple on-screen fields, save results as named variables you can reuse later, and assemble a complete score using the Def-Score pane. 1.1 TerminologyVariable: a named value stored in the NCODE history. History: the ordered list of stored variables within the current session. OMN variable: a variable whose value is an OMN event sequence and can be assigned to an instrument in Def-Score. Session: the complete NCODE state saved as an .omnc file. 1.2 Creating, opening, and saving NCODE sessions (.omnc)NCODE sessions are stored as .omnc files. A session file preserves the complete NCODE state (including the history, variable bindings, and Def-Score settings). 1.2.1 Creating a new sessionTo start a new NCODE session file: 1. Choose New → NCODE Session… 2. The session file is created in ~/Opusmodus/Media/Ncode/. 3. The NCODE window opens automatically. 1.2.2 Opening an existing sessionAn existing .omnc file can be opened in two ways: • From the Navigator: open the Media/Ncode folder and select the desired .omnc file. • From the Open command: choose Open and select the required .omnc file. 1.2.3 Saving editsTo save changes made in the NCODE window, use Save. This updates the currently open .omnc session file. 2. Function and Variables windowThe Function and Variables window is the primary workspace for exploration. It combines a history of generated materials with an input form for defining and evaluating function calls. Figure 1 provides the reference layout. Figure 1. NCODE main window: Function and Variables. 2.1 Variables paneThe upper table lists variables created in the current session. Selecting a row recalls the variable’s originating function and parameters, allowing the computation to be reproduced, modified, or re-evaluated. 2.1.1 Filter controlsThe filter buttons restrict the table to a variable class, supporting rapid navigation in large sessions: All: display all stored variables. Numbers, Lengths, Pitches, Velocities, Articulations: display variables whose values are classified accordingly. OMN Events: display OMN event variables intended for score construction. Edited: display only variables that have been modified since the last save. 2.1.2 History table columnsEach variable entry is described by structured metadata: Type: the variable class recognised by NCODE. Name: the variable symbol stored in the session. Preview: the function associated with the variable’s creation. Size: an estimate of the value’s extent (for example, list length). Category and Operation: functional descriptors for orientation. Edited: a mark indicating that the entry differs from its saved state. 2.1.3 History operationsRefresh All: re-evaluate all history entries in creation order, restoring the session’s bindings. This is essential prior to Def-Score compilation when the score references stored variables. The command remains available after using New, and is disabled only when the session contains no variables. Variables: open history management (reorder entries and remove selected variables). Clear All: remove all variables from the session history (after confirmation). Define Score: open the Def-Score pane. Save to File: export the current history to an Opusmodus source file. Contextual menu (History table) Display and editing actions are accessed from the history table via a contextual menu (right-click). The menu is type-sensitive: it offers only the renderers and actions that are meaningful for the selected variable. Typical commands include: Snippet and Graph renderers (where supported), Notation, MIDI Player, and Live Coding for OMN materials, Export to Editor to insert the value or its generating expression into the editor, Edit actions for structured modification where applicable. Figure 2 shows the contextual menu for an OMN variable, including Notation, Multiple Voices, MIDI Player and Live Coding 2.2 Function paneThe Function pane specifies a function call through explicit argument fields. NCODE automatically presents required and optional parameters when a function is selected. 2.2.1 Name and Function fieldsName (variable): optional. When provided, the evaluation result is stored under this symbol; when omitted, NCODE generates an automatic name when adding to history. Function: the function identifier; in-place completion supports efficient selection. New: reset the Function pane to a safe empty state by clearing Name, Function, and all argument fields, and by deselecting any active variable in the history. This prevents unintended overwriting of an existing variable when Apply is used. Doc: open the documentation entry for the selected function. Edit: open the current argument expression in the editor for structured editing. Contextual variable insertion (Function and Argument fields) To reuse existing history variables while composing a new function call, NCODE provides a contextual insertion menu in the Function and Argument fields. How to use: right-click inside the Function field or an argument field to open a contextual menu of available history variables. Insert behaviour: selecting a variable inserts its name at the current caret position. The existing field text is preserved (it is not replaced). Purpose: this supports rapid reuse of previously computed materials without recalling (loading) the variable’s originating function. Notes: insertion is purely textual. It does not evaluate the function and it does not alter the history selection. 2.2.2 Argument fieldsArgument fields correspond to the function signature. Fields marked as required must be supplied. Optional and keyword parameters may be left empty to omit them. 2.2.4 SETF mode, templates, and pagesNCODE provides a template-driven mode for constructing structured values via SETF pages. This mode is used when the Function field is SETF and a template is selected. Rather than entering a single expression, the user fills a set of pages; NCODE then reconstructs a quoted value and evaluates a (setf …) form. Figure 3 SETF mode, templates and pages. SETF pages provide a UI method for building complex, repeatable list structures (collections of labelled items) without manual list syntax. This is particularly useful when the value is naturally expressed as multiple items that must be ordered. TemplatesA template defines: the number and organisation of pages, and the fields available on each page (key–value pairs). Selecting a different template changes the page layout and the meaning of the fields. The selected template and page contents are saved in the .omnc session and restored when reopened. Page navigation and editingNext page: creates a new item (page) and moves the view forward. Previous: moves to the preceding page without creating or removing items. Remove page: removes the current page (item). Empty pages are ignored when the final value is constructed. Field valuesFields accept numbers, strings, keywords, lists, and symbols. Symbols entered without a leading quote may be treated as variable references (for example, previously stored history variables). When a literal symbol is required, enter it as a quoted symbol. Constructed valueWhen evaluated, NCODE converts the populated pages into a single quoted form: if one page is populated, the value becomes a quoted single item; if multiple pages are populated, the value becomes a quoted list of items. NCODE then evaluates the corresponding (setf …) form, storing the result in the history like any other entry. ReproducibilitySETF pages are stored as structured page data in the session. When reloading a session or using Refresh All, NCODE reconstructs the same quoted value from the saved pages and re-establishes consistent bindings. 2.2.3 Evaluation and recordingEvaluate: evaluate the function with the current arguments without adding a history entry. Apply: evaluate the function and add (or update) the result in the history. If Name is empty, NCODE generates a name; the repeat selector determines how many evaluations are appended. Repeat selector: specifies how many history variables are created when using automatic naming. Code: insert the corresponding function call into the editor without evaluating it. Clear Editor: clear the editor contents. 2.3 Editor and argument editingThe editor serves as a log of inserted code and evaluation output. It also supports safe editing of complex arguments. When Edit is used, NCODE places the selected argument expression into the editor and switches into an argument-edit mode: the updated text can be applied back to the argument field, or cancelled to restore the previous state. 2.4 Display and contextual renderingNCODE provides type-specific rendering for stored variables. Rendering does not modify values; it presents the current binding using an appropriate view (notation, MIDI playback, graphs, or excerpts). Rendering is invoked from the contextual menu of the history table. The available renderers depend on the selected variable type; for OMN variables, common targets include notation views, MIDI playback, and live-coding, the menu may also provide a Multiple Voices renderer when the material is suitable for multi-voice presentation. 3. Def-Score paneThe Def-Score pane constructs a complete score definition by combining global defaults, layout definitions, and instrument assignments. It is typically used after generating one or more OMN variables in the main window. Figure 4 provides the reference layout. Figure 4. Def-Score pane with Defaults, Layout items, and Instrument items. 3.1 Defaults sectionThe Defaults section specifies score metadata and global settings. The score name is required; other fields provide title data and global musical parameters such as key signature, time signature, and tempo. Score name (required): the symbolic identifier of the score. Title fields: title, subtitle, composer, writer, and copyright. Def-Score defaults: key-signature, time-signature, tempo, and related engraving settings (e.g., accidentals and clef behaviour). Range fields: start and end delimiters where supported. 3.2 Layout items sectionLayout items define how instruments are organised into staves and groups. Each entry specifies a layout template and the instruments to which it applies, together with optional display names and abbreviations. Layout items list: shows the current layout entries; selection loads an entry for editing. layout: select a layout template (e.g., percussion layout). instrument: list of instruments associated with the selected layout entry. Add, Delete: create or remove entries. Up, Down: reorder entries to control staff order. 3.3 Instrument items sectionInstrument items bind musical material to instruments and set playback parameters. The OMN field is required and selects an OMN variable from the session history. Instrument items list: shows defined instruments; selection loads an entry for editing. instrument: the instrument identifier used throughout the score. omn (required): the OMN variable assigned to the instrument. MIDI settings: port, channel, sound set, and program. Performance controls: controllers, pan, and volume, where used. Add, Delete, Up, Down: manage the instrument list and its ordering. 3.4 Output actionsThe bottom row evaluates and renders the score using the chosen backend. Refresh All: refresh bindings by re-evaluating the session history prior to score compilation. Notation: compile and open a notation view. MIDI Player: compile and open a MIDI player view. Live Coding: compile and open a live-coding workflow for performance or iteration. Close Def-Score: return to the Function and Variables window. 4. Typical workflows4.1 Exploratory function studyA standard exploratory cycle proceeds as follows: If you are beginning a new exploration after recalling an existing history entry, use New to clear the fields and deselect the active variable before entering a fresh function call. Select a function in the Function field and supply required arguments. Select a function in the Function field and supply required arguments. Use Evaluate to inspect output without recording results. Use Apply to retain a result as a variable when it is musically useful. Recall stored variables by selecting them in the history table, then adjust parameters to study sensitivity. Use the history table’s contextual menu to audition or visualise results (e.g., notation, MIDI player, graphs, or live coding), depending on the variable type. 4.2 Building a score from OMN materialsScore construction typically begins with one or more OMN event variables: Generate OMN variables in the main window and confirm them via the history table’s contextual menu (notation and/or MIDI playback). Open the Def-Score pane using Define Score. Specify Defaults (score name, tempo, time signature, and any engraving settings). Define Layout items to organise the desired staff structure. Add Instrument items and assign each to an OMN variable via the omn selector. Select Notation or MIDI Player to compile and render the score. 4.3 Reproducibility and session refreshNCODE stores computations as a history of variable definitions. When reopening a session, or after editing earlier variables, later results may depend on updated bindings. The Refresh All command restores a consistent state by re-evaluating the history in order, ensuring that Def-Score compilation and display operate on current values. 4.4 Exporting and interoperabilityNCODE supports two complementary export paths: (i) exporting the variable history to an Opusmodus source file for code-centric workflows, and (ii) compiling a score through Def-Score for notation, MIDI playback, or live coding. In both cases, the session history provides a traceable provenance of generated materials. 5. Conventions and troubleshooting5.1 Required fields and evaluation failuresFields marked as required must be supplied. Missing required arguments prevent evaluation. Def-Score compilation requires that referenced OMN variables are currently bound; if the score fails to compile after reopening a session, use Refresh All in the main window before attempting output. If an argument expression is complex, use Edit to revise it in the editor and apply the update back to the argument field. 5.2 Naming and history managementUse the Name field when stable identifiers are required (for example, when multiple instruments refer to the same material). Use the history management dialogue to reorder or remove variables when curating a session for publication or teaching. The Edited filter supports rapid auditing of changes prior to saving or exporting.- Microtonality
Microtonality Microtonality in music refers to the use of intervals smaller than a semitone, which allows for a wider range of tonal colours and expressive possibilities beyond the traditional Western tuning system of twelve equal intervals per octave. By using microtones, composers and performers can explore a variety of new tonalities and create music that is more nuanced and rich in timbre. Microtonality has a long history in music, with examples found in various cultures and traditions around the world. For instance, many non-Western musical systems, such as those found in Middle Eastern, Indian, and African music, incorporate microtones as an integral part of their tuning and tonal systems. In Western music, microtonality has been used by composers throughout history, from the medieval and Renaissance periods to contemporary music. DescriptionOpusmodus microtonal system supports GM, MTS (MIDI Tuning Standard) and Pitch-Bend via Ports. MTS is a specification of precise musical pitch agreed to by the MIDI Manufacturers Association in the MIDI protocol. MTS allows for both a bulk tuning dump message, giving a tuning for each of 128 notes, and a tuning message for individual notes as they are played. GM (Internal sound)GM does not need any specific setup. (def-score mts-gm (:key-signature 'chromatic :tempo '(q 60) :time-signature '(4 4)) (inst :omn '(s c4 c4+. c4+ c4+.. cs4 cs4+. cs4+ cs4+.. d4 d4+. d4+ d4+.. eb4 eb4+. eb4+ eb4+.. e4) :channel 1 :sound 'gm :program 0)) Virtual Instrument with MTS supportVirtual Instrument requires 1 port only. (def-score mts-vi (:key-signature 'chromatic :tempo '(q 60) :time-signature '(4 4)) (inst :omn '(s c4 c4+. c4+ c4+.. cs4 cs4+. cs4+ cs4+.. d4 d4+. d4+ d4+.. eb4 eb4+. eb4+ eb4+.. e4) :port 0 :channel 1 :sound 'gm :program 0)) Virtual Instrument with Pitch-Bend instead of MTSQuarter-toneTo use Pitch-Bend instead of MTS would require at least 2 ports. In your DAW, you need to set up 2 ports for each channel. (def-score quarter-tone (:key-signature 'chromatic :tempo '(q 60) :time-signature '(4 4)) (inst :omn '(s c4 c4+ cs4 cs4+ d4 d4+ eb4 eb4+ e4) :port '(0 1) :channel 1 :sound 'gm :program 0)) Eighth-toneThe eighth-tone score requires at least 4 ports. In your DAW, you need to set up 4 ports for each channel. (def-score eighth-tone (:key-signature 'chromatic :tempo '(q 60) :time-signature '(4 4)) (inst :omn '(s c4 c4+. c4+ c4+.. cs4 cs4+. cs4+ cs4+.. d4 d4+. d4+ d4+.. eb4 eb4+. eb4+ eb4+.. e4) :port '(0 1 2 3) :channel 1 :sound 'gm :program 0)) Examples:Fragmente-Stille, An Diotima, Violin 1 (fragement, 1979-1980) '((-h reh+rehn-26 e b4-e4+ ppp ten+norm+arco - -q) (-q -e cs6+e6+ ten e6+b6- leg fs4+e5+ cs4 stacc+ten -) (-q z^q c5+e5+ s c4 ten -e. q fs5e6 ten+leg e e6+d7+ ten -) (-h e fs5+e6+ ten+stacc cs5+e5+cs6 ten+stacc cs5+ ten+stacc -) (-q -e c5c6-e6- ten fs6+e7+ leg e6bb6 leg cs5+ > leg c6e6 > e4+b4- > ten+stacc -) (e d5-e5+ pppp marc d5-e5+ marc -q bl-ll) (-e reh cs5+d5 sff mart+arco mf mart cs5+d5 mart -q) (-q -5q 5w cs6+e6+ mf<fff ponte+comma q ppp norm+fermata-vl 5q mf> mart > dbow p mart -5h fermata-vl))) Micropolyphony(micropolyphony 8 20 1/4 3 :intervals '(-2 -1 2 -.5 .5 1.5 -1.5 -.25 1.25 -1.25) :quantize '(1 2 4 5) :direction '((12 8) (8 12)) :direction-start '(a d a d a a d a) :start '(c4 c4+ fs3 as2+ b3+ b3 e3+ c3) :index 'v ) (setf sop1 (ambitus 'soprano v1) sop2 (ambitus 'soprano v2) alto1 (ambitus 'alto v3) alto2 (ambitus 'alto v4) tenor1 (ambitus 'tenor v5) tenor2 (ambitus 'tenor v6) bass1 (ambitus 'bass v7) bass2 (ambitus 'bass v8) ) (def-score micro2 (:key-signature 'chromatic :time-signature '(4 4) :tempo 54 :accidentals :all :layout (choir-satb-layout (list 'sop1 'sop2) (list 'alto1 'alto2) (list 'tenor1 'tenor2) (list 'bass1 'bass2)) :start 1 :end 32) (sop1 :omn sop1 :channel 1 :sound 'gm :program 'Choir-Aahs) (sop2 :omn sop2 :channel 2) (alto1 :omn alto1 :channel 3) (alto2 :omn alto2 :channel 4) (tenor1 :omn tenor1 :channel 5) (tenor2 :omn tenor2 :channel 6) (bass1 :omn bass1 :channel 7) (bass2 :omn bass2 :channel 8) ) micropolyphony.mp4- System Functions
System Functions The first icon on the left brings up all the ‘help’ guidance about the System Functions that form the vocabulary of the scripting language of Opusmodus. To find our way around the many hundreds of words in this dictionary of functions there is a contextual menu: to find, learn about and see / hear examples of what might be useful. By scrolling up and down the list, you will notice that it is organised into groups of functions of similar types. You can see the hierarchy of this organisation, and quickly locate the types of function you require via a contextual menu accessed by right-clicking on the Utilities panel. Opusmodus System FunctionsAmbitus ambitus, ambitus-chord, ambitus-field, ambitus-filter, ambitus-instrument, ambitus-integer, ambitus-interval, ambitus-octaves, ambitus-rhythmic-unison, ambitus-scale, gen-ambitus-series, get-ambitus Analysis/Monophonic cadence-analysis, density-analysis, element-analysis, expressive-analysis, form-analysis, harmony-analysis, melodic-analysis, monophonic-analysis, pcs-analysis, phrase-analysis, recurring-analysis, rhythmic-analysis, statistic-analysis, texture-analysis, twelve-tone-analysis, variant-analysis Audio audio-metadata, audio-player, make-mix, make-mix-segments, play-mix, resample-to-rect Binary Tools/Conversion binary-to-attribute, binary-to-length, binary-to-section, length-to-binary, make-binary, section-to-binary Binary Tools/Generation cellular-automaton, gen-binary, gen-binary-ambitus, gen-binary-anacrusis, gen-binary-change, gen-binary-euclidean, gen-binary-interval, gen-binary-length, gen-binary-remove, gen-binary-rnd, gen-binary-row, gen-binary-series, gen-binary-sync Binary Tools/Mapping binary-list-map, binary-map, binary-section-map, binary-voice-map Binary Tools/Processing binary-layer, binary-position, binary-quantize, binary-variant Binary Tools/Rhythm binary-rhythm, euclidean-rhythm, gen-euclidean-omn, gen-rnd-omn CL Collider def-sc-score, omn-to-sc CLM/Additive Synthesis and Waveshaping badd, bigbird, bigbird2, bird, brighten, complete-add, drone, hammondoid, lbj-piano, pqw, pqw-vox CLM/Analysis autoc, get-spectrum, rmsenv, scentroid, spec-an, track-rms CLM/Filters and FFTS add-noise-filtered, addflts, anoi, cnv, cnvo, cnvrev, convins, cross-synthesis, filter-noise, filter-noise2, filter-sound, graphEq, inside-out, maxfilter, pins, pvoc, resflt, zc, zn CLM/Frequency Modulation canter, cellon, fm, fm-bass, fm-bell, fm-drum, fm-insect, fm-noise, fm-trumpet, fm-violin, fm-voice, gong, metal, mlb-voice, pm-pulse, reson, rhodey, tubebell, vox, vslf, vsum, wurley CLM/Granular Synthesis expandn, expfil, expsnd, expsrc, expsrc1, grain-simp-sound, gran-synth, grani, granular, granulate-sound, grev, interleave-files, sndwarp CLM/Other circular-scanned, fofins, formant-noise, rotates, rotates-file, scanned, shepard, simp, stochastic, vowel CLM/Physical Modelling bandedwg, big-maraca, bow, bow2, brass, clarinet, flute, maraca, pluck, plucky, pno, singbowl, singer, stereo-flute, waveguide-flute CLM/Regression arith, arith1, arith2, btest, tnot CLM/Reverberation freeverb, jc-reverb, jc-reverbf, jl-reverb, kiprev, nrev, rev2 CLM/Sound Processing add-sound, backandforth, cross-fade, dissolve-fade, fullmix, move, one-cut, ring-modulate-file, zipper CLM/Utilities definstrument, load-clm-ins, make-synth, map-to-freq, omn-to-synth, play, stop-sound, with-sound Common Lisp/Arrays and Vectors aref, make-array Common Lisp/Control Flow apply, cond, dolist, dotimes, funcall, go, if, loop, mapcar, maplist, prog, progn, return, when Common Lisp/Definitions defmacro, defparameter, defun, defvar, lambda, let, setf Common Lisp/List Operations append, butlast, cadr, car, cdr, cons, last, list, nth, nthcdr, pop, push, set-difference Common Lisp/Number Operations abs, decf, evenp, incf, max, min, minusp, numbers, oddp, plusp Common Lisp/Pathnames and Files load, merge-pathnames Common Lisp/Predicates atom, equal, integerp, listp, nil, null, numberp, ratiop, symbolp, t Common Lisp/Sequence Operations count, length, nreverse, position, remove, remove-duplicates, subseq, substitute Conversions/Numeric and Signal binary-to-decimal, complex-to-real, db-to-linear, decimal-to-binary, degree-to-radian, hertz-to-radian, linear-to-db, pan, radian-to-degree, radian-to-hertz, real-to-complex Conversions/Pitch and Frequency hertz-to-integer, hertz-to-interval, hertz-to-midi, hertz-to-pitch, integer-to-hertz, integer-to-interval, integer-to-midi, integer-to-pitch, interval-to-hertz, interval-to-integer, interval-to-midi, interval-to-pitch, midi-to-hertz, midi-to-integer, midi-to-interval, midi-to-pitch, pitch-to-hertz, pitch-to-integer, pitch-to-interval, pitch-to-midi, pitch-to-velocity Conversions/Time and Ratio bar-to-sec, float-to-ratio, msec-to-ratio, ratio-to-float, ratio-to-msec, ratio-to-sec, ratio-to-tick, sec-to-ratio, tick-to-ratio Conversions/Tuning cent-to-attribute, cent-to-ratio, cent-to-tuning, ratio-to-cent, tuning-to-cent Counterpoint/Assembly and Extraction assemble-voices, cp-instrument, cp-tempo, dictum-tempo Counterpoint/Core counterpoint, gen-dictum, make-dictum Envelopes envelope-concatenate, envelope-decrease, envelope-divide, envelope-exp, envelope-increase, envelope-interp, envelope-length, envelope-max, envelope-multiply, envelope-reflect, envelope-repeat, envelope-reverse, envelope-samples, envelope-simplify, envelope-x, envelope-y, make-xy, max-envelope, min-envelope, normalize-envelope, nth-xy, scale-envelope, stretch-envelope, window-envelope, x-norm Filters/Generation gen-filter-ambitus, gen-filter-anacrusis, gen-filter-change, gen-filter-euclidean, gen-filter-remove, gen-filter-rnd Filters/Processing filter-anacrusis, filter-change, filter-chromatic, filter-exclude, filter-first, filter-last, filter-preserve, filter-remove, filter-repeat, filter-tie Find find-above, find-below, find-between, find-closest, find-complement, find-even, find-everyother, find-max, find-min, find-odd, find-sum, find-unique Generation/Curves and Transitions gen-curve, gen-direction-series, gen-steps, gen-transition Generation/Fractals gen-mandelbrot Generation/Iteration and Repetition gen-loop, gen-repeat, gen-repeat-seq Generation/Pitch and Scale Series gen-pitch-series, make-scale Generation/Rubin Series gen-rubin, gen-rubin-series, gen-rubin-velocity, gen-rubin-velocity-series Generation/Symmetry and Mirrors gen-multisymmetrical, gen-symmetrical, paraller-symmetry, pattern-mirror-symmetry, symmetric-series Generation/Transformation and Reordering gen-hocket, gen-palindrome, gen-process, gen-retrograde, gen-rotate, gen-surround, gen-swallow, gen-transform, time-swallow Generation/Trimming and Sum Control gen-trim, gen-trim-sum, trim-with-last Graph Tools circle-pitch-plot, circle-rhythm-plot, element-plot, events-plot, length-pitch-plot, length-plot, list-plot, omn-plot, pitch-plot, spectral-plot, velocity-plot, xy-plot Integers/Integer Generation gen-accumulate, gen-integer, gen-integer-seq, gen-integer-step Integers/Percent Operations percent, percent-amount Integers/Transformations integer-invert, integer-normalize, integer-variant Integers/Transposition integer-transpose, integer-transpose-start Intervals/All-Interval Rows air, air-group, rnd-air Intervals/Analysis Tools interval-class Intervals/Directional Series interval-direction-series, interval-direction-series-rnd Intervals/Interval Generation interval-expansion-series, interval-randomize, interval-repeat, interval-series Intervals/Interval Mapping add-interval, add-interval-omn, interval-map Intervals/Interval Modification interval-ambitus, interval-insert, interval-modus Intervals/Scaling interval-scale, interval-scale2 Intervals/Transformations interval-invert, interval-row-invert, interval-row-matrix, interval-row-transpose, interval-row-variant, interval-transpose-series, interval-variant L-System length-lsystem, pitch-lsystem, rewrite-lsystem Lengths/Alignment length-adjust, length-align, length-fit, length-trim Lengths/Generation gen-length, gen-length-cartesian, gen-length-constant, gen-length-density, gen-tuplet, ql Lengths/Mapping length-delta-map Lengths/Rhythm polygon-rhythm, rhythm-series, rhythmic-level, unify-rhythms Lengths/Tempo and Time length-to-tempo, time-point-system Lengths/Transformations length-augmentation, length-diminution, length-divide, length-legato, length-modify, length-rational-quantize, length-rest-series, length-staccato, length-subdivision, length-syncopate, length-to-rest, length-weight Lengths/Utilities length-merge, length-note-merge, length-note-position, length-note-unique, length-rest-merge, length-rest-position, length-rest-unique Lengths/Variants length-expansion-variant, length-invert, length-rest-invert, length-retrograde Libraries/Attributes add-program-attributes, add-text-attributes Libraries/Instrument Sets def-instrument-set, get-instrument-set, get-instrument-set-group, get-instrument-set-groups, instrument-set-names, ps Libraries/Library Management append-library, create-library, def-library, library Libraries/Sound Sets def-sound-set, get-sound-set-controller, get-sound-set-controller-group, get-sound-set-controller-groups, get-sound-set-program, get-sound-set-program-group, get-sound-set-program-groups, sound-set-names Libraries/Unfold Sets def-unfold-set, get-unfold-set, get-unfold-set-group, get-unfold-set-groups, unfold, unfold-set-names Mapping/Interleave interleave-map Mapping/Lengths length-chordize-map, length-map Mapping/Patterns passing-intervals, pattern-map Mapping/Pitch and Rhythm octave-map, read-map, replace-pitch-map, rhythm-map Mapping/Substitution def-case, replace-map, substitute-map Mapping/Vector reorder-map, vector-map Mathematical Tools/Arithmetic a-divide-x, a-times-x, a-times-x-plus-b, a-times-x-plus-y, x-minus-b, x-minus-y, x-plus-b, x-plus-y, x-times-y Mathematical Tools/Interpolation segment-interpolation Mathematical Tools/Scaling and Distribution scale-numbers, sum-to-size Mathematical Tools/Sequence Analysis add-sequences, autocorrelation, consecutive-direction, cumulative-sums, difference, multiply-sequences Mathematical Tools/Special Functions digamma, factorial, log-of-gamma, trigamma Meter and Time Signature get-time-signature, key-signature-length, modify-time-signature, omn-to-measure, omn-to-time-signature, time-signature-length MIDI/Controllers gen-controller, gen-dynamic-controller, gen-time-controller MIDI/External Programs midi-to-editor MIDI/Import midi-to-omn, midi-to-score MIDI/Microtonality Microtonality MIDI/MIDI Entry MIDI-Entry MIDI/Utilities collect-instrument-controllers, collect-score-instruments, show-midi-events MusicXML musicxml-metadata, musicxml-to-editor, musicxml-to-omn, musicxml-to-score Number Theory/Arrays and Spirals archimedes-spiral, logarithmic-spiral, magic-square, spiral-array, ulam-spiral-array, zigzag-array Number Theory/Powers and Geometry power-of-two, pythagorean-triples, square, sum-of-squares Number Theory/Primes and Factors factor, goldbach, primes, primes-to Number Theory/Sequences collatz-sequence, fibonacci, happy-numbers, pascal-triangle OM Developer/Attributes disjoin-attributes, join-attributes OM Developer/Number Operations abs!, neg! OM Developer/Predicates ac-hexachordp, attribute-symbolp, chordp, contain-attributep, event-restp, length-notep, length-restp, lengthp, omn-formp, pattern-matchp, pitchp, twelve-tone-segmentp, twelve-tonep, velocityp OM Developer/Random choose-option, random-om, rnd-seed OM Developer/Sequence Operations ambitus-form, maybe-omn-decode, maybe-section, reconstruct-omn OMN/Attributes attribute-map, attribute-position, attribute-series, merge-attributes, remove-attribute, repeat-attribute OMN/Create and Disassemble disassemble-omn, get-articulation, make-omn, omn OMN/Events dictum, edit-events, events-analysis, filter-events, get-beats, get-events, nth-event, omn-butlast-event, omn-last-event, rnd-beat-order, single-events OMN/Reduction and Variation block-chord-reduce, piano-reduction, voice-variant OMN/Replacement and Rewriting omn-replace, rewrite-accidentals OMN/Voice and Tie Processing dissolve-voices, merge-voices, omn-merge-ties, tie-bars OSC create-osc-thread, end-all-osc-threads, end-osc-thread, gen-osc-data, get-osc-thread-from-name, osc-thread-alivep, send-osc-data Per Norgaard check-tone-lakes-symmetry, gen-lake-size, infinity-series, lake-everyother, lake-start-position, tone-lakes Permutations/Combinatorics cartesian, combination, combination2, permute, permute-n, power-set Permutations/Musical Models messiaen-permutation, strawinski-rotation Pitch Class Set/Forms and Vectors directed-interval-vector, interval-vector, pcs-normal-order, pcs-prime-form Pitch Class Set/Reference get-pcs, pcs, pcs-cardinal Pitch Class Set/Relations pcs-sub-relation, pcs-sub-sets, pcs-subcomplex, pcs-super-sets Pitch Class Set/Rhythm pcs-rhythm Pitch Class Set/Transformations pcs-complement, pcs-invert, pcs-transpose Pitches/Chords chord-derive, chord-dictum, chord-dissolve, chord-inner-remove, chord-interval-add, chord-interval-remove, chord-interval-replace, chord-inversion, chord-parallel-invert, chord-pitch-unique, chord-progression, chord-symbols, chord-variation, chordize, chordize-list, create-chord, dechord, drop-voicing, expand-chord, expand-chord-name, gen-chord-dictum, make-chord-dictum, split-chord, spread-chord Pitches/Generation gen-chord, gen-chord-series, gen-chord2, gen-chord3, gen-cluster Pitches/Hexachords get-ac-hexachord, get-ac-hexachord-complement-form-set, get-hexachord-complement Pitches/Inversion pitch-invert, pitch-invert-start Pitches/Mapping melodize-to-length, pitch-replace-to-length, pitch-variation-to-length Pitches/Mixing pitch-demix, pitch-fragment, pitch-mix Pitches/Octaves rnd-octave, rnd-octaves Pitches/Ornamentation pitch-figurate, pitch-ornament Pitches/Processing bind-to-interval, bodeshifter, pitch-direction-series, pitch-expansion-series, pitch-melodize, pitch-progression, pitch-row, pitch-stretch Pitches/Randomization rnd-chord-pitch-order Pitches/Repetition pitch-repeat, pitch-repeat2, pitch-repeat3, pitch-repeat4 Pitches/Respell quarter-tone-closest, respell Pitches/Transposition pitch-transpose, pitch-transpose-n, pitch-transpose-rnd, pitch-transpose-series, pitch-transpose-start Pitches/Variants event-variant, pitch-rotate, pitch-segment-variant, pitch-variant, pitch-variation Pitches/Voice Leading closest-path, comparative-closest-path, relative-closest-path Position position-filter, position-insert, position-item, position-remove, position-replace, position-swap Probability/Brownian Motion brownian-motion-sample, gen-brownian-motion Probability/Distributions beta-distribution, bilateral-exponential, cauchy-distribution, chi-square-distribution, gamma-distribution, gaussian-distribution, gen-ar-time-series, gen-ma-time-series, gen-poisson, normal-distribution, poisson-distribution, poisson-pmf, standard-deviation-series, uniform-distribution, weibull-distribution Probability/Genetic Processes gen-crossover, gen-genome-population, gen-mutate, gen-mutate-population, gen-mutate-variants, gen-population, gen-reproduce Probability/Markov gen-markov, gen-markov-from-transitions, gen-markov-transitions Probability/Noise gen-gaussian-noise, gen-noise, gen-pink-noise, pink-noise-sample Probability/Probability and Weighting gen-prob, gen-weight, normal-prob, prob-map, prob-pick, probp, weight-pick Probability/Tendency gen-deviation, gen-envelope-tendency, gen-tendency, rnd-envelope-tendency Probability/Tree Structures arborescence, collect-tree-nodes, collect-tree-paths, gen-tree-nodes, gen-tree-paths Probability/Walk gen-walk Quantization micro-intervals, micro-quantize, quantize Randomization/Controlled Transformation rnd-melodize, rnd-replace, rnd-rest Randomization/Sampling and Ordering rnd-order, rnd-pick, rnd-sample, rnd-sample-seq, rnd-unique Randomization/Seed and Values init-seed, rnd-centered, rnd-offset, rnd-variance, rndn Randomization/Sum Constraints rnd-sum, rnd-sum-to-size Schillinger Interference/Axis and Melodic Plots axis-plot, axis-sub-plot Schillinger Interference/Distributive Expansion distributive-cube, distributive-square Schillinger Interference/Rhythmic Interference interference-series, interference-square, interference2, interference3 Score/Layout layout, layout-presets Score/Live Coding live-coding-midi Score/MIDI display-midi, midi-destinations Score/Notation display-musicxml Score/Score Definition compile-score, def-score Score/Stream Processing collect-stream, distribute-stream, replace-stream Sieve gen-sieve, gen-sieve-tree, sieve, sieve-merge, sieve-tree, sieve-tree-series Snippet snippet, snippet-to-editor Sort gen-sort, sort-asc, sort-count-asc, sort-count-desc, sort-desc, sort-series Span fit-to-span, get-max-span, get-min-span, get-span, length-span, span, time-map Spectral Tools/FFT ffth, fftw, gen-window Spectral Tools/Modulation ring-modulation Spectral Tools/Partials get-highest-partial, get-lowest-partial, normalize-partial, partial, partial-divide, partial-row, remove-partial, sort-partial Spectral Tools/SPEAR Data Import spear-data-to-library Spectral Tools/Spectral spectral, spectral-analysis, spectral-quantize, spectral-to-omn Spectral Tools/Tuning get-tuning Structure/Assemble assemble-map, assemble-section, assemble-seq, assemble-subseq Structure/Bars find-bar, insert-bar, remove-bar, replace-bar, retain-bar, select-measure, split-lengths Structure/Choralis choralis, gen-choralis Structure/Density density, filter-density, quantum Structure/Mixing gen-collect, gen-combine, gen-divide, gen-fragment, gen-group, gen-interleave, gen-mix, gen-morph, gen-unison, morph Structure/Pause gen-pause, pause-series Structure/Polyphony micropolyphony, polyphony Structure/Timeline do-section, do-timeline, do-timeline2, section-to-timeline, timeline-to-section Structure/Tonnetz tonnetz, tonnetz-analysis, tonnetz-structure Tempo gen-tempo, make-tempo, tempo-length Text & Lyrics count-lyrics, make-alphabet, make-lyrics, text-map, text-to-letters Tonality/Diatonic diatonic-chord, make-diatonic-chord-attribute Tonality/Harmonic get-harmonic-path, harmonic-dist, harmonic-path, harmonic-progression, harmonics, subharmonics Tonality/Identification find-chord, find-root, find-scale Tonality/Scales chromatic-scale Tonality/Tonality Mapping create-tonality, expand-tonality, tonality-library, tonality-map, tonality-series Twelve-Tone/Klangreihen klangreihen Twelve-Tone/Row Combinations and Rotations interpolation, rosette, row-group-combination, row-group-modification, row-group-rotation, row-group-rotation-combination, row-group-rotation6+6, row-rotation Twelve-Tone/Row Transformations modus, row-invert, row-matrix, row-transpose, row-variant, row-variant-segment Twelve-Tone/Rows and Forms get-form-set, rnd-form-set, rnd-row, twelve-tone-filter, twelve-tone-matrix Twelve-Tone/Tropes gen-trope, trope-analysis, trope-hexachord, trope-intervals Utilities/Assignment assign-variable, bind-index, create-assignment Utilities/Counting count-item, count-repeat, get-chord-size, get-count Utilities/External Tools load-instrument Utilities/File Operations get-file-path, load-system-file, open-file, system-file, workspace-file Utilities/Flatten flatten, flatten-omn, mcflatten Utilities/Function Search function-property-values, function-search Utilities/List Operations 1-to-100, decode-seq, encode-seq, matrix-transpose, mclength, mclist, remove-series Utilities/Metronome metronome Utilities/Misc apply-eval, gi, make-alias, rp Utilities/Pretty Print pprint-instrument, pprint-last-score Vectors/Arrays build-array, get-array Vectors/Conversions array-to-list, array-to-vector, list-to-array, list-to-vector, vector-to-length, vector-to-list, vector-to-pitch, vector-to-section, vector-to-velocity Vectors/Processing vector-add, vector-append, vector-multiply, vector-offset, vector-scale, vector-smooth, vector-to-envelope, vector-to-envelope2 Velocity gen-accent, gen-cresc, gen-cresc-dim, gen-dim, gen-dim-cresc, gen-dynamic, get-velocity, velocity-invert, velocity-retrograde, velocity-to-dynamic, velocity-variant Waves/Additive add-additive-waves, gen-additive, half-additive, mod-additive-waves Waves/Chebyshev gen-chebyshev, half-chebyshev Waves/Cosine gen-cosine, half-cosine Waves/Fourier gen-fourier Waves/Phase Modulation gen-phase-mod, half-phase-mod Waves/Pulse add-pulse-waves, gen-pulse, half-pulse, mod-pulse-waves Waves/Ramp gen-ramp, scale-ramp Waves/Sawtooth add-sawtooth-waves, gen-sawtooth, half-sawtooth, mod-sawtooth-waves Waves/Sigmoid gen-sigmoid Waves/Sine add-sine-waves, gen-sine, half-sine, mod-sine-waves Waves/Square add-square-waves, gen-square, half-square, mod-square-waves Waves/Triangle add-triangle-waves, gen-triangle, half-triangle, mod-triangle-waves Waves/Wavetable gen-wavetable, half-wavetable- OMN Language
OMN Language IntroductionOMN is designed as a scripting language for musical events. It’s not about sounds themselves, it is about their control and organisation in a musical composition. As a linear script rather than a graphic stave, musical events can be transformed, extended, reorganised by powerful computer algorithms. Some sequencers and score writers provide basic algorithms, but they do not represent the way composers now think about the process of music composition. Composing has become such a multi-faceted process and takes ideas about structure and content from many disciplines: mathematics, astronomy, literature, the visual arts. As such it requires extensive mental resources and experience from the composer. Much of this is still done by hand and eye and brain because although computer systems do exist to help the process along they don’t provide what has become known as the composing continuum. This means that a single workspace and workflow environment has not been generally available that can take in the whole process of composing a piece - from first thoughts to a printed score and reference recording. Wouldn’t it be good to be able to do everything in one place? Most composers acquire a bag full of musical tools to act on musical ideas. These still include those tools Bach used for repetition, inversion, retrograde, transposition, but with computer help musical material can be copied, cut, pasted and generally structured and orchestrated. Since the 1950s composers have been experimenting with tools and processes that take musical transformation into wholly new areas; of random numbers, fractals, statistical distribution, graphical plotting to name just a few. To use such experimental things it is composing with a script that is acknowledged as the most efficient and practical way forward. And to work with a script means working with a language: OMN. OMN and Musical NotationThe truly original aspect of OMN is that it has been designed to speak directly to traditional musical notation. Everything written in OMN script can be rendered instantly to notation and to a performance simulation. For most composers staff notation remains the common currency they have to work in and with. You couldn’t expect performers to read from a MIDI event display or indeed from OMN script. As the OMN language is laid out and explored we’ll see just how fully the language of music staff notation is mirrored. This is not just in the standard elements of rhythms, pitch and dynamics but in the vast library of musical attributes that cover the way pitches and rhythms are performed by different instruments and voices. So musical notation is always there. Whatever you write there can be an instant ’snippet’ rendered to view alongside your script. OMN: the conceptMost languages have developed orderings for parts of speech. Romance languages place the verb after the subject, and in the middle of the sentence. Germanic languages tend to conclude sentences with a verb. In music we’re used to the single intersection of pitch position on a stave line with a rhythmic symbol with or without a stem. In developing a right concept for the OMN language much thought was given to choosing the most effective ordering of elements. Culturally our music is one governed by our past experiences, elements of musical tradition gathered through informal and formal musical education, and what is active in the memory. Descartes adage "Cogito ergo sum" ("I think, therefore I am") remains an important cornerstone of an individual’s relationship with composing music. It is something known. It is a made thing; it possess architecture. We can say with confidence that we experience music in a hierarchical sequence of time, existence, dynamics and expression. So it is right that the linear ordering of OMN reflects this. In architecture this might be translated as dimension, materials, volume of space, decoration. These are established architectural parametrics able to form the basis for CAD rendering in the new parametric systems architects are now using to allow the conditions surrounding to influence design. OMN is a language wholly sympathetic to parametric composition in music. OMN: The Four ElementslengthOMN was created to think about the element of TIME first. After all we can be musical without a pitched note being present. If we are going to use the OMN script we need a reference guide to help us whilst we learn the language. What accompanies this introduction is a special dictionary of language terms arranged in the four elements that make up the concept. However, there are some necessary redefinitions required. TIME is a very general element that subdivides in music to rhythm and length. When we describe what makes up a rhythm in notation it is usually a mixture of symbols that have different lengths. So the OMN vocabulary uses the term LENGTH as its general title. (q) pitchThe second element of the OMN language is PITCH Although each piece of music is defined by the length of time, it only starts to EXIST as a proper musical entity when pitch is added. (q c4) velocityThe third element of the OMN language is VELOCITY. Staff notation has a set of common symbols that are formed from the first letter of Italian words for degrees of intensity we want to attach to a note or a phrase. In OMN there are 12 such terms ranging from ppppp to fffff. OMN includes many symbols that can only be classed as Dynamics because they are not identified directly with a data value. (q c4 mp) articulationThe fourth element of the OMN language is ARTICULATION (attribute). The number of general symbols and words used to describe expression in music is vast: tenuto, staccato, legato, trill, fermata etc... Many instruments, particularly those of the string family have their own vocabulary of technical expressive terms: pizzicato, sul ponticello, flautando. Remarkably these can be included in an OMN script and, if your sampler has a string effects library, these expressive instructions can be realised directly. (q c4 mp trem) Finally, there is SIMULTANEITY possible in the layering of attributes. This is achieved by the + symbol. (q c4 mp trem+fermata) An important fifth element of REPETITION is also present in the OMN language structure. (q c4 =) Assemble and DisassembleIt is valuable to remember that the composer may need to create material one parameter at a time. OMN allows for discrete parameters to be brought together to make a composite list in OMN. By the same token it may also be necessary to focus on just a single parameter to develop further the argument of a composition. An OMN list can easily be disassembled into its component parts for such work to take place and then made back into an OMN list. (disassemble-omn '(q c4 mp d4 e4 e f4 f g4)) => (:length (1/4 1/4 1/4 1/8 1/8) :pitch (c4 d4 e4 f4 g4) :velocity (mp mp mp f f) :articulation (- - - - -)) (make-omn :length '(q q q e e) :pitch '(c4 d4 e4 f4 g4) :velocity '(mp mp mp f f)) => (q c4 mp d4 e4 e f4 f g4) FunctionsOMN script responds directly to the Opusmodus library of algorithmic functions, and with keywords particular elements can be selected to be processed or not. (rnd-order '(q c4 mp d4 e4 e f4 f g4)) OMN: the way forwardThis introduction should set you on your way. With what has been covered here, the Stages Tutorial files will demonstrate how closely the OMN language can be integrated with algorithmic composing. In fact, when composing in this way you’ll often only write material in one parameter at a time. Although every function will read an OMN list, it’s often better to keep parameters apart to begin with. You’ll see this clearly in the Tutorial files. There will be some music projects where writing directly in OMN is really necessary. Composing for voice is certainly one medium. There are examples in the How To section to demonstrate word setting with full attention given to syllabic splitting. For more experimental approaches to composing OMN can be integrated with the conversion of integers and intervals into the parameter of pitch. The Stages Tutorials show how this can be achieved with examples that use pitch-class sets to create tone rows. OMN is a way of scripting the whole language of traditional staff notation and modes of experimental and conceptual composition using the tools of parametric modelling. It is a language that responds to the future of music presentation, as notation moves inextricably from the printed page to the backlit digital display. New music technology has focused largely on production and presentation, whereas the conceptualisation and origination of new music requires a very different paradigm. Sequencer and Scorewriters continue to provide valuable ways into composition. Opusmodus provides the 3rd way forward, and one driven by its own notation script: OMN. OMN is perfect for those ‘on the fly’ experiments that all composers make when they are starting out on a project. It is like having a piano close by to try out this or that, but one that always plays what’s written quite flawlessly. What is wonderful about scripting is that those experiments if successful can remain part of the score for the whole progress of the composition. With OMN a composing continuum can be achieved. OMN may look a little hard to decipher at first, but once the logic is understood, be assured, OMN can be read with ease. OMN is the first notation that has been designed from the outset to communicate with MusicXML the de facto standard for communication of notated scores between different software applications. Opusmodus scripts can be converted seamlessly into both Midi and MusicXML. The Four Elements in Detail1. LengthsThe OMN language provides for a textual equivalent to the many symbols used in traditional staff notation. In the parameter of LENGTH these symbols represent exact durations of virtual time. Here are the standard values of note-lengths. The most commonly-used are represented in the OMN language by the first letter of their American arithmetic name, so w is a whole-note, h is a half-note, q is a quarter note and so on. Here are the standard values of rest-lengths.The most commonly-used are represented in the OMN language by the first letter of their American arithmetic name but with the prefix of a - (minus) sign, so -w is a whole-note rest, -h is a half-note rest, -q is a quarter note rest and so on. To assist with multiple rests -12 will produce 12 bars of whole-note rests. '(q q q) Here is a list of three quarter-notes. The list has to begin with a '(a quote) and be enclosed by parentheses ( ). '(q -e e q) The example above shows note-lengths and rest-lengths in combination. Length 8 will produce 8 bars of whole-notes lengths. '(8 h q q) Length -8 will produce 8 bars of whole-notes rests. '(-8 h q q) Dotted length Symbol . .. ... OMN dots are used the same way as in the standard notation. The maximum dots in OMN length is 3: (q...) Tuplet The OMN system of rhythmical notation is initially constructed on the principle of duple divisions. Here the individual note-lengths stand for their face value: w = (h h) h = (q q) q = (e e) and so on. The other divisional types must make do by borrowing from this binary series: duplet (2), triplet (3), quadruplet (4), quintuplet (5), sextuplet (6), septuplet (7), octuplet (8), nontuplet (9) etc... When we write these values we use the same note-values as the immediately preceding binary division. '((3w 3w 3w) (3h 3h 3h) (3q 3q 3q)) This means for example that a triplet division of the quarter note uses eighth notes. '((5w = = = =) (5h = = = =) (5q = = = =)) This means for example that a quintuplet division of the quarter note uses sixteenth notes. Repeat Note: = Pause: - '((e. s q =) (e. s q =)) The use of repeat symbols for note-lengths and rest-lengths is fundamental to OMN. Its use can give score scripts a very particular style and appearance. Composers will soon discover different approaches will suit particular situations when writing for percussion or in the notation of repetitive textures. '((q -e = q) (q - e. t =)) If a note-length repeat symbol follows a rest-length a note-length is given: '(s e - s - e. -s e s -e) The use of the rest-length repeat can bring clarity to the visual layout of a phrase. Compound length Length composed of two or more separate length elements: '(qs s e h) '(hqs -s qe) Tie Symbol: _ (underscore) Attribute: tie (omn form) OMN has two types of ties. The first one is a tie length symbol _ and the second one is the attribute tie. '((h_e e q) (q_3q 3q 3q -h)) The tie symbol is used when a tie is necessary in the middle of a list: '((h_e c4 e_q tie) (q_3q c4 3q 3q_h)) The tie as an attribute is necessary when a tie goes across one list to join a length symbol in an adjacent list. Extended length Note: == Rest: -- '(s == -- = - === - == = —) Both note-lengths and rest-lengths can be extended simply by bringing the symbols together in the same way pitches come together to produce chords. In percussion writing this can provide further clarity because only one length value needs to be set at the beginning of the list. '(3q == -e = s - = - == —) Extended periodic lengths '(s== = = = = =) '(5q== = = 7q=== = ==) '(5q== - = 7q=== = - =) Ratios OMN notation allows the use of ratio values if more convenient: '((q = e = h) (q - e. t =)) same as: '((1/4 1/4 1/8 1/8 1/2) (1/4 -1/4 3/16 1/32 1/32)) Many functions automatically output ratios as a default rather than OMN symbols. This can usually be changed by setting a keyword within the function such as :omn t. The tie mechanism in both its forms works with ratios. '((q_e e q) (q -3q = = h)) same as: '((1/4_1/8 1/8 1/4) (1/4 -1/12 1/12 1/12 1/2)) 2. PitchesIn OMN a pitch is written as a text symbol that combines a note’s lower-case letter name with its octave number. OMN uses the convention that c4 is "middle c" , so numbered because of the note's position as the fourth C key on a standard 88-key piano keyboard. In fact the composer can go a little beyond the standard keyboard range because OMN takes in the MIDI range of 0 - 127 pitches. '(c4 cs4 d4 ds4 e4 f4 fs4 g4 gs4 a4 as4 b4) In an ascending chromatic scale the convention is to notate the chromatic pitches in sharps. '(cs4 ds4 es4 fs4 gs4 as4 bs4) The sharp is written as an s symbol preceded by the letter of the diatonic pitch and then the octave number, thus cs4. '(cb4 db4 eb4 fb4 gb4 ab4 bb4) The flat is written as an b symbol preceded by the letter of the diatonic pitch and then the octave number, thus db4. '(c4 d4 e4 f4 g4 a4 b4) In a diatonic C major scale where no chromatic notes exist the letter name and the octave number suffice. When transpositions are made using an algorithmic function the note spelling will often mix sharps and flats to seek the best compromise. 12 Tone Row '(eb4 b4 g4 cs4 c4 fs4 e4 bb4 a4 f4 ab4 d4) In a 12 Tone Row sharp and flat spellings are common. In OMN they can be freely mixed to enable intervallic analysis to be undertaken. Opusmodus can make conversions to and from interval sets. (pitch-to-interval '(eb4 b4 g4 cs4 c4 fs4 e4 bb4 a4 f4 ab4 d4)) => (8 -4 -6 -1 6 -2 6 -1 -4 3 -6) '(c4 e4 g4 cs4 a4 b4 f4 ds4 d4 fs4 gs4 as4) This row is taken from Schoenberg’s "Three Satires" for mixed chorus. The song is directed at those exploiting tonal and atonal principles alike without being aware of origins or consequences. The text of the song "Am Scheideweg" corresponds to a C-major triad which is worked into this twelve-tone row and the row’s chromatic spelling is chosen to make the vocal pitching of intervals easier. Chords To create a chord, individual pitches are brought together as a single entity. '(q c4e4g4 e4g4c5 g4c5e5 c4e4a4 e4a4c5 a4c5e5) The ordering of pitches within a chord grouping does not have to reflect ascending or descending patterns to be displayed correctly in notation. This means algorithmic constructions of chords can be freely undertaken. '(q g2d3g3b3 a2c3fs3a3 b2d3g3) As with individual pitches, chords adopt sharp or flat spellings as they occur in a list. Microtonality Microtone pitch symbols and values: + 1/4 - -1/4 . 1/8 .. with sharp 3/8 . with flat -1/8 .. with flat -3/8 +. with flat or sharp 1/8 +.. with flat or sharp 3/8 -. with flat or sharp -1/8 -.. with flat or sharp -3/8 Quarter tones '(q a4 a4+ as4 as4+ b4 b4- bb4 bb4- a4) Eight tones '(q a4 a4. a4+ a4.. as4 as4. as4+ b4-. b4 b4-. b4- b4-.. bb4. bb4- a4. a4) Chords '(w c4ds4+g4as4+) Integer, interval and midi microtone values: 0.5 = 1/4 tone 0.25 = 1/8 tone Transposition (pitch-transpose 2.5 '((a4 a4+ b4 d5) (e5 e5+ fs5 a5))) => ((b4+ c5 cs5+ e5+) (fs5+ g5 gs5+ b5+)) In the next example we generate a row of quarter tones using RND-ROW function with optional :quantize 1/4. If :quantize is set to 1/8 value, the function will return 8th tone row with 48 values. (setf mat (rnd-row :quantize 1/4 :type :pitch :seed 34)) => (c4 g4 ds4+ cs4 d4+ b4+ f4+ a4+ gs4+ e4+ b4 as4+ e4 bb4 cs4+ a4 d4 g4+ fs4+ eb4 c4+ gs4 fs4 f4) Intervals (pitch-to-interval mat) => (7 -3.5 -2.5 1.5 9 -6 4 -1 -4 6.5 0.5 -6.5 6 -8.5 7.5 -7 5.5 -1 -3.5 -2.5 7.5 -2 -1) (interval-to-pitch '(1.5 2 -1 -1.5 1 .5 .5)) => (c4 cs4+ ds4+ d4+ cs4 d4 d4+ eb4) Quantize (setf hertz '(448 880 1320 1760 2200 2640 3212 3520)) (hertz-to-pitch hertz :quantize 1/4) => (a4+ a5 e6 a6 cs7 e7 g7+ a7) 3. VelocitiesTraditional staff notation has a collection of common symbols that are formed from the first letter of Italian words for degrees of intensity we want to attach to a note or a phrase. In OMN there are 12 such terms ranging from ppppp to fffff. The items in this collection have specific pre-set data values attached and as such produce in MIDI play back differences of attack on the notes they accompany. ppppp pppp ppp pp p mp mf f ff fff ffff fffff Dynamic The symbols classed as being Dynamic have a relative MIDI velocity value attached to them. The objective within OMN is to primarily to provide the notation for such symbols. cresc dim < > 0< >0 pfp pf fp sfp sf sff sfff sfz sffz sfffz rf rfz fz ffz fffz Crescendo The collection titled Crescendo takes the Italian abbreviations for the common dynamic descriptions and places a < directly following the abbreviation. ppppp< pppp< ppp< pp< p< mp< mf< f< ff< fff< ffff< Diminuendo The collection titled Diminuendo takes the Italian abbreviations for the common dynamic descriptions and places a > directly following the abbreviation. pppp> ppp> pp> p> mp> mf> f> ff> fff> ffff> fffff> One note dynamic symbols This notation is used in wind, brass and string performance to suggest a precise dynamic changes to take place on a single pitch. The symbols are particularly associated with the use of hand-held mutes in writing for trumpets and trombones. 0<ppppp ... 0<fffff ppppp>0 ... fffff>0 0<ppppp> ... 0<fffff> <ppppp>0 ... <fffff>0 0<ppppp>0 ... 0<fffff>0 <ppppp> ... <fffff> >ppppp< ... >fffff< ppppp<> ... fffff<> ppppp>< ... fffff>< ppppp<pppp ... ffff<fffff pppp>ppppp ... fffff>ffff ppppp<>ppppp ... ffff<>ffff pppp><pppp ... fffff><fffff ppppp<pppp>ppppp ... ffff<fffff>ffff pppp>ppppp<pppp ... fffff>ffff<fffff >0< 0<>0 <>0 0<> <> >< 4. AttributeThe largest element of the OMN language is ATTRIBUTE (articulation). This term covers the many hundreds of symbols and words that describe musical expression. These terms are divided up very broadly within the OMN Glossary into two groupings: Articulations, Ornaments and Marks affecting all instrumental and vocal performance; Strings, Woodwind and Brass performance indicators being specific only to those instruments. Articulations cover Accents, Cesura, Fermata, Legato, Ties and Pedal. In musical performance these words, signs and symbols indicate a specific way of controlling the dynamic, intensity or duration of a musical event. This may be a single instance or covering a group of events. Ornaments are closely linked to articulation but usually include the addition of further pitches and subsequent changes in duration. Ornaments in OMN include Acciaccatura, Appoggiatura, Arpeggio, Glissando, Mordent, Trill, Tremolo, Turn and Two-note Tremolo. Ornamentation was once a required art for the musician to master with an expectation in the 17C and 18C that performers would freely embellish notated music as a matter of course, often going way beyond what was indicated in a score. In contemporary music ornamentation, whilst still using the symbols of Baroque performance practice, is most usually a precise and obligatory requirement seeking to give a special intensity to individual pitched events. Marks cover the many general performance indications found on a notated score that govern all instruments and voices. These include Repeat Signs and Rehearsal Marks. In OMN the performance instructions for woodwind and brass include the now common terms found in contemporary scores first collected together in Bruno Bartolozzi’s New Sounds for Woodwind. These may be linked through DEF-SOUND-SET to available sample sets of woodwind and brass attack transients. For strings, performance instructions in OMN are comprehensively cited and in conjunction with a sample library can be used to trigger complex mixtures and layers of timbre type. Included within OMN are Arco, Pizz, Col Legno, Harmonics, Pizzicato, String, Sul Ponticello, Sul Tasto, Bowing Techniques and Vibrato. Examples:'((s d5f5b5 f e5g5c6 e f5a5d6 s g5b5e6 f5a5d6 e5g5c6 d5f5b5) (e c5e5a5 c5e5a5 q d5f5b5 marc) (s d5f5b5 e5g5c6 f5a5d6 g5b5e6 e f5a5d6 s e5g5c6 d5f5b5) (e c5e5a5 c5e5a5 q d5f5b5 marc)) I. Strawinsky, Petruschka, 1911/21 '(e. c5 leg s g4 e. e5 leg s c5 e g5 q g5 e g5 c5g5a5 fp q c5f5a5 e e c5f5g5 fp q c5e5g5 e) W. A. Mozart, Variationen KV 265 '((-3e c4 pp< pizz+stacc stacc -e - 5e f5 mf< arco a5 e6 fs6 bb6) (-e q. g5 < trem+harm) (q g5 trem+harm -s f4e5 ff stacc+pizz -e)) A. Webern, Sechs Bagatellen für Streichquartett, op. 9, III, 1913 '((q d5 q d5 leg e. e5 lmordent2-t s f5) (e e5 (app s d5) e c5 (app. s b4) q. a4 e fs5 turn12) (t g5 leg s. fs5 t a5 leg s. g5 t fs5 leg s. e5 t d5 leg s. c5 (app. e c5) e. a5 s c5) (t b4 leg s. g4 e fs4 (app e fs4) h g4 lmordent1-t)) J. S. Bach, Goldberg-Variationen, Aria, 1741- Welcome to Opusmodus
Welcome to Opusmodus Important note before we beginHello, and welcome to Opusmodus. We hope you’ll find Opusmodus a useful addition to the tools you already use for composing. The Opusmodus Manual and the Three Lessons - to be found in the Navigator, on the left - are designed to help you get started. The Manual is a first step reference guide. The Three Lessons are an ‘active’ introduction to just some of the ways to compose with Opusmodus. Once you’ve finished the reading the Manual and working with the Lessons, go to File → New → Workspace… to begin your own project. What is OpusmodusOpusmodus is aimed at composers of all kinds - of art music, concert music, choral music, film music, jazz, electroacoustic music, music for games and new media, songwriters. Opusmodus is a comprehensive computer-aided environment for the whole work of music composition a virtual space where a composer can develop ideas and experiments for projects large and small. It is the first application to successfully provide what IRCAM has termed the Composing Continuum: from first thoughts to the finished score. Opusmodus speaks fluently to MusicXML and MIDI-file to enable your work to be prepared to meet the needs of professional performance and publishing. Opusmodus also allows many other file formats to be present inside its workspace from PDF documents, MP3 and 4, video formats, as well as Internet links. This means a composer can collect in one place all the pre-compositional material that so often comes together before a note has been written. Opusmodus is like a composer’s studio, when you don’t have a spare room for a studio! Opusmodus ManualThe Opusmodus Manual is an introduction to Opusmodus. There’s many helpful illustrations combined with a clear and concise text. It will prove ideal as an easy to look up reference guide as you explore and learn Opusmodus, and then create your own scores. In fifteen distinct sections the Manual takes you through the key features of the interface, describing the principle components. The Manual is also available as a printable PDF in Assistant Navigator → Documents → Manuals. Three LessonsThe Three Lessons have been created to get you up and running as quickly as possible by introducing you to the main features of Opusmodus. They use an ‘active’ approach to help you experience Opusmodus, focusing on three different composing scenarios: OMN scripting, Algorithmic and OMN and Algorithmic combined. Next StepThe Opusmodus Manual and the Three Lessons will give an idea about the sorts of things Opusmodus can do. It will take a couple of hours if you go through them thoroughly, but by the time you’ve completed both, you should have a good grasp of how to start using Opusmodus for your own projects. Tutorials and further help and guidanceThe “Assistant Navigator” panel has a suite of valuable collections to help and support your on-going work with Opusmodus. There’s a reference guide to Introduction to OMN The Language. This is followed by the 30-Stage Tutorial Guide that provides an introduction to coding using algorithmic functions and techniques alongside the Opusmodus Notation (OMN). These are mainly short pieces for solo piano. Then a collection called How-to - how to use tremolo, how to change tempo, and so on. Finally, there’s a large and varied collection of Score Examples created by composers who work regularly with Opusmodus. How to search the systemTo quickly search the system place the cursor anywhere on the function-name or on any word in the Composer panel (no selection needed) and press Cmd-d (⌘D) or you can find the search command in the Help menu: Help for Selected Text. MIDI PlaybackTo Start/Stop playing the MIDI press the space bar on your keyboard. To return to the beginning of the MIDI display panel press the Return key ↩. Alternatively you can use the contextual menu (right mouse click) to control the MIDI Player panel. Some of the midi files (especially from the web) you will not be able to listen to because the file might use the external ports. To change the setup use the contextual menu (right mouse click) in the midi panel and chose Ignore Ports. This will send the midi to the internal GM sound set after which you will be able to listen to the midi file. The Four ElementsAn important prerequisite for composing music with the aid of computers is that the musical ideas of a composition must be communicated to the computer: OMN provides a notation for music, just as traditional notation does on paper. The immediate question then is: how does OMN work so a composer can express musical ideas? Like traditional notation, OMN expresses musical units such as rhythms and pitches. The Introduction to OMN The Language explains the four elements, indicating: length as q (quarter) pitch as c4 velocity as mp and articulation as trem(olo) - in that order. (q c4 mp trem) Such a musical unit is expressed between parenthesis to allow a clear distinction between other units. ((q c4 mp trem) (q c5 ff fermata)) Clearly, musical units can be sequenced. ((s a4 d5 fs4 d5 g4 d5) (s a4 d5 fs4 d5 g4 d5) (s a4 d5 cs5 b4 a4 g4) (s fs4 d4 e4 cs4 e d4)) To make OMN (and LISP) do something for you, you type an expression. An expression is simply a list, starting with an opening parenthesis, followed by a number of symbols and finally closed by a close parenthesis. (gen-retrograde '(s a4 d5 fs4 d5 g4 d5)) => (s d5 g4 d5 fs4 d5 a4) The expression above is a list. The first element of the list is a function name. The rest of the list are arguments or values to which the function is applied. As Lisp will (try to) evaluate everything you type at it, there must be a way to tell Lisp to take expressions as data. To inform LISP that you want an expression to be treated as data, quote that expression. '((s a4 d5 fs4 d5 g4 d5) (s a4 d5 fs4 d5 g4 d5) (s a4 d5 cs5 b4 a4 g4) (s fs4 d4 e4 cs4 e d4)) It is just like a quotation in real life: in case we want to say that Paris is the capital of France, we use the word without quotes, but we do use quotes when saying that “Paris” has five letters. So, if you want LISP to see (q c5 ff tr2) as data, let the expression be preceded by a single quote: '(q c5 ff tr2) Now, lets try the expression (gen-integer 12) with and without a quote to see the difference. To do that we need to evaluate our expression. Place the curser after the last closing parenthesis ) and press Enter key. The evaluation will display in the Listener panel. (gen-integer 12) ; returns list of numbers from 0 to 12 => (0 1 2 3 4 5 6 7 8 9 10 11 12) '(gen-integer 12) ; is a list with 2 values => (gen-integer 12) By the way, an arrow sign => means evaluation, what is written after semicolon ; is a comment. Here are two functions you will find useful during your work. SETFIf you want to process a sequence it is useful to assign that sequence to a variable. SETF allows us to do that. Here the variabile is named song and is assigned to a sequence of omn lists. (setf song '((3e gb6 bb6 db6 gb6 eb6 gb6 db6 gb6 bb5 db6 gb5 bb5) (3e gb5 bb5 db5 gb5 eb5 gb5 db5 gb5 bb4 db5 gb4 bb4) (3e db4 db5 ab4 db5 ab4 ab5 ab4 ab5 eb5 ab5 eb5 eb6) (3e eb5 eb6 ab5 eb6 ab5 ab6 ab5 ab6 db6 ab6 db6 db7))) After assignment, you can use song to refer to its value. LISTThe function LIST makes lists, as its name says. Lists can have any length, therefore the function LIST takes any number of arguments (data). (list '(q c4 mp tr2) '(q c5 f fermata) '(q c5 ff tr2) '(q c6 fff fermata)) As we have assigned the variable named song. We might as well use it in our expression. (list song song)OpusModusLover joined the community- Midi-player performance and documentation files
- Joshua Bell Violin Short test
Joshua-Test_Edit1.mp3Hi, here's a short piece I wrote today to test Joshua Bell VST Violin (Embertone). Best ! Stephane- Midi-player performance and documentation files
- Midi-player performance and documentation files
Yeah, me too—after testing the new update for a while, it seems similar for me. I can't tell exactly what is causing the issue because it accumulates so slowly, but I can say that if I am working in a project and generating a lot of scores with command-1, performance gets worse over time. On a related note, the midi bar doesn't seem to really follow the score very well, especially when this is happening. I've noticed a correlation where, in general, the worse the MIDI playbar is doing at following along with the playback, the more likely it is for there to be performance issues (curiously it's not completely 1-1 though; sometimes playback works fine and the playbar is skipping around a bit). Also—unless I was just missing something earlier, my #2 request seems to have been addressed, so thank you!- Position-insert question
Many thanks, that seems to work for #1, and I can use that same structure for a number of other things I'm working on. When it comes to the second question—that's a useful function I haven't seen yet, thanks for pointing me to it. I can't see how I could use that to change the pitch based on a comparison between the lengths of the events unless I am missing something. I'm also thinking of instances where there would be multiple things to compare, e.g. if the velocity is greater than the last note and the length is the same or longer, transpose the pitch up one semitone. No worries if this isn't possible, as it shouldn't be too difficult for me to sort out with a for loop when I want to do things like this, was just curious if there was a more streamlined way through dictum. Best, Jack - Snippet