Csound @ ウィキ

3. オーケストラやスコアを書く

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集
この章では二つの短いセクションで、一般的にソフトウェアシンセサイザーとはどんなものか、そしてCsoundはどんな風に動くか、について説明します。
興味がなければこれらのセクションを飛ばしてもかまいません。
その後のセクションでは、最も簡単な楽器(instrument)を書き、少しずつ改良しながらよりよいサウンドを作っていきます。

3.1 信号伝達線図(Signal Flow Graphs)

ほとんどすべてのソフトウェアシンセサイザーは、ユニットジェネレーター(発振器とかフィルタ、Csoundではopecodes:オペコードと呼びます)の集まりで、あるユニットの出力を別のユニットの入力につないだりして設定します。
それは、小さな電子式ユニットをコードでつなぐMoogシンセサイザーのような電子式モジュラーシンセサイザー(といっても日本では普通シンセサイザーといえばすべて電子式ですが)に似ています。

ソフトウェアエンジニアリングの世界では、このように線で結ばれたダイヤグラム(図)の事を同期信号伝達線図 (synchronous signal flow graph)といいます。
発振器(オシレーター)、フィルター、変調器(モジュレーター)、エンベロープジェネレーター、算術オペレーター、ファンクション(関数)がユニットジェネレーターの全部です。

Csoundでは、オーケストラファイルの中に書かれる、instr (インストゥルメント)ブロックが一つのユニット(signal flow graph)です。

このインストゥルメントへの入力はいくつかのpフィールド(パラメータフィールド)で示され、pフィールドの値はスコアファイル中のiステートメントや、リアルタイムイベントの内容で決まります。

p1 常にインストゥルメントナンバー(楽器の番号、「instr n」のn)を示す。整数または実数(小数点付きの数)。
小数点以下があるインストゥルメントは、同じ小数点以下の数が指定されたノートイベントを、以前の処理から初期化なしに受信できる。二つのノートをスラーでつないだような滑らかな発音をさせたいときを想定している。

p2 スコアイベントの開始時刻。普通は単位は秒であるが、スコアにtステートメント(テンポ指定)があれば章節指定となる。

p3 スコアイベントの持続時間(いわゆるゲートタイムという奴)。インストゥルメントは、この渡されたp3フィールドの値を変更することが出来る。

p4..pN p4以上のパラメータはユーザー定義である。スコアのiステートメントの4番目のパラメータ以後が渡されるらしい。チュートリアルでは、p4を音の高さとしてMIDIのキー(音の高さ)番号(*1)を、p4を音の大きさとしてMIDIのベロシティの値(*2)を割り当てて使っている。

*1: MIDI キー番号は音の高さを示していて、中央Cの音=60とする、0-127の範囲の数値である。Csoundでは、ピッチをずらす目的で小数点付きのMIDIキー番号が使える。

各Csoundのオペコードはunit generatorであり、一行のテキストで記述する。定義文、論理演算子、算術演算子も使用できる。

オペコードは0個以上の引数を入力とし、出力として0個以上の値を返すことが出来る。
インストゥルメントブロックの出力は、いろんなオペコードを使って通常outsまたはoutcへ出力される。
これらのオペコードがブロック内の記述に出力を明示していない場合は、信号流れ図グラフのルートノードとなる。...意味不明

Csoundでは変数やオペコードはそれぞれ異なった周期で更新される。

i-rate
初期化時のタイミング。「i」で始まる変数は、インストゥルメントが初期化されるタイミングで値が決定され、以後値は変わらない。

k-rate
制御周期のタイミング。「k」で始まる変数は、制御周期(control rateまたはk-rate)で変更(再計算)される。

a-rate
オーディオ周期のタイミング。「a」で始まる変数はベクター値で、サンプルフレームレート(要するにオーディ音号のサンプリングレート、fs)で更新される。
すべてのオーディオの入出力信号は、「a」で始まる変数に割り当てなければならない。

3.2 Csoundの処理内容

3.2.1 Csoundが取り扱うファイル