Skip to content

csound 型、定数、変数

最終更新日時: 2025年08月25日 12:57

  • 編集中

定数は、1、3.14159、-73.45などの浮動小数点数です。これらは継続的に使用でき、値が変化することはありません。

  • Csoundは内部的にはk-rateで動作します 制御パスごとに各a-rate変数に対してksmps数のサンプルを処理する
  • スカラーである
  • すなわち、任意の時点で1つの値のみを取る
  • 主に制御データ、すなわちノート・レート(iレート変数の場合) または制御レート(kレート変数の場合)で変化するデータを保存
  • iレート変数とkレート変数は、音符のパラメータ値、音程、持続時間、 ゆっくり動く周波数、ビブラートなどを保存するのに便利です。
  • aレート変数は、情報の配列またはベクトル
  • aレート変数はkレート変数と同じパーフタイム制御パスで更新されますが、 これらの配列セルは、 制御周期をサンプル周期(ksmpsを参照)に分割することで、 より細かい時間分解能を表します。
  • aレート変数は、オーディオサンプリングレートで 変化するデータ(オシレーターやフィルターなどの出力信号など)の 保存と呼び出しに使用されます。
  • いくつかのタイプの変数は、信号として考えることができる。 例えばa-rate変数やk-rate変数は、 一定の更新頻度を持つ信号です(krとsrを参照)。
  • この抽象化は一般的に非常に便利ですが、 a-rate信号は実際にはk-rateで処理される ベクトルであることに注意してください。
  • スペクトル処理に使用され、 そのレートはウィンドウ・サイズと オーバーラップ係数によって決定されます。

ローカル変数とグローバル変数

Section titled “ローカル変数とグローバル変数”
  • このように、ローカル変数とグローバル変数には9つの種類があります
  • 特定のinstrだけのもので他のinstrから読み取ったり書き込んだりすることはできません。
  • ローカル変数名は、 p、i、k、aの文字で始まります。 同じローカル変数名が、 2つ以上の異なるインストゥルメント・ブロックに、矛盾なく現れる グローバル変数は、 すべてのインストゥルメントからアクセス可能なセルです。 名前はローカル変数名と同じように gで始まるか、特別な予約記号である。
  • 一般的な値のブロードキャスト、 インストゥルメント間の通信(セマフォ)、
  • あるインストゥルメントから別のインストゥルメントへのサウンド送信(残響前のミキシングなど)に使用されます。

タイプ 更新可能時 ローカル グローバル 予約記号 パーマネント — rsymbol スコア pfields i-time p number — 初期変数 i-time i name gi name 制御信号 p-time、k-rate k名 gk名 オーディオ信号 p-time、k-rate(kパスの全オーディオサンプル) a name ga name スペクトルデータ型 k-rate w name — ストリーミングスペクトルデータタイプ k-rate f name gf name 文字列変数 i-time およびオプションで k-rate S name gS name ベクトル変数 k-レート t name

rsymbolは特別な予約記号(例えばsr、kr)、numberはスコアpフィールドまたはシーケンス番号を指す正の整数、nameは文字列、アンダースコア文字、ローカルまたはグローバルな意味を持つ数字である。MIDIコントローラはMIDIファイルやMIDIデバイスから非同期に更新される変数です。

  • 変数を初期化するオペコードは次の通りです:
    • assign
    • divz
    • init
    • tival
  • Csoundは、いくつかの重要な数学定数をマクロとして定義しています。全リストはこちらでご覧いただけます。
  • 本文書全体を通して、オペコードは太字で示され、

  • 引数と結果のニーモニックは、

  • 本文中で言及される場合、イタリック体で示される。

  • 引数名は一般にニーモニック(amp, phs)であり、

  • 結果は通常文字rで示される。

  • 両者の前には型修飾子i, k, a, xが付く(例:kamp, iphs, ar)。

  • 接頭辞iは、ノート開始時に有効なスカラー値を表し、

  • 接頭辞kまたはaは、演奏中(つまり楽器がアクティブな間は制御周期ごとに) 継続的に変更・参照される制御(スカラー)値 およびオーディオ(ベクトル)値を表します。

  • 引数は、接頭辞に記載された時刻に使用され、 結果は、記載された時刻に作成された後、 他の場所で入力として使用できます。

  • いくつかの例外を除き、 引数のレートは結果のレートを超えてはならない。 入力の有効性は以下のように定義される:

  • 接頭辞iを持つ引数は、init時に有効でなければならない;

  • 接頭辞kを持つ引数は、コントロール値またはinit値(これは有効なままである)のいずれかである;

  • 接頭辞 a を持つ引数は、ベクトル入力でなければなりません;

  • 接頭辞 x を持つ引数はベクトルでもスカラでもよい(コンパイラは区別する)。

特に断りのない限り、すべての引数は、その結果が上記に適合する式とすることができる。ほとんどのオペコード(linen や oscil など)は複数のモードで使用することができ、どのモードで使用するかは結果記号の接頭辞によって決まります。

このマニュアルでは、「オペコード」という用語は、通常aレート、kレート、またはiレートの出力を生成するコマンドを示すために使用され、常に完全なCsound orchestra文の基礎を形成する。や “sin(x)“、あるいは”( a >= b ? c : d) “のようなものを “演算子 “と呼ぶ。

Kレートベクター Csoundでは、1次元のベクトルやテーブルを宣言して配置することができます。 これらはインストゥルメントにローカルであり、 サイズを宣言する必要がある (initオペコードで。個々の要素は、 角括弧で括られた式の一部として読み込まれ、 kレートでインデックスを与えます。 個々の要素を代入することができ、 テーブルを照会したり変更したりするためのオペコードがいくつかある。

Csound6の関数構文 Csound6では、オーケストラ・コードに新しい代替構文が導入されました。 これは当初は実験的な機能で、以下に説明するような制限があります。 また、後方互換性のない言語機能の導入も可能になります。

概要 新しい構文の主な特徴は、いくつかのオペコードを関数として呼び出し、 オーケストラコードにインライン化できることです。 この一般的な形式は次のようなものである:

var* = op(exprlist*)

ここで*はオプショナル、varはCsound6型の1つの変数、 exprlistはカンマで区切られた式のリスト(または1つの式または変数)です。 これらの式は、インストゥルメント・ブロックや オペコード・ブロックの内部であればどこにでも置くことができる。 I-timeオペレーションは、 インストゥルメント・ブロックの外側に配置することもできます。 関数構文は、標準的なCsoundコードと混在させることができます。

以下に、これらの式の例をいくつか示します:

a1 = oscil(p4,p5) out(vco2(p4*linen(1,0.1,p3,0.1),p5) out(oscili(in(),p5), in())

制限事項 主な制限は、単一の出力(または出力なし)を持つ オペコードのみが許可されるということです。 さらに、複数のオプション出力を持つオペコードは、 この形式では正常にパースされません。 これらのオプコードを使用できるようにするには、 ユーザー定義のオプコードでラップするか、 標準的なCsound構文とこの新しいスタイルを混在させる方法があります。

opcodeの曖昧さを解決するために、op:type(exprlist)という形式の型注釈を導入しました。例えば

a1 = oscili(oscili:k(p4,p5), 440)

は、オーディオ・レートのオペコードではなく、 オーディオ・キャリアの振幅を変調する コントロール・レートのオペコードを選択します。 入力引数から適用すべきオペコードの 正しいタイプを判断できない場合、タイプ注釈が必要になることがあります。


iステートメント(楽器または音符のステートメント)

Section titled “iステートメント(楽器または音符のステートメント)”

i - 特定の時間、特定の期間、楽器をアクティブにする。

1)楽器に-をつけるとその楽器の音符を止めることになる 2)楽器に小数点をつけるとマルチティンバーになる 3)音の継続時間を-1にすると無限に発音し続けるようになる 4)発音し続ける同じ楽器の楽器パラメータを上書きすると音が変更される

  1. 楽器にマイナスをつけるとその楽器の音符を止める: 楽器番号の前にマイナス符号を付けると、その楽器が演奏しているノートを止めることができます。これは、特定の楽器の活動を特定の時間に停止させるために使用されます。

  2. 楽器に小数点をつけるとマルチティンバーになる: 楽器番号に小数部を加えることで、同じ楽器の異なるインスタンスを同時に鳴らすことが可能になります。これにより、複数のノートを同時に、そして独立して制御することができます。

  3. 音の継続時間を-1にすると無限に発音し続ける: 持続時間(p3)に負の値を設定すると、そのノートは無限に持続されます。これは、持続的な音響効果やドローン音など、継続的な音を必要とする場合に特に有効です。

  4. 発音し続ける同じ楽器の楽器パラメータを上書きすると音が変更される: 既に発音中の楽器に新たなパラメータを提供することで、その音の性質を変更することができます。これにより、パフォーマンス中に音のダイナミクスや特性をリアルタイムで調整することが可能です。

