Click here to Skip to main content
Click here to Skip to main content
Add your own
alternative version

Writing Your Own RTF Converter

, 1 Aug 2013 CPOL
An article on how to write a custom RTF parser and converter.
rtfconverter_sourcecode.zip
RtfConverter_SourceCode
bin
Debug
Release
Itenso.Rtf.Converter.Html.dll
Itenso.Rtf.Converter.Xml.dll
Itenso.Rtf.Interpreter.dll
Itenso.Rtf.Parser.dll
Itenso.Sys.dll
log4net.dll
nunit-console-runner.dll
nunit.core.dll
nunit.framework.dll
nunit.util.dll
Rtf2Html.exe
Rtf2Raw.exe
Rtf2Xml.exe
RtfInterpreterTests.exe
RtfParserTests.exe
RtfWindows.exe
RtfWinForms.exe
Converter
Html
Properties
Xml
Properties
docu
Word2007RTFSpec9.pdf
ext
log4net.dll
nunit-console-runner.dll
nunit.core.dll
nunit.framework.dll
nunit.util.dll
Interpreter
Converter
Image
Text
Interpreter
Model
Properties
Support
InterpreterTests
Properties
RtfInterpreterTest
RtfInterpreterTest_0.rtf
RtfInterpreterTest_1.rtf
RtfInterpreterTest_10.rtf
RtfInterpreterTest_11.rtf
RtfInterpreterTest_12.rtf
RtfInterpreterTest_13.rtf
RtfInterpreterTest_14.rtf
RtfInterpreterTest_15.rtf
RtfInterpreterTest_16.rtf
RtfInterpreterTest_17.rtf
RtfInterpreterTest_18.rtf
RtfInterpreterTest_19.rtf
RtfInterpreterTest_2.rtf
RtfInterpreterTest_20.rtf
RtfInterpreterTest_21.rtf
RtfInterpreterTest_22.rtf
RtfInterpreterTest_23.rtf
RtfInterpreterTest_3.rtf
RtfInterpreterTest_4.rtf
RtfInterpreterTest_4.rtf.jpg
RtfInterpreterTest_4.rtf.jpg.hex
RtfInterpreterTest_5.rtf
RtfInterpreterTest_5.rtf.png
RtfInterpreterTest_5.rtf.png.hex
RtfInterpreterTest_6.rtf
RtfInterpreterTest_6.rtf.wmf
RtfInterpreterTest_6.rtf.wmf.hex
RtfInterpreterTest_7.rtf
RtfInterpreterTest_7.rtf.emf
RtfInterpreterTest_7.rtf.emf.hex
RtfInterpreterTest_8.rtf
RtfInterpreterTest_8.rtf.wmf
RtfInterpreterTest_8.rtf.wmf.hex
RtfInterpreterTest_9.rtf
RtfInterpreterTest_fail_0.rtf
RtfInterpreterTest_fail_1.rtf
RtfInterpreterTest_fail_2.rtf
RtfInterpreterTest_fail_3.rtf
RtfInterpreterTest_fail_4.rtf
keys
ItensoRtfConverter.snk
Parser
Model
Parser
Properties
Support
ParserTests
Properties
RtfParserTest
minimal.rtf
RtfParserTest_0.rtf
RtfParserTest_1.rtf
RtfParserTest_2.rtf
RtfParserTest_3.rtf
RtfParserTest_4.rtf
RtfParserTest_5.rtf
RtfParserTest_6.rtf
RtfParserTest_7.rtf
RtfParserTest_8.rtf
RtfParserTest_fail_0.rtf
RtfParserTest_fail_1.rtf
RtfParserTest_fail_2.rtf
RtfParserTest_fail_3.rtf
RtfParserTest_fail_4.rtf
RtfParserTest_fail_5.rtf
RtfParserTest_fail_6.rtf
Rtf2Html
Properties
Rtf2Raw
Properties
Rtf2Xml
Properties
RtfWindows
Properties
RtfWinForms
DefaultText.rtf
Properties
Sys
Application
Collection
Logging
Properties
Test
RtfConverter_v1.7.0.zip
Rtf2Xml
Properties
bin
Release
Itenso.Rtf.Converter.Html.dll
Itenso.Rtf.Converter.Xml.dll
Itenso.Rtf.Interpreter.dll
Itenso.Rtf.Parser.dll
Itenso.Sys.dll
log4net.dll
nunit-console-runner.dll
nunit.core.dll
nunit.framework.dll
nunit.util.dll
Rtf2Html.exe
Rtf2Raw.exe
Rtf2Xml.exe
RtfInterpreterTests.exe
RtfParserTests.exe
RtfWindows.exe
RtfWinForms.exe
Converter
Html
Properties
Xml
Properties
docu
Word2007RTFSpec9.pdf
ext
log4net.dll
nunit-console-runner.dll
nunit.core.dll
nunit.framework.dll
nunit.util.dll
Interpreter
Converter
Image
Text
Interpreter
Model
Properties
Support
InterpreterTests
Properties
RtfInterpreterTest
RtfInterpreterTest_0.rtf
RtfInterpreterTest_1.rtf
RtfInterpreterTest_10.rtf
RtfInterpreterTest_11.rtf
RtfInterpreterTest_12.rtf
RtfInterpreterTest_13.rtf
RtfInterpreterTest_14.rtf
RtfInterpreterTest_15.rtf
RtfInterpreterTest_16.rtf
RtfInterpreterTest_17.rtf
RtfInterpreterTest_18.rtf
RtfInterpreterTest_19.rtf
RtfInterpreterTest_2.rtf
RtfInterpreterTest_20.rtf
RtfInterpreterTest_21.rtf
RtfInterpreterTest_22.rtf
RtfInterpreterTest_23.rtf
RtfInterpreterTest_3.rtf
RtfInterpreterTest_4.rtf
RtfInterpreterTest_4.rtf.jpg
RtfInterpreterTest_4.rtf.jpg.hex
RtfInterpreterTest_5.rtf
RtfInterpreterTest_5.rtf.png
RtfInterpreterTest_5.rtf.png.hex
RtfInterpreterTest_6.rtf
RtfInterpreterTest_6.rtf.wmf
RtfInterpreterTest_6.rtf.wmf.hex
RtfInterpreterTest_7.rtf
RtfInterpreterTest_7.rtf.emf
RtfInterpreterTest_7.rtf.emf.hex
RtfInterpreterTest_8.rtf
RtfInterpreterTest_8.rtf.wmf
RtfInterpreterTest_8.rtf.wmf.hex
RtfInterpreterTest_9.rtf
RtfInterpreterTest_fail_0.rtf
RtfInterpreterTest_fail_1.rtf
RtfInterpreterTest_fail_2.rtf
RtfInterpreterTest_fail_3.rtf
RtfInterpreterTest_fail_4.rtf
keys
ItensoRtfConverter.snk
Parser
Model
Parser
Properties
Support
ParserTests
Properties
RtfParserTest
minimal.rtf
RtfParserTest_0.rtf
RtfParserTest_1.rtf
RtfParserTest_2.rtf
RtfParserTest_3.rtf
RtfParserTest_4.rtf
RtfParserTest_5.rtf
RtfParserTest_6.rtf
RtfParserTest_7.rtf
RtfParserTest_8.rtf
RtfParserTest_fail_0.rtf
RtfParserTest_fail_1.rtf
RtfParserTest_fail_2.rtf
RtfParserTest_fail_3.rtf
RtfParserTest_fail_4.rtf
RtfParserTest_fail_5.rtf
RtfParserTest_fail_6.rtf
Rtf2Html
Properties
Rtf2Raw
Properties
RtfWindows
Properties
RtfWinForms
DefaultText.rtf
Properties
Sys
Application
Collection
Logging
Properties
Test
Rtf2Html2010.suo
Rtf2Raw2010.suo
Rtf2Xml2010.suo
RtfInterpreter2010.suo
RtfParser2010.suo
RtfWindows2010.suo
RtfWinForms2010.suo
��

SuperCollider 3 Synth Server Architecture

SuperCollider 3 �0�0�0�0�0�0�0�i �



copyright i� 2002 James McCartney

Japanese Translation by Kenji Yasaka, 2004



Introduction

o0X0�0k0



The SuperCollider 3 Synth Server is a simple but powerful synthesis engine. While synthesis is running, new modules can be created, destroyed and repatched, sample buffers can be created and reallocated. Effects processes can be created and patched into a signal flow dynamically at scheduled times.  All running modules are ordered in a tree of nodes that define an order of execution. Patching between modules is done through global audio and control buses. 



SuperCollider 3n0�0�0�0�0�0�0�0o0�0�0�0�0g07_�Rj0���Tb�0�0�0�0g0B0�00����Qt-Ng0B0c0f0�00�e_0k0�0�0�0�0�0�0\Ob�04x�h�0�Q�ibL0g0M00�0�0�0�0�0�0�0�0�0��Bf\Ob�0�Q�ibY0�0S0h0L0g0M0�00�0�0�0�0�0�Qt�0�0�0�0�0n0Am�0n0-Nk0�R�vk0D}0���0S0h0L0g0M0�00�R\O-Nn0hQ�0�0�0�0�0o0�0�0�0�rn0�0�0�0h0W0f0M�nU0�00�Qt��0�[�g0M0�00�0�0�0�0�0��n0�0�0�0(�c�})o0�0�0�0�0�0��Wk0B0�0�0�0�0�0�0�0�00�0�0�0�0�0�0�0�0L}1ug0L��0�0�00



All commands are received via TCP or UDP using a simplified version of Open Sound Control (OSC). The synth server and its client(s) may be on the same machine or across a network. The synth server does not send or receive MIDI. It is expected that the client will send all control commands. If MIDI is desired, it is up to the client to receive it and convert it to appropriate OSC commands for the synth engine.



Y0y0f0n0�0�0�0�0o0Open Sound Control(OSC)�0!|euSW0_0�0n0�0TCP0B0�0D0o0UDPL}1ug0�SQ0�S�0�0�00�0�0�0�0�0�0�0h0�0�0�0�0�0�0o0TX0�0�0�0k0X[(WY0�0S0h0�00�0�0�0�0�0�0�rk0%R0k0X[(WY0�0S0h0�0g0M0�00�0�0�0�0�0�0�0ꁫ�o0MIDI�O�Sn0��S�Oo0L��0j0D00S0�0o00Y0y0f0n0�0�0�0�0�0�0�0�0�0�0L0�0�0�0�0�0�0K0�0��0�0f0O0�0S0h0�0MR�ch0W0f0D0�0_0�0g0B0�00MIDI�0)R(uW0_0D04XTo00�0�0�0�0�0�0tPg0�SQ0�S�00�0�0�0�0�0�0�0L0t�g0M0�0OSC�0�0�0�0k0	Y�cW0f0K0�0�0�0�0�0�0�0�0k0��0�_��L0B0�00



Synth definitions are stored in files generated by the SuperCollider language application. Unit generator definitions are Mach-O bundles (not to be confused with CFBundles). The Unit generator API is a simple C interface.



�0�0�0n0�[�(}ihVn0�[�)o0SuperCollider�0�0�0�0�0�0k0f0ubU0�00�0�0�0�0h0W0f0�OX[U0�0�00�0�0�0�0�0�0�0�0�0�0n0�[�o0Mach-Ob__n0�0�0�0�0g0�OX[U0�0�00�0�0�0�0�0�0�0�0�0�0n0APIo0Cg0��U0�0f0D0�00







Main Design Concepts

�0�0�0�0�0�0�0�0�0



Node

A Node is an addressable node in a tree of nodes run by the synth engine. There are two types, Synths and Groups. The tree defines the order of execution of all Synths. All nodes have an integer ID.



�0�0�0

�0�0�0o00�0�0�0�0c�[�S��j0PSOg0B0�00�0�0�0�0�0�0�0�Qg0�0�0�0�i ��0j0W0f0�R\OY0�00�0�0�0k0o0�.z^�B0�00�0�0�0�0�0�0h0�0�0�0�0�0�0�0L0X[(WY0�00�0�0�0�i �o00]0n0~0~0Y0y0f0n0�0�0�0n0�Qt��0�[�Y0�00�0�0�0k0o0Nan0tepeIDk0�0c0f0X�%RU0�0�00



Group

A Group is a collection of Nodes represented as a linked list. A new Node may be added to the head or tail of the group. The Nodes within a Group may be controlled together. The Nodes in a Group may be both Synths and other Groups. At startup there is a top level group with an ID of zero that defines the root of the tree.



�0�0�0�0

�0�0�0�0o0�0�0�0n0ƖTSOg0B0�00T�0�0�0IDn0N��k0�0c0f0h�U0�0�00�eW0D0�0�0�0o0�0�0�0�0n0-�0B0�0D0o0�_�0k0���Rg0M0�00�0�0�0�0�Qn0�0�0�0o0~0h0�0f0�0�0�0�0�0�0g0M0�00�0�0�0�0�Qn0�0�0�0o0�0�0�0�0�0�0g0�0�0�0�0�0�0�0�0g0�0)R(ug0M0�00SuperColliderw��RBfk0o0g
NMOn0�0�0�0�0n0IDo0"0"L0�[�U0�0�00



Synth

A Synth is a collection of unit generators that run together. They can be addressed and controlled by commands to the synthesis engine. They read input and write output to global audio and control buses. Synths can have their own local controls that are set via commands to the server.



Synth(�0�0�0)

�0�0�0o0�0�0�0�0�0�0�0�0�0�0n0ƖTSOg0B0�00�0�0�0�0c�[L0�S��g00�0�0�0�0�0�0�0x0n0�0�0�0�0k0�0c0f0�0�0�0�0�0�0L0g0M0�00eQ�Q�Ro00�0�0�0�0�0��Wn0�0�0�0�0�0�0�00�0�0�0�0�0�0�0�0h0�0�0�S�0L0�S��0�0�0�0��On0�Q萳0�0�0�0�0�0�0�S��g00�0�0�0�0x0n0�0�0�0�0L}1ug0-��[L0g0M0�00



Synth Definition

Synths are created from Synth Definitions. Synth Definition files are created by the SuperCollider language application and are loaded into the synth server. Synth Definitions are referred to by name.



Synth Definition(�0�0�0�[�)

�0�0�0o0Synth Definitionk0�0c0f0\ObU0�0�00Synth Definition�0�0�0�0o0SuperCollider�0�0�0�0�0�0k0�0c0f0\ObU0�00�0�0�0�0�0�0�0k0��0�0�00Synth Definitiono00]0�0^0�0k0d0Q0�0�0_0�0�0�0
Tk0�0c0f0�SgqU0�0�00



Audio Buses

Synths send audio signals to each other via a single global array of audio buses.  Audio buses are indexed by integers beginning with zero. Using buses rather than connecting synths to each other directly allows synths to connect themselves to the community of other synths without having to know anything about them specifically. The lowest numbered buses get written to the audio hardware outputs. Immediately following the output buses are the input buses, read from the audio hardware inputs. The number of bus channels defined as inputs and outputs do not have to match that of the hardware.



�0�0�0�0�0�0�0

�0�0�0o0�0�0�0�0�0��Wk0B0�0�0�0�0�0�0�0�0L}1ug0J0�ND0k0�0�0�0�0�0�0�0�0�0�0��0�00�0�0�0�0�0�0�0o0"0"K0�0�Y~0�0tepeIDg0X�%RU0�0�00�0�0�0ꁫ��0J0�ND0k0�c�}[0Z0k0�0�0L}1uk0Y0�0S0h0g00�Nk0B0�0�0�0�0n0S0h0�0]0�0^0�0��X�Y0�0S0h0j0O0�0�0�0n0ƖTSOk0�c�}g0M0�0�0F0k0j0�00IDn0peW[n0NOD0�0�0L0�[��n0�0�0�0�0�0�Q�Rňnk0�c�}U0�0�00�0�0�0�0�0�Q�Rk0�c�}U0�0_0ju�Sk0�}O0IDL0�0�0�0�0�0ňnK0�0n0eQ�R�0�0h0j0�00eQ�Q�Rn0_0�0n0�0�0n0peo00�0�0�0�0�0eQ�Q�Rňnk0�[�_U0[0�0�_��o0j0D00



Control Buses

Synths can send control signals to each other via a single global array of control buses.  Buses are indexed by integers beginning with zero.



�0�0�0�0�0�0�0�0

�0�0�0o0�0�0�0�0�0��Wn0�0�0�0�0�0�0�0�0�0L}1uW0f00J0�ND0k0�0�0�0�0�0�0�0�0�0�0�0�0�0�S�0g0M0�00�0�0�0�0�0�0�0�0�0"0"K0�0�Y~0�0tepeIDg0X�%RU0�0�00



Buffers

Buffers are arrays of 32 bit floating point values with a small descriptive header. Buffers are stored in a single global array indexed by integers beginning with zero. Buffers may be safely allocated, loaded and freed while synthesis is running, even while unit generators are using them. Buffers are used for wave tables, sample buffers, delay lines, envelopes, or for any other need which can use an array of floating point values. Sound files may be loaded into or written from buffers.



�0�0�0�0

�0�0�0�0o0���S��j0\U0j0�0�0�0L0d0D0_032bitn0nm�R\pe�pn0M�Rg0B0�00�0�0�0�0o0�0�0�0�0�0��Wk0"0"K0�0�Y~0�0tepeIDk0�0c0f0X�%R0�OcU0�0�00�0�0�0�0o0���Tb�Qt-Ng0�0�0�0�0�0�0�0�0�0�0�0L0O(u-Ng0B0c0f0�00�[hQk0\Ob�0)R(u�0�>eY0�0S0h0L0g0M0�00�0�0�0�0o0�lb_�0�0�0�00�0�0�0�0�0�0�0�00�0�0�0�0�0�0�00�0�0�0�0�0�00B0�0D0o0]0n0�Nnm�R\pe�pn0M�R�0<h
}Y0�0n0k0)R(ug0M0�00�0�0�0�0�0�0�0�0K0�0�0�0�0�0x0��0���0S0h0�00�0�0�0�0K0�0�0�0�0�0�0�0�0�0x0�fM0�QY0S0h0�0g0M0�00



Unit Generator Definitions

Unit Generator Definitions are plug-ins loaded automatically when the program starts. They are binary code libraries that are used as building blocks by Synths to build synthesis algorithms. Unit Generator Definitions have names that match the names of SuperCollider language classes used in building Synth Definitions. 



�0�0�0�0�0�0�0�0�0�0�[�

�0�0�0�0�0�0�0�0�0�0�[�o0�0�0�0�0�0L0���YU0�0�0��k0��R�vk0��0��~0�0�0�0�0�0�0�0g0B0�00�0�0�0�0�0�0�0n0�0�0�0�0�0g0B0�00���Tb�0�0�0�0�0�0�i�{n0��k0�0�0�0k0�0c0f0)R(uU0�0�0�0�0�0h0j0�00�0�0�0�0�0�0�0�0�0�0�[�o0SuperCollidern0����0�0�0g0O(uU0�0�0SynthDefn0�i�{k0�0(uD0�0�0f0D0�0
T�yh0T�in0�0n0L0(uD0�0�0�00







Command Line Arguments

�0�0�0�0�0�0�0�0�0�0�0�0



One of -u or -t must be supplied. Both may be supplied.

-u udp-port-number

	a port number 0-65535. 

-t tcp-port-number

	a port number 0-65535



�NNn0"-u"K0"-t"o0�_Z0c�[Y0�0�_��L0B0�00!N�ec�[Y0�0S0h0�0�S��0

-u udp-port-number

	0^�65535~0g0n0�0�0�0ju�S

-t tcp-port-number

	0^�65535~0g0n0�0�0�0ju�S

	

-v device-name

	Name of a sound i/o device to use. If not specified, the default device is used.

	Currently this is ignored and the default device is used.



-v device-name

	O(uY0�0�0�0�0�0�0eQ�Q�Rňnn0
T�y0c�[L0j0D04XTo0OSn0�0�0�0�0�0ňn	L0rR�0S_f0�0�0�00�s(Wn0h0S0�0S0n0�0�0�0�0�0o0!q��U0�00�0�0�0�0�0n0ňn	L0x��bU0�0�00

	

-a num-audio-bus-channels

	number of audio bus channels (default = 128).

	The space allocated for audio buses is: (numchannels * (blocksize + 1) * 4)

-a num-audio-bus-channels

	�0�0�0�0�0�0�0n0�0�0�0�0�0pe(Rg-��[o0128�0�0�0�0�0)

	�0�0�0�0�0�0�0k0rR�0S_f0�0�0�0�0�0�0�0zz��o0 (�0�0�0�0�0pe x (�0�0�0�0�0�0	�0 + 1) x 4)

-i num-input-bus-channels

	number of audio input bus channels (default = 2)

-i num-input-bus-channels

	�0�0�0�0�0eQ�R�0�0n0�0�0�0�0�0pe(Rg-��[o02)

-o num-output-bus-channels

	number of audio output bus channels (default = 2)

-o num-output-bus-channels

	�0�0�0�0�0�Q�R�0�0n0�0�0�0�0�0pe(Rg-��[o02)

-c num-control-bus-channels

	number of control bus channels (default = 4096)

	The space allocated for control buses is: (numchannels * 8)

-c num-control-bus-channels

	�0�0�0�0�0�0�0�0n0�0�0�0�0�0pe(Rg-��[o04,096)

	�0�0�0�0�0�0�0�0k0rR�0S_f0�0�0�0�0�0�0�0zz��o0 (�0�0�0�0�0pe x 8)

-b num-buffers

	number of sample buffers (default = 1024)

-b num-buffers

	�0�0�0�0�0�0�0�0pe(Rg-��[o01,024)

-n max-nodes

	maximum number of nodes (default = 1024)

-n max-nodes

	g'Y�0�0�0pe(Rg-��[o01,024)

-d max-synth-defs

	maximum number of synth definitions (default = 1024)

-d max-synth-defs

	SynthDef(�0�0�0�[�)n0g'Ype(Rg-��[o01,024)

-D 1 or 0

	if zero, then synth definitions will not be loaded on start up. (default = 1)

-D 1 or 0

	�0�0n04XT0SynthDef(�0�0�0�[�)o0w��RBfk0��0��~0�0j0D0(Rg-��[o01)

-z block-size

	The number of samples in one control period. (default = 64)

-z block-size

	�hTgk0��0��~0�0�0�0�0�0�0pe(Rg-��[o064)

-Z preferred-hardware-buffer-size

	If non-zero, it will attempt to set the hardware buffer frame size. (default = 0)

-Z preferred-hardware-buffer-size

	�0�0�NYn04XT0�0�0�0�0�0�0�0�0�0�0n0�0�0�0�0�0�0�0�0NH0�0�0_0$Pk0-��[	W0�0F0h0f�0�0(Rg-��[o00)

-S preferred-sample-rate

	If non-zero, it will attempt to set the hardware sample rate. (default = 0)

-S preferred-sample-rate

	�0�0�NYn04XT0�0�0�0�0�0�0n0�0�0�0�0�0�0�0�0NH0�0�0_0$Pk0-��[W0�0F0h0	f�0�0(Rg-��[o00)

-m real-time-memory-size

	The number of kilobytes of real time memory. 

	This memory is used to allocate synths and any memory that 

	unit generators themselves allocate. (default = 2048)

-m real-time-memory-size

	�0�0�0�0�0�0�Qt(un0�0�0�0O(uϑ�0�0�0�0�0�0g0c�[Y0�00

	S0n0�0�0�0o0�0�0�0�0+T�00B0�0�0�0�0�0�0�0�0�0�0�0�0�0ꁫ�L0rR�0S_f0�0�0	�0�0h0W0f0)R(uU0�0�0(Rg-��[o02,048)

-r random-number-generators

	The number of seedable random number generators. (default = 64)

-r random-number-generators

	)R(u�S��j0qNpeub_j��n0pe(Rg-��[o064)

-w max-interconnect-buffers

	The maximum number of buffers that are allocated for buffers to interconnect 

	unit generators. Sets the limit of complexity of synth defs that can be loaded at 

	runtime. This value will be increased if a more complex synth-def is loaded at 

	start up time, but it cannot be increased once synthesis has begun. (default = 64)

-w max-interconnect-buffers

	�0�0�0�0�0�0�0�0�0�0���0P}v0��k0)R(uU0�0�0�0�0�0�0n0g'Ype0�[L�Bfk0��0	��0�S��j0SynthDef(�0�0�0�[�)n0�і�^�06RP�g0M0�00S0n0$P�0'YM0O0Y0�0S0	h0g0�0�0�іj0�0�0�0�[��0w��RBfk0��0���0�0L00N�e����QtL0���YU0�0f0	K0�0	Y�fY0�0S0h0o0g0M0j0D00(Rg-��[o064)]



	

-l max-logins

	maximum number of named return addresses stored (default = 64)

	also maximum number of tcp connections accepted

-l max-logins

	�OX[U0�0f0D0�0
TMR�NM0n0�0�0�0�0n0g'Ype(Rg-��[o064)

	~0_00TCPO(uBfk0o0g'Y�c�}pe�0c�[

-p session-password

	When using TCP, the session password must be the first command sent.

	The default is no password.

	UDP ports never require passwords, so if password protection is desired, 

	use TCP.

-p session-password

	TCP)R(uBfn0�0�0�0�0�0�0�0�0�0�0�0c�[0Rg-��[g0o0�0�0�0�0�0j0W0k0j0c0	f0D0�00UDP�0�0�0g0o0�0�0�0�0�0o0�_��h0U0�0j0D0_0�00�0�0�0�0�0k0�0�0�0	�0�0�0�0L0�_��j04XTo0TCP�0)R(uY0�00



-I input-streams-enable-string

	Allows turning off input streams that you are not interested in on the device.

	If the string is 01100, for example, then only the second and third input streams

	on the device will be enabled. Turning off streams can reduce CPU load.

-I input-streams-enable-string

	�0�0�0�0
Nn0�_��h0W0f0D0j0D0eQ�R�0�0�0�0�0�0!q�Rk0g0M0�0001100h0c�[	W0_04XT0�0�0�0�0
Nn0,{�h0,{�eQ�R�0�0�0�0�0n00L0	g�Rh0j0�00�0�0�0�0	�0�0!q�Rk0Y0�0S0h0g0CPUn0��w��0��ng0M0�00



-O output-streams-enable-string

	Allows turning off output streams that you are not interested in on the device.

	If the string is 11000, for example, then only the first two output streams

	on the device will be enabled. Turning off streams can reduce CPU load.

-O output-streams-enable-string

	�0�0�0�0
Nk0�_��h0W0f0D0j0D0�Q�R�0�0�0�0�0�0!q�Rk0g0M0�0011000h0c�[	W0_04XT0�0�0�0�0
Nn0gRn0�d0n0�Q�R�0�0�0�0�0n00L0	g�Rh0j0�00�0�0	�0�0�0�0!q�Rk0Y0�0S0h0g0CPUn0��w��0��ng0M0�00

	

-N cmd-filename input-filename output-filename sample-rate header-format sample-format



	Run in non-real-time mode. 

	The cmd-filename should be a file that contains OSC bundles sorted in 

	ascending time order. If cmd-filename is the underscore character _, then OSC 

	will be streamed from standard input.

	The audio input will taken from input-filename. 

	If input-filename is the underscore character _, then no input file will be read. 

	Output will be written to output-filename.

	The output file's sample rate is specified by sample-rate.

	The output file header-format should be one of: AIFF, WAVE, NeXT. 

	The output file sample-format should be one of: int16, int24, int32, float, double. 

	The number of channels in the output file is specified with the -o argument.

-N cmd-filename input-filename output-filename sample-rate header-format sample-format

	�0�0�0�0�0�0�0�0�0�0�0g0�[L�Y0�00

	cmd-filenameo0�QtBf���k0&Ny0�0�0_0OSC�0�0�0�0L0��U0�0f0D0�0�0�0�0	�0�0c�[Y0�00cmd-filenamek0"_"L0+T~0�0f0D0�04XT0OSCo0j�neQ�RK0�0eQ	�RU0�0�00

	�0�0�0�0�0eQ�Ro0input-filenameK0�0�c�OU0�0�00

	input-filenamek0"_"L0+T~0�0f0D0�04XT0�0�0�0�0K0�0o0��0��~0�0j0D00

	P}�go0output-filenamek0�Q�RU0�0�00

	�Q�R�0�0�0�0n0�0�0�0�0�0�0�0�0�0o0sample-rateg0c�[Y0�00

	�Q�R�0�0�0�0n0�0�0�0�0�0�0�0c�[Y0�0header-formato0AIFF0WAVE0NeXT	n0D0Z0�0K0�0c�[Y0�00

	�Q�R�0�0�0�0n0sample-formato00int160int240int320float0doublen0D0	Z0�0K0�0c�[Y0�00

	�Q�R�0�0�0�0n0�0�0�0�0�0peo0 -o _peg0c�[Y0�00





example:

�O�



scscynth -u 57117 >synth_log &

	

	Accept commands via UDP on port 57117. 

	Send output to file "synth_log"

	Run asynchronously: &.



scscynth -u 57117 >synth_log &



	UDP��O�057117ju�0�0�0g0�SQ0�NQ0�00

	�Q�R�0"synth_log"k0L�F00

	^�Tg(�0�0�0�0�0�0�0�0)g0�[L�Y0�0��



scsynth -N score.osc _ out.aiff 48000 AIFF int24 

	

	Run in non real time mode with command file score.osc, no input file, and output file named out.aiff. Sample rate is 48000. Output file header format is aiff, sample format is 24 bit integer.



scsynth -N score.osc _ out.aiff 48000 AIFF int24



	�0�0�0�0�0�0�0�0�0�0�0g0score.osc�0�0�0�0�Qn0�0�0�0�0�0�[L�Y0�00�Q�Ro0out.aiffk0L�F00�0�0�0�0�0�0�0�0�0o048000�0O(uY0�00�0�0�0�0b__o0AIFFg00�0�0�0�0n0b__o024bittepeg0B0�00



Binary Format of Messages

�0�0�0�0b__n0�0�0�0�0�0



Messages are similar in format to Open Sound Control messages, except that OSC #bundles may not be nested, and pattern matching of the command name is not performed. When streamed via TCP, Messages are each preceeded by a 32 bit integer giving the length in bytes of the message. UDP datagrams contain this length information already.



�0�0�0�0�0o0Open Sound Controln0�0�0�0�0�0h0T�in0�0n0`0L00OSCn0#�0�0�0�0�0eQ�0P[k0Y0�0S0h0o0g0M0j0D00~0_00�0�0�0�0
Tn0�0�0�0�0�0�0�0�0L��0�0j0D00TCPL}1ug0�0�0�0�0�0�0�SQ0�Sc0_04XT0]0�0^0�0n0�0�0�0�0�0n0w�U0�032bittepeg0��W0_0$PL0gRk0O0�00UDP�0�0�0�0�0�0k0o0S0n0�`1XL0�ek0+T~0�0f0D0�00



Types:

All values are in network byte order.

	long - a 64 bit integer. Used for time stamps only.

	int - a 32 bit integer.

	float - a 32 bit floating point number.

	string - a string of 8 bit ASCII characters, zero padded to a multiple of 4 bytes.

	bytes - a buffer of data preceeded by a 32 bit length field and padded to a multiple of 4 bytes. 



�0�0�0(b__)�

Y0y0f0n0$Po0�0�0�0�0�0�0�0�0�0�(MostSignificantBit first, big endian)

	long - 64bittepeb__0�0�0�0�0�0�0�0k0n00O(uU0�0�0

	int - 32bittepeb__0

	float - 32bitnm�R\pe�pb__0

	string - 8bit ASCII�eW[g0h��sU0�0�0�eW[R04byteXSMOg0qbF0(Unicode)0

	bytes - 32bitn0�0�0�0�0w��`1Xk0�}O0�0�0�0�0�0�0�004byteXSMOg0qbF00



Tags:

Command arguments have single character tags which occur in a tag string to identify their types.

	'i' - an int.

	'f' - a float

	's' - a string

	'b' - bytes



�0�0�

�0�0�0�0k0o00�0�0�0(b__)�0c�[Y0�0_0�0�NNn0�0�0�0�0�0�0�0��eW[L0(uD0�0�0�00

	'i' - int.

	'f' - float

	's' - string

	'b' - bytes





a Command consists of:

	string - the command name. See the Command Reference below.

	string - a string with tags defined by the types of the arguments to follow. 

			The tag string begins with a comma ',' character.

	...any combination of arguments of types: int, float, string or bytes.



�0�0�0�0n0�ib�� }�

	string - �0�0�0�0
T0Command Reference�0�Sgq0

	string - b__�0c�[Y0�0�0�00�0�0o0�0�0�0(,)g0�Y~0�00

	......�NM�0�0�0g0c�[W0_0b__n0_pe0



a Bundle consists of:

	time stamp - long. Time stamps are in the same format as defined by Open Sound Control :  The top 32 bits are seconds since 1970 and the lower 32 bits represent the 32 bit fraction of one second.

	...a series of Commands each preceded by a 32-bit integer byte length.



�0�0�0�0n0�ib�� }�

	�0�0�0�0�0�0�0 - long  �0�0�0�0�0�0�0o0Open Sound Controlg0�[�U0�0f0D0�0�0n0�0T�in0�0n0�0)R(uY0�00gRn032bito01970t^�NM�n0�ype�0h�W00NMO32bito0N�y�032bitg0h�W0_0$P0

	......�NM�032bittepeg0h�U0�0_0�0�0�0w�k0�}D0f0�0�0�0�0L0�}O00

	

a Message consists of:

	using UDP : 

		one Bundle or one Command.

		

	using TCP : 

		int - the length in bytes of the following message.

		one Bundle or one Command.

	

�0�0�0�0�0n0�ib�� }�

	UDPO(uBf�

		��0�0�0�0B0_0�0��0�0�0�0



	TCPO(uBf�

		int - �0�0�0�0�0n0w�U0�0byteg0��

		��0�0�0�0B0_0�0��0�0�0�0





Glossary

(u��Ɩ



buffer - a header and array of floating point sample data. Buffers are used for sound files, delay lines, arrays of global controls, and arrays of inter-synth patch points.



�0�0�0�0 - �0�0�0�0h0nm�R\pe�p�0�0�0�0�0�0�0n0M�RK0�0�ibU0�0�00�0�0�0�0o0�0�0�0�0�0�0�0�00�0�0�0�0�0�0�00�0�0�0�0�0��Wn0�0�0�0�0�0�0R0]0W0f0�0�0�0��n0�c�}M�Rg0)R(uU0�0�00



group - a linked list of nodes. groups provide ways to control execution of many nodes at once. a group is a kind of node.



�0�0�0�0 - #�P}U0�0_0�0�0�0n0N��0�0�0�0�0o0N�^k0YO0n0�0�0�0�0�d\OY0�0Kb�k�0�c�OY0�00�0�0�0�0�0�0�0�0n0N.zg0B0�00



MIDI - a protocol for sending music control data between synthesizers.



MIDI - �0�0�0�0�0�0��g0�0�0�0�0�0�0�0�0�0�0�0�0�S�0Y0�0n0k0(uD0�0�0f0D0�0�0�0�0�0�00



node - an object in a tree of objects executed in a depth first traversal order by the synth engine. There are two types of nodes, synths and groups.



�0�0�0 - �0�0�0�0�0�0�0�Qg0̎S���06R�_Y0�0n0k0(uD0�0�0�00�0�0�0�i �g0�ibU0�0�0�0�0�0�0�0�0n0XSMO0�0�0�0k0o0�0�0�0h0�0�0�0�0n0�d0n0.z^�L0X[(WY0�00



Open Sound Control - a protocol defined by CNMAT at UCBerkeley for controlling synthesizers. See http://cnmat.cnmat.berkeley.edu/OSC/ .



Open Sound Control - UC'Yf[Berkeley!hn0CNMATxvz@bg0��zvU0�0_00�0�0�0�0�0�0�0�d\OY0�0_0�0n0�0�0�0�0�00http://cnmat.cnmat.berkeley.edu/OSC/ �0�Sgq0



OSC - see Open Sound Control.



OSC - Open Sound Controln0weub_0



synth - a sound processing module. Similar to "voice " in other systems. Synths are referred to by a number.



synth definition - a definition for creating new synths. similar to "instrument" in other systems.



SynthDef(�0�0�0�[�) - �eW0O0�0�0�0�0\ObY0�0_0�0n0�[�0�Nn0�0�0�0�0g0o0}ihV(�0�0�0�0�0�0�0�0)k0�vS_Y0�00



TCP - a protocol for streaming data over a network.



TCP - �0�0�0�0�0�0
Ng0�0�0�0�0�0�0�0�0�0�0�0�S�0Y0�0_0�0n0�0�0�0�0�00



UDP - a protocol for sending datagrams over a network.



UDP - �0�0�0�0�0�0
Ng0�0�0�0�0�0�0b__n0�0�0�0�0�0�0�S�0Y0�0_0�0n0�0�0�0�0�00



copyright i� 2002 James McCartney

Japanese Translation by Kenji Yasaka, 2004





By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Jani Giannoudis
Software Developer (Senior)
Switzerland Switzerland
Jani is Co-founder of Meerazo.com, a free service which allows to share resources like locations, things, persons and their services in a cooperating group of people.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.1411023.1 | Last Updated 1 Aug 2013
Article Copyright 2008 by Jani Giannoudis
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid