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、モーフィングも数種類ある)、も一通り揃っている。
- 三次元音場、や高次元のスピーカーもサポートしている。
- 音響解析
- 音声サンプルを与えて解析。基本的にはリシンセサイズしたりモーフィングの目的で解析する。
入力
- オーケストラ
- 楽器を定義するのが主目的。楽器は音を出すものもあれば、信号処理つまりエフェクタとして働くものや制御だけをするもの、標準出力に表示だけをするものも定義できる。
- 楽器以外にはサンプルレート、コントロールレート、チャネル数、大域変数などの初期化、ZAKの初期化、MIDIチャネルと楽器の対応づけなど各種初期化を行う。
- スコア
- 楽譜を定義するのが主目的。ただし一般的な楽譜ではない。1行の英数字記号列が一つの音符やテンポ、スコアセクションの定義である。(実はそれ以外にファンクションテーブルの宣言行もあるがこれは別途説明する)その音符は楽器の発音だけでなく楽器の制御に対応することなどもできる。csoundにおいて音符に対応するスコアの1行は「楽器に指示を与える」という意味と解釈できる。一行の中に含まれるパラメータの数や意味を定義できる。
- オーケストラ、スコアに加えてcsoundのコマンドラインに与えるパラメータやライセンス情報などを加えたUnified File FormatもしくはCSDファイルという形式が定義されている。XMLもどきなファイル形式。
- 音声(ファイル)
- soundinやdiskinでオーディオファイルを取り込むことができる。
- insやZAKであればinzなどでステレオのオーディオストリームを読みこむことができる
- bbcuts/bbcutmで取り込んだオーディオファイルを自動でブレイクビーツの要領で切ることができる他、普通のサンプラーのように伸縮や逆方向の再生も可能。
- MIDI信号
- マウス、キーボード操作
- テキスト
- GUIのそうだけではなく、コマンドラインからパラメータとして渡したり、標準入力からテキストを渡すこともできる。
出力
- 音声(ファイル)
- 音声ファイルはモノラル、ステレオだけでなく4チャンネル、8チャンネルまでサポートしている。サンプリング周波数はオーケストラで設定できる。
- スペクトル解析
- 解析して音をモルフィングしたり、リシンセシスするためにサウンドファイルをフーリエ解析した結果をファイルに蓄えそれを読みこんで音声合成を行う。
- テキスト
- print系のコマンドで出力できる。楽器発音時、制御レート、任意の頻度での出力が可能
- コマンドライン引数(-m)でテキスト出力するメッセージを制御可能
主たる動作環境
重要なcsound用語
- opcode(オプコード)
- スコア(score)
- オーケストラ(orc)
- 楽器(instrument)
- CSDファイル
- k-rate
- ファンクションテーブル
- ファンクションテーブルはfステイトメントによって作られる。
- fステイトメントは第4引数にGENルーチンを示す数をパラメータに取るので、ファンクションテーブル、fステイトメント、GENルーチンはまとめて理解されるべきものである。
- 言い換えると、fステイトメントの第一引数によって数字で名前付けされ、第四引数のGENルーチンによって決まるデータ生成規則と、第三引数のデータ数、第二引数の生成タイミングで構成される数列表がファンクションテーブルである。(わ、分かりにくい)。
- ファンクションテーブルはシンセサイザーの波形に相当する
- ちなみにfステイトメントはスコアの位置に記載されるのでスコアステイトメントの一種である。
- 波形は”関数”によって生成された、数列表(テーブル)であるから、ファンクションテーブルと呼ぶのだろう