いらないモノ、ひつようなモノ

書籍、音楽、そして若干のテクノロジー

csoundとは

←csoundメモ 目次へ戻る

私的なcsoundへのオマージュ

csoundとは「音」をデザインするための文学的なシステムである。

Xeroxで生まれたWindowシステムのマウスによるポインティングやペン入力ではなく、スマートフォンで再発明された音声入力でもなく、キーボードとエディタでのテキストによる入力。これがあらゆる情報処理とそこから生み出される表現形のDNAである。0/1よりも人間的。音声入力や手書き表現よりも原始的。その原始性と結びついた音響システム。これがcsoundである。

感情を表現するためにopcodeを組み合わせてスコアを一行一行書き、積み重なったテキストが音の物語を紡ぎだす様子は共感覚的にすら通じるところがある。

csoundのコードを持って誰も聞いたことのない音響を生み出すことを夢見る。そんな想像を膨らますことを許してくれることが人をcsoundへと誘うのではないだろうか。文学も文字というありふれた記号を使って誰も聞いたことのない物語を作り出す営みだとすれば、それらはとても似ていると感じてしまう。

csoundは多様な音響技術一般(生成、解析、フィルタリング、、、)を貪欲に取り込み、多様な外部システム(MIDI, VST, DSSI, LADSPA, SoundFont2, PureData, Faust, TCP/IP, C, Java, Python, Lua, OSC, Android...)に触手を広げ続け拡張を続ける。

常に新しい技術と結合と変形を繰り返す一方、どこか旧式な、まるでテレタイプしかなかった太古の電脳世界を思わせる奇妙なレトロ感覚が潜んでいる。

それは隔絶された世界で脈々と生きつづける音響の原生命が独自に進化を遂げる見たこともない動物の姿を見てるようだ。

その意味でもcsoundは決して美しく洗練されたシステムではない。理解しがたいほどたくさんの演算子。独自の記法。原始的な言語体系。むしろ色々な無駄と奇妙な矛盾を含んだ実験的なシステムに見えてしまう。でもだからこそ、自分でも極めて非力な実験を細々と繰り返して何かを見つけることを期待してしまうのかもしれない。

こうして不思議な可能性を感じさせてくれるのがcsoundなのだ。それは商用のGUIや機能が優れたシステムとは異なり、UnixからLinuxに引き継がれた不完全で自由度の高いシステムが提示してくれるものと同じであるように感じる。

個人的に情報処理の根源がキーボード操作に根ざしている部分が大きいのでcsoundに共感を覚えるところがある。これは100年先には理解されない感覚なのかもしれない。100年先にもcsoundは残っているのだろうか。もっと自然な形でDAWと結合されて表現の仕方が広まっているのかもしれない。

機能面から見たcsound

csoundいくつかの側面を持っている。

  • csoundの動作
    • 楽器をオプコードで定義し、楽器を指定した時系列のスコアにより発音タイミングを決定し発音させる
    • 楽器は音の強さ、発音時間、トーン以外にもユーザが自由に変数を定義できる。
    • スコアでは楽器の全パラメータをすべて指定することができるので無限の可能性を秘めている。
    • 楽器やスコアを動的に変更するためのいろいろな手段を要していてパフォーミング・アートにも利用できる
  • 音響合成
    • csoundの主目的。csoundの言語により生成した"音"をファイル(wav, aiff, ircamのフォーマットは選択可能)に落としたり、オーディオデバイスを通じて直接発音させたりすることができる。
    • 加算・減算方式、各種変調の音声合成だけではなく、グラニュラー・シンセシス、ハイパーベクトリアル・シンセシス、スキャンド・シンセシス、ウェーブ・テレイン・シンセシス、導波管の物理モデリングによる音声合成など多様な方法が選択できる。moogなんていうmini-Moogのエミュレーションをするopcodeまである。当然、自分で新しい方法を作り出してそれを実装することもできる。
    • フィルタ(ハイパスフィルタ、ローパスフィルタ、双二次フィルタ、バターワースフィルタ、レゾナントローパスだけで18種類あった*1ポルタメントしてくれるフィルタもある)やエフェクタ(ディレイ、パン、リバーブ、ディストーションフランジャーフェイザー、ハーモニックス、パンニング関連だけを見てもその中には3次元音響など25個あった*2、モーフィングも数種類ある)、も一通り揃っている。
    • 三次元音場、や高次元のスピーカーもサポートしている。
  • 音響解析
    • 音声サンプルを与えて解析。基本的にはリシンセサイズしたりモーフィングの目的で解析する。
  • MIDI音源
    • MIDIファイルを入力として音をレンダリングすることができる。トラックダウンするイメージ。
    • リアルタイムなMIDI入力に対してもリアルタイムなレンダリングは可能。しかしその目的で作られていないためlatencyが大きくなりがち。
  • その他
    • MIDIやOCSなどを受信してsystemというOPCODEでコマンドを実行するという変態的使い方も可能*3
    • イメージの処理もできる