このステートメントは、 ある楽器を特定の時間に特定の時間だけアクティブにします。 パラメータ・フィールドの値は、 そのインストゥルメントが初期化される前に渡され、 そのパフォーマンス全体を通して有効です。

i p1 p2 p3 p4 …

楽器番号、通常は非負整数。 オプションの分数部には、 連続するクラスターの特定の音符間のつながりを指定するためのタグを追加できる。

負のp1(タグを含む)を指定すると、 特定の “ホールド “ノートをオフにすることができる。

名前付き楽器の場合は、 文字列の最初の文字を`-‘にすることで否定することができます。

ビートと呼ばれる任意の単位での開始時間。

拍単位での継続時間(通常は正の値)。

負の値はホールドされた音符を開始する(iholdも参照)。 負の値は、リバーブのような「常時オン」の楽器にも使用できます。 このような音符はs文では終了しない。 0を指定すると、演奏を伴わない初期化パスが実行される(instrも参照)。

インストゥルメントによって意味が決まるパラメータ。

この楽譜セクションに t 文があるか、 コマンドラインに -t フラグがない限り、 拍は秒として評価されます。

開始時刻や動作時刻は、 セクションの先頭からの相対的なものであり(s文を参照)、 時刻0が割り当てられます。

セクション内の音符は、 どのような順序で配置してもかまいません。 オーケストラに送信する前に、 順序のない楽譜はまずソーターによって処理されなければなりません。 同じp2値を持つ音符は、p1の昇順で並べられます。

音符は積み重ねることができます。 つまり、1つの楽器でいくつでも同時に演奏することができます。 (楽器のデータ空間の必要なコピーは、 オーケストラローダーによって動的に割り当てられます)。

各ノートは通常p3デュレーションが終了するか、 MIDIノートオフシグナルを受信するとオフになります。

インストゥルメントは、 ノートの初期化中にp3値を変更するか、 リネンまたはxtratimユニットの動作によって それ自体を延長することで、 それ自身のデュレーションを変更することができます。

負のp3を与えるか、 i-timeコードにiholdを含めることで、 楽器をオンにして無期限に演奏させることができます。

ホールドされたノートがアクティブな場合、p1に一致するiステートメントは新しいアロケーションを起こさず、ホールドされたノートのデータ空間を引き継ぎます。新しいpフィールド(p3を含む)が有効になり、i-timeパスが実行され、その中でユニットが新たに初期化されるか、タイド・ノート(tigotoを参照)に必要な継続が許可されます。ホールドされた音符は、別のホールドされた音符か、継続時間の決まった音符によって継承されます。ホールドされた音符は、セクションの終わりを越えて演奏し続けます(s文参照)。ホールドされた音符は、turnoff、i文と否定一致するp1、またはe文によってのみ停止されます。

同じインストゥルメントの複数のインスタンス(通常は異なるピッチのノートですが、必ずしもそうではありません)を、負のp3値を使って同時に保持することができます。この場合、楽譜から楽器の新しいパラメータを与えることができます。これはハードコーディングされた長いリンセグを避けるのに便利で、楽器番号に小数部を追加することで実現できます。

例えば、単純な和音で楽器10のコピーを3つ保持する場合:

i10.1 0 -1 7.00
i10.2 0 -1 7.04
i10.3 0 -1 7.07

楽器の定義が適切に行われていれば、 新しいpフィールドを使って進行中の音符の性格を変えることができます。 例えば、前の和音を1オクターブ上にベンドし、それを解放する:

i10.1 1 1 8.00
i10.2 1 1 8.04
i10.3 1 1 8.07

ヒント ノートをオフにする場合は、i 1.1 == i 1.10 および i 1.1 != i 1.01 に注意してください。使用できる最大小数点以下の桁数は、Csoundがコンパイルされたときの精度に依存します。