SuperCollider 3 Synth Server Architecture
SuperCollider 3 シンセサーバー構造

copyright © 2002 James McCartney
Japanese Translation by Kenji Yasaka, 2004

Introduction
はじめに

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 3のシンセサーバーはシンプルで強力な音響合成エンジンである。音響処理中であっても、新たにモジュールを作成・破棄・再構成ができ、サンプルバッファも随時作成・再構成することができる。エフェクト処理もシグナルの流れの中に動的に組み込むことができる。動作中の全モジュールはツリー状のノードとして配置され、処理順を定義できる。モジュール間のパッチ(接続)はグローバル領域にあるオーディオバス、コントロールバス経由で行われる。

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.

すべてのコマンドはOpen Sound Control(OSC)を簡略化したものをTCP、あるいはUDP経由で受け取られる。シンセサーバーとクライアントは同じマシンに存在することも、ネットワーク状に別々に存在することもできる。シンセサーバー自身はMIDI信号の送受信は行わない。これは、すべてのコントロールコマンドがクライアントから送られてくることを前提としているためである。MIDIを利用したい場合は、クライアント側で受け取り、シンセエンジンが理解できるOSCコマンドに変換してからシンセサーバーに送る必要がある。

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.

シンセの定義(楽器の定義)はSuperColliderクライアントにて生成され、ファイルとして保存される。ユニットジェネレータの定義はMach-O形式のバイナリで保存される。ユニットジェネレータのAPIはCで記述されている。

Main Design Concepts
デザインコンセプト

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.

ノード
ノードは、アドレス指定可能な個体であり、シンセエンジン内でツリー構造をなして動作する。ノードには２種類あり、シンセノードとグループノードが存在する。ツリー構造は、そのまますべてのシンセの処理順を定義する。ノードには一意の整数IDによって識別される。

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.

グループ
グループはノードの集合体であり、各ノードIDの一覧によって表される。新しいノードはグループの頭、あるいは後ろに追加できる。グループ内のノードはまとめてコントロールできる。グループ内のノードはシンセノードでもグループノードでも利用できる。SuperCollider起動時には最上位のグループのIDは"0"が定義される。

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(シンセ)
シンセはユニットジェネレータの集合体である。アドレス指定が可能で、シンセエンジンへのコマンドによってコントロールができる。入出力は、グローバル領域のオーディオバス、コントロールバスとやり取りが可能。シンセ自信の内部コントロールも可能で、サーバーへのコマンド経由で設定ができる。

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(シンセ定義)
シンセはSynth Definitionによって作成される。Synth DefinitionファイルはSuperColliderクライアントによって作成され、シンセサーバーに送られる。Synth Definitionは、それぞれにつけられたシンセ名によって参照される。

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"から始まる整数IDで識別される。シンセ自身をお互いに接続せずにバス経由にすることで、他にあるシンセのことをそれぞれ認識することなくシンセの集合体に接続できるようになる。IDの数字の低いバスが実際のオーディオ出力装置に接続される。オーディオ出力に接続された番号に続くIDがオーディオ装置からの入力バスとなる。入出力のためのバスの数は、オーディオ入出力装置に対応させる必要はない。

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"から始まる整数IDで識別される。

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.

バッファ
バッファは記述可能な小さなヘッダがついた32bitの浮動小数点の配列である。バッファはグローバル領域に"0"から始まる整数IDによって識別、保持される。バッファは音響合成処理中でもユニットジェネレータが使用中であっても、安全に作成・利用・解放することができる。バッファは波形テーブル、サンプルバッファ、ディレイライン、エンベロープ、あるいはその他浮動小数点の配列を格納するのに利用できる。サウンドファイルからバッファへ読み込むことも、バッファからサウンドファイルへ書き出すこともできる。

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. 

ユニットジェネレータ定義
ユニットジェネレータ定義はプログラムが開始される際に自動的に読み込まれるプラグインである。バイナリコードのライブラリであり、音響合成アルゴリズム構築の際にシンセによって利用されるパーツとなる。ユニットジェネレータ定義はSuperColliderの言語クラスで使用されるSynthDefの構築にも用いられている名称と同様のものが用いられる。