入力
  • オーケストラ
    • 楽器を定義するのが主目的。楽器は音を出すものもあれば、信号処理つまりエフェクタとして働くものや制御だけをするもの、標準出力に表示だけをするものも定義できる。
    • 楽器以外にはサンプルレート、コントロールレート、チャネル数、大域変数などの初期化、ZAKの初期化、MIDIチャネルと楽器の対応づけなど各種初期化を行う。
  • スコア
    • 楽譜を定義するのが主目的。ただし一般的な楽譜ではない。1行の英数字記号列が一つの音符やテンポ、スコアセクションの定義である。(実はそれ以外にファンクションテーブルの宣言行もあるがこれは別途説明する)その音符は楽器の発音だけでなく楽器の制御に対応することなどもできる。csoundにおいて音符に対応するスコアの1行は「楽器に指示を与える」という意味と解釈できる。一行の中に含まれるパラメータの数や意味を定義できる。
    • オーケストラ、スコアに加えてcsoundのコマンドラインに与えるパラメータやライセンス情報などを加えたUnified File FormatもしくはCSDファイルという形式が定義されている。XMLもどきなファイル形式。
  • 音声(ファイル)
    • soundinやdiskinでオーディオファイルを取り込むことができる。
    • insやZAKであればinzなどでステレオのオーディオストリームを読みこむことができる
    • bbcuts/bbcutmで取り込んだオーディオファイルを自動でブレイクビーツの要領で切ることができる他、普通のサンプラーのように伸縮や逆方向の再生も可能。
  • MIDI信号
    • MIDI信号はすべての信号を読みこむことができる。スコアファイルとMIDI信号からの両方から使えるようにデザインされたOPCODEとMIDIからのみからしか使われることを想定していないOPCODEがある。MIDI信号は一つのチャネルからくる信号を一つの楽器にしか振り分けられない。
  • マウス、キーボード操作
    • csoundは各種ウィンドウを表示することができる。その操作のためのマウスやキーボード操作
    • GUIの入力だけではなくsensekeyというopcodeはキー入力したASCIIコードを返すし、xyinはWindowのカーソル位置のX、Y座標値を返す。これらを定義した楽器で活用することができる。
  • テキスト
    • GUIのそうだけではなく、コマンドラインからパラメータとして渡したり、標準入力からテキストを渡すこともできる。
出力
  • 音声(ファイル)
    • 音声ファイルはモノラル、ステレオだけでなく4チャンネル、8チャンネルまでサポートしている。サンプリング周波数はオーケストラで設定できる。
  • スペクトル解析
    • 解析して音をモルフィングしたり、リシンセシスするためにサウンドファイルをフーリエ解析した結果をファイルに蓄えそれを読みこんで音声合成を行う。
  • テキスト
    • print系のコマンドで出力できる。楽器発音時、制御レート、任意の頻度での出力が可能
    • コマンドライン引数(-m)でテキスト出力するメッセージを制御可能
  • GUI
    • FLTKを用いてスライダーやボタンなどを持つGUIが構築可能
    • ファンクションテーブルの内容をWindowに出力することも可能

主たる動作環境

  1. MS-DOS
  2. Windows(NT,XP,Vista,7,8....)
  3. (多分すべての)GNU/Linuxディストリビューション
  4. Mac(細かいOSとか知らない)
  5. Android(2012年より)
  6. iOS(未確認)

重要なcsound用語

  • opcode(オプコード)
    • csoundの言語の持っているコマンドを特にそう呼んでいる。マニュアルに従えば分類できる。信号生成、信号入出力、信号修飾、楽器(instrument)制御、ファンクションテーブル制御、算術演算子、ピッチ変換、リアルタイムMIDI、スペクトル処理、文字列処理、ベクトル処理、ZAKパッチング処理、各種プラグインホスティング、OSC(Open Sound Control)とネットワーク処理、ミキサー処理、信号フローグラフ、擬似Jackポート操作*4Luaブリッジ、pythonブリッジ、イメージ処理、STKオプコード群*5、その他オプコード群(実際systemコールなど少数)に分類されている。
  • オーケストラ(orc)
  • 楽器(instrument)
  • CSDファイル
  • k-rate
  • ファンクションテーブル
    • ファンクションテーブルはfステイトメントによって作られる。
    • fステイトメントは第4引数にGENルーチンを示す数をパラメータに取るので、ファンクションテーブル、fステイトメント、GENルーチンはまとめて理解されるべきものである。
    • 言い換えると、fステイトメントの第一引数によって数字で名前付けされ、第四引数のGENルーチンによって決まるデータ生成規則と、第三引数のデータ数、第二引数の生成タイミングで構成される数列表がファンクションテーブルである。(わ、分かりにくい)。
    • ファンクションテーブルはシンセサイザーの波形に相当する
    • ちなみにfステイトメントはスコアの位置に記載されるのでスコアステイトメントの一種である。
    • 波形は”関数”によって生成された、数列表(テーブル)であるから、ファンクションテーブルと呼ぶのだろう
  • GENルーチン
    • GENルーチンがファンクションテーブルの実体。
    • 根っこは関数の数だけあるのだから、これまたいろいろなタイプのGENルーチンがある
    • サイン/コサインの波形生成、線分と指数関数、各種音声ファイルからの読み込み、数値指定によるグラフ・ステップ関数など、各種窓関数、乱数、フェーズボコーダ解析結果、n次多項式、チェビシェフ多項式、第二種チェビシェフ多項式、ほかファンクションテーブルを正規化、第二種ベッセル関数、ファンクションテーブルの合成、wavelet変換、Fareyシーケンス、sone関数、tanh関数、などなど

派生物と関連するシステム

csoundはOSによる違いの他メンテナーが異なっていくつかのブランチが存在するここでは、Linux上でコンパイル可能なものだけを対象にする。

    • Blue
    • Cellia
    • Bol Processor
    • Rosegarden
    • csounds.com

←csoundメモ 目次へ戻る

*1:2013年9月 csound6.00マニュアル参考

*2:2013年9月 csound6.00マニュアル参考

*3:やったことないんだけどねー

*4:Jackと協調して動作するものではなく、"Jacko"オプコード群と呼ばれている。

*5:STKとは、Synthesis Toolkit in C++という、音響処理のためのライブラリ群。これを使用してBrassや瓶、クラリネットシタールをモデリングした音源をcsoundでは利用可能。ただし、STKは基本的にオプションなのでcsound -zのコマンドでサポートしているモジュールに入っていなければ別途導入が必要