SuperColliderで純正律を使う

現代の音楽文化においてはすっかり十二平均率が普及しているため、MIDIキーボードにせよ音楽作成ソフトにせよ、音律を変更すると言うことはほぼできませんが、SuperColliderならかんたんに平均率以外の音律を使うことができます。

平均率以外の音律を使うには、Scaleクラスを使うのが便利です。Scaleクラスを使うと長調、短調、またホールトーンや日本の律旋法など、様々な音階を取得することができます。これは音階にあてはめた音楽を生成するには便利ですが、次に示すサンプルではMIDIキーボードを作ろうとしているため、 .chromatic を指定しオクターブ内の12音全てを取得しています。

次に、Scaleオブジェクトに .tuning_ メッセージを送り、チューニングを変更しています。\justの場合は純正律、\et12だと12平均率、\mean4だと1/4コンマ中全音律、\pythagoreanだとピタゴラス音律になります。かんたんですね。

MIDIナンバーを音階に割り振り音度(Degree)を取得するのに .keyToDegree メッセージを使っています。さらに、音度からMIDIナンバーに戻すのに .degreeToKey メッセージを使っています。結局MIDIナンバーに戻しているのが不思議に感じるかもしれませんが、この時点で平均率以外を選択していれば小数点になるはずです(平均率からはずれる)。最後に .midicps メッセージで周波数に変換しています。処理が冗長なので、もっといい方法があれば教えてください。

Scaleクラスが対応している音階や音律を知るには、Scale.scファイルを見てソースコードを見るのが良さそうです(一覧が見つけられなかった)。音階は ScaleInfo クラス、音律は TuningInfo クラスで定義しています。バルトーク音階など音楽史上に現れた様々な音階、雅楽やラーガなど民族音楽の音階、さらに1オクターブに12音以上存在する特殊な音階も対応しています。ミーントーンも1/4、1/5、1/6に対応、キルンベルガー第3法、ウェンディ・カルロスの超純正律などマニアックなものも入ってます。実用性のほどは分かりませんが、この懐の深さがオープンソースのSuperColliderならではの魅力かもしれません。

SuperColliderでMIDIキーボード

MIDIInクラスのヘルプにMIDIキーボードのサンプルが載っていますが、ひとつのSynthオブジェクトに対して周波数や音量の変更のメッセージを送ると言うものなので、同時発音数は1になります。これでは実際の演奏にはとても耐えられません。以下のサンプルは同時発音数を128まで拡張したものです。

以前も同様のコードをSuperCollider.jpなどに投稿していましたが、SuperCollider3.6.x用に書き直しました。

node.jsとSuperColliderをOSCでつないでみる

nodejs  icon.supercollider

node.js はほぼ初体験ですが、どうしてもSuperColliderと組み合わせたくてチャレンジしてみました。

node.js とは、スケーラブルなネットワークプログラムをかんたんに開発するためのプラットフォームです。最近ではメタCSSのLESSがnode.jsで動いていて、ぼくもなんとなくLESSのためにMacにインストールしていたのですが、HTMLテンプレート言語のEJS, Webアプリケーションフレームワークのexpress, Sails.jsHogan.jsなどなどが出てきて、Webサービスの開発言語にどんどん採用されている…というイメージです。

で、node.jsとSuperColliderがどうつながるか、ですが、もともとnode.jsのデモとしてチャットシステムを見せてもらったんですが、完全にリアルタイムなんですよ。Skypeチャットなどはタイプした瞬間に相手にも見えているわけですが、それと同じようなことが自分でもできるというわけです。これは、リアルタイム性が要求される音楽の領域においては魅力的ですよね。

しかも、node.jsは言語としてはJavascriptなので習得がかんたん、npmというパッケージ管理システムがあるため環境構築もかんたん、イイコトずくめというわけです。

とはいえ普段仕事が忙しすぎてなかなか取り組む機会がないため、大阪で開催されたNode.jsの勉強会に参加して、どんな風に使われているのかと、環境構築についてちょっと勉強して来ました。
続きを読む node.jsとSuperColliderをOSCでつないでみる