A format for virtual orchestras: FlowML
Version 0.3 - DRAFT1

Bert Schiettecatte (57986)
bschiett@vub.ac.be

*3cm3cmfigures/logovub.png

Abstract

This document proposes a format for storing synthesis diagrams and their supporting mechanisms. Such a standard format is necessary to allow exchange of virtual musical instruments between several (non-)realtime software synthesizers, and to publish synthesis diagrams on the WWW.

Contents

1  Introduction
2  Definitions
3  To chart or not to chart
4  Primitive structures
    4.1  Inputs
    4.2  Outputs
    4.3  Logic
    4.4  Arithmetic operators
    4.5  Amplifiers, mixers & envelope generators
    4.6  Oscillators
    4.7  Discrete oscillators
    4.8  Filters
    4.9  Effects
5  Examples
    5.1  Orchestra definition
    5.2  Instrument definition
    5.3  Structure definition
6  Document Type Descriptions
    6.1  Orchestra
    6.2  Instrument
    6.3  Structure
7  Acknowledgements

1  Introduction

This document proposes a standard format for synthesis flow charts. The format will be defined later in this document as a collection of XML DTDs. The primary motivation for such an exchangeable format was the problem of serializing collections of reusable signal processing constructs as found in (non-)realtime software synthesizers.

2  Definitions

To be completed

3  To chart or not to chart

When the idea for this universal format first arised, it was obvious that there should be some primitive structures defined for the format, such that compilers from FlowML to some target synthesis language would be able to generate code for these primitive structures.

The first idea was to introduce a set of primitives from synthesis languages like SAOL and CSound: various mathematical operators, along with signal processing operators. It turned out that this is (probably) not the right solution: these are constructs from a (more or less) sequential language, and a diagram does not specify a real order on its components, the way a programming language does (there was the assumption for a while that a synthesis algorithm could be drawn very easily as a directed graph). Therefore, a collection of primitive synthesis building blocks will be introduced in this document, and tools who want to support the FlowML format must provide support for these blocks.

After discussion with several people from the saol-dev mailing-list and various members of the university where this project is supervised, it would be advisable to introduce a mechanism in the format which allows for target-language specific building blocks (blocks which cannot be defined using the primitive blocks introduced in this document). At this time such a mechanism isn't included yet, but it is planned for the next version of this document.

4   Primitive structures

Based on some popular realtime software synthesizers, a few primitive building blocks will now be presented. The list is by no means complete at this time, and the descriptions are missing at this time.

4.1  Inputs

  1. Audio in
  2. Constant in
  3. Controller in

4.2  Outputs

  1. Audio out
  2. Controller out

4.3  Logic

  1. Switch
  2. And
  3. Or
  4. Not

4.4  Arithmetic operators

  1. Add
  2. Multiply
  3. Substract
  4. Divide

4.5  Amplifiers, mixers & envelope generators

  1. Crossfade
  2. Pan
  3. Amplify
  4. Mix
  5. ADSR

4.6  Oscillators

  1. Sawtooth
  2. Pulse
  3. Sine

4.7  Discrete oscillators

  1. LFO

4.8  Filters

  1. High-pass 1-pole
  2. Low-pass 1-pole

4.9  Effects

  1. Delay
  2. Reverb
  3. Spatialize

5  Examples

5.1  Orchestra definition

An example orchestra:


Orchestra.xml

5.2  Instrument definition

The following is a modified version of the flanger circuit from [Roads96], p. 438. The diagram was redesigned in terms of structures from 4:

*0.75!figures/circuit.png

The corresponding FlowML document would be:


Flanger.xml

5.3  Structure definition

An example structure definition:


Structure.xml

6  Document Type Descriptions

Below are the formal specifications for the format.

6.1  Orchestra

<!--

    FlowML Orchestra DTD

-->

<!ELEMENT Orchestra (Instruments, Buses)>

<!ELEMENT Instruments (InstrumentInstance)+>

<!ELEMENT Buses (Bus)+>

<!ELEMENT InstrumentInstance (Route)+>
<!ATTLIST InstrumentInstance 
 id ID #REQUIRED 
 label CDATA #REQUIRED>

<!ELEMENT Route EMPTY>
<!ATTLIST Route
 target_id IDREF #REQUIRED>

<!ELEMENT Bus (Send)*>
<!ATTLIST Bus
 id ID #REQUIRED 
 label CDATA #REQUIRED 
 width CDATA #REQUIRED 
 output (yes|no) "no">
  
<!ELEMENT Send EMPTY>
<!ATTLIST Send
 target_id IDREF #REQUIRED>

6.2  Instrument

<!--

    FlowML Instrument DTD

-->

<!ELEMENT Instrument (Description, Implementation)>
<!ATTLIST Instrument id ID #REQUIRED>

<!ELEMENT Description (#PCDATA)>

<!ELEMENT Implementation (StructureInstance)+>

<!ELEMENT StructureInstance (Connection)*>
<!ATTLIST StructureInstance 
 id ID #REQUIRED 
 label CDATA #REQUIRED 
 type CDATA #REQUIRED>

<!ELEMENT Connection EMPTY>
<!ATTLIST Connection 
 from CDATA #REQUIRED 
 to CDATA #REQUIRED 
 target_id IDREF #REQUIRED>

6.3  Structure

<!--

    FlowML Structure DTD

-->

<!ELEMENT Structure (Description, Implementation)>
<!ATTLIST Structure id ID #REQUIRED>

<!ELEMENT Description (#PCDATA)>

<!ELEMENT Implementation (StructureInstance|PrimitiveInstance)+>

<!ELEMENT StructureInstance (Connection)*>
<!ATTLIST StructureInstance 
 id ID #REQUIRED 
 label CDATA #REQUIRED 
 type CDATA #REQUIRED>

<!ELEMENT PrimitiveInstance (Connection)*>
<!ATTLIST PrimitiveInstance 
 id ID #REQUIRED 
 label CDATA #REQUIRED 
 type CDATA #REQUIRED>

<!ELEMENT Connection EMPTY>
<!ATTLIST Connection 
 from CDATA #REQUIRED 
 to CDATA #REQUIRED 
 target_id IDREF #REQUIRED>

7  Acknowledgements

To be completed

References

[Roads96]
C. Roads. The Computer Music Tutorial. 1996, MIT Press.


Footnotes:

1 Software designers should not rely on this document until the first major version.


File translated from TEX by TTH, version 2.55.
On 6 Apr 2000, 00:31.