Command Line Arguments
コマンドラインオプション

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

以下の"-u"か"-t"は必ず指定する必要がある。両方指定することも可能。
-u udp-port-number
	0〜65535までのポート番号
-t tcp-port-number
	0〜65535までのポート番号
	
-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
	使用するオーディオ入出力装置の名称。指定がない場合はOSのデフォルト装置	が割り当てられる。現在のところこのオプションは無視され、デフォルトの装置	が選択される。
	
-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
	オーディオバスのチャンネル数(初期設定は128チャンネル)
	オーディオバスに割り当てられるアドレス空間は (チャンネル数 x (ブロックサイ	ズ + 1) x 4)
-i num-input-bus-channels
	number of audio input bus channels (default = 2)
-i num-input-bus-channels
	オーディオ入力バスのチャンネル数(初期設定は2)
-o num-output-bus-channels
	number of audio output bus channels (default = 2)
-o num-output-bus-channels
	オーディオ出力バスのチャンネル数(初期設定は2)
-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
	コントロールバスのチャンネル数(初期設定は4,096)
	コントロールバスに割り当てられるアドレス空間は (チャンネル数 x 8)
-b num-buffers
	number of sample buffers (default = 1024)
-b num-buffers
	サンプルバッファ数(初期設定は1,024)
-n max-nodes
	maximum number of nodes (default = 1024)
-n max-nodes
	最大ノード数(初期設定は1,024)
-d max-synth-defs
	maximum number of synth definitions (default = 1024)
-d max-synth-defs
	SynthDef(シンセ定義)の最大数(初期設定は1,024)
-D 1 or 0
	if zero, then synth definitions will not be loaded on start up. (default = 1)
-D 1 or 0
	ゼロの場合、SynthDef(シンセ定義)は起動時に読み込まれない(初期設定は1)
-z block-size
	The number of samples in one control period. (default = 64)
-z block-size
	１周期に読み込まれるサンプル数(初期設定は64)
-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)
-S preferred-sample-rate
	If non-zero, it will attempt to set the hardware sample rate. (default = 0)
-S preferred-sample-rate
	ゼロ以外の場合、ハードウェアのサンプルレートを与えられた値に設定しようと	試みる(初期設定は0)
-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
	リアルタイム処理用のメモリ使用量をキロバイトで指定する。
	このメモリはシンセを含め、あらゆるユニットジェネレータ自身が割り当てるメ	モリとして利用される(初期設定は2,048)
-r random-number-generators
	The number of seedable random number generators. (default = 64)
-r random-number-generators
	利用可能な乱数生成機能の数(初期設定は64)
-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
	ユニットジェネレータ間を結ぶ際に利用されるバッファの最大数。実行時に読み	込み可能なSynthDef(シンセ定義)の複雑度を制限できる。この値を大きくするこ	とでより複雑なシンセ定義を起動時に読み込めるが、一旦音響処理が開始されて	から変更することはできない。(初期設定は64)]

-l max-logins
	maximum number of named return addresses stored (default = 64)
	also maximum number of tcp connections accepted
-l max-logins
	保存されている名前付きのアドレスの最大数(初期設定は64)
	また、TCP使用時には最大接続数を指定
-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利用時のセッションパスワードを指定。初期設定ではパスワードなしになっ	ている。UDPポートではパスワードは必要とされないため、パスワードによるプ	ロテクトが必要な場合はTCPを利用する。

-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
	デバイス上の必要としていない入力ストリームを無効にできる。01100と指定	した場合、デバイス上の第２と第３入力ストリームのみが有効となる。ストリー	ムを無効にすることでCPUの負荷を軽減できる。

-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
	デバイス上に必要としていない出力ストリームを無効にできる。11000と指定	した場合、デバイス上の最初の２つの出力ストリームのみが有効となる。スト	リームを無効にすることでCPUの負荷を軽減できる。
	
-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
	ノンリアルタイムモードで実行する。
	cmd-filenameは処理時間順に並べられたOSCバンドルが記述されているファイ	ルを指定する。cmd-filenameに"_"が含まれている場合、OSCは標準入力から入	力される。
	オーディオ入力はinput-filenameから提供される。
	input-filenameに"_"が含まれている場合、ファイルからは読み込まれない。
	結果はoutput-filenameに出力される。
	出力ファイルのサンプリングレートはsample-rateで指定する。
	出力ファイルのフォーマットを指定するheader-formatはAIFF、WAVE、NeXT	のいずれかを指定する。
	出力ファイルのsample-formatは、int16、int24、int32、float、doubleのい	ずれかを指定する。
	出力ファイルのチャンネル数は -o 引数で指定する。

example:
例：

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通信を57117番ポートで受け付ける。
	出力を"synth_log"に行う。
	非同期(バックグラウンド)で実行する：＆

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

	ノンリアルタイムモードでscore.oscファイル内のコマンドを実行する。出力はout.aiffに行う。サンプリングレートは48000を使用する。ファイル形式はAIFFで、サンプルの形式は24bit整数である。

Binary Format of Messages
バイナリ形式のメッセージ

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.

メッセージはOpen Sound Controlのメッセージと同様のものだが、OSCの#バンドルを入れ子にすることはできない。また、コマンド名のパターンマッチも行われない。TCP経由でメッセージを受け取った場合、それぞれのメッセージの長さを32bit整数で記述した値が最初にくる。UDPデータグラムにはこの情報が既に含まれている。

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. 

タイプ(形式)：
すべての値はネットワークバイト順(MostSignificantBit first, big endian)
	long - 64bit整数形式。タイムスタンプにのみ使用される
	int - 32bit整数形式。
	float - 32bit浮動小数点形式。
	string - 8bit ASCII文字で表現される文字列。4byte単位で扱う(Unicode)。
	bytes - 32bitのバッファ長情報に続くバッファデータ。4byte単位で扱う。

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

タグ：
コマンドには、タイプ(形式)を指定するため以下のアルファベット１文字が用いられる。
	'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.

コマンドの構成要素：
	string - コマンド名。Command Referenceを参照。
	string - 形式を指定するタグ。タグはコンマ(,)で始まる。
	......以降、タグで指定した形式の引数。

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.

バンドルの構成要素：
	タイムスタンプ - long  タイムスタンプはOpen Sound Controlで定義されているものを同様のものを利用する。最初の32bitは1970年以降の秒数を表し、下位32bitは一秒を32bitで表した値。
	......以降、32bit整数で表されたデータ長に続いてコマンドが続く。
	
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.
	
メッセージの構成要素：
	UDP使用時：
		１コマンドあたり１バンドル

	TCP使用時：
		int - メッセージの長さをbyteで記述
		１コマンドあたり１バンドル

Glossary
用語集

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.

バッファ - ヘッダーと浮動小数点サンプルデータの配列から構成される。バッファはサウンドファイル、ディレイライン、グローバル領域のコントロール列、そしてシンセ間の接続配列で利用される。

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

グループ - 連結されたノードの一覧。グループは一度に多くのノードを操作する手段を提供する。グループもノードの一種である。

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

MIDI - シンセサイザ間でコントロールデータをやり取りするのに用いられているプロトコル。

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.

ノード - シンセエンジン内で軌道順を制御するのに用いられる、ツリー構造で構成されるオブジェクトの単位。ノードにはシンセとグループの２つの種類が存在する。

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

Open Sound Control - UC大学Berkeley校のCNMAT研究所で開発された、シンセサイザを操作するためのプロトコル。http://cnmat.cnmat.berkeley.edu/OSC/ を参照。

OSC - see Open Sound Control.

OSC - Open Sound Controlの省略形。

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(シンセ定義) - 新しくシンセを作成するための定義。他のシステムでは楽器(インストルメント)に相当する。

TCP - a protocol for streaming data over a network.

TCP - ネットワーク上でストリームデータをやり取りするためのプロトコル。

UDP - a protocol for sending datagrams over a network.

UDP - ネットワーク上でデータグラム形式のデータをやり取りするためのプロトコル。

copyright © 2002 James McCartney
Japanese Translation by Kenji Yasaka, 2004