「SuperCollider」カテゴリーアーカイブ

音響合成プログラミング言語「SuperCollider」の勉強会が東京で開催されます

もう6年くらいSuperColliderというプログラミング言語を音楽制作に使っています。
IMIでサウンド専攻生にレクチャーしたり、京都でtn8さんimoutoidさんと語り合ったりしましたが、それらは例外的な出来事で…基本的に同士と語り合う機会なんてなかなかない、マイナーな言語なのです 🙁 (社会人になってアカデミズムから離れたらなおさら)

そんな中、Twitterという情報拡散ツールとテキストベースのプログラミング環境を持つSuperColliderは微妙に相性がよいのでしょう、ユーザーがクチコミで徐々に増えているような気がしています。そしてついに東京で勉強会が開催されます!

主催はitaruさんで初回は豪華メンバーが揃う予定!関東近郊でプログラミング音楽に興味がある方は、SuperCollider未経験でもぜひぜひ参加されたし!

» Tokyo SuperCollider #1 – 7/10開催決定

SuperColliderで連想配列を使うDictionaryクラスの概説。 #supercollider

SuperColliderで用意されているDictionaryクラスに初挑戦してみた。

連想配列と一口に言っても言語によって実装はまちまち。PHPでは配列と連想配列に区別はなくどちらもArrayだし、Javascriptでは連想配列はオブジェクトとして扱われ配列とは別だ。ま、詳しくはないんだけど、とにかく各言語によって違うのは確か。

ちなみに、スパコと同じくSmalltalkの系譜を引くObjective-Cにはその名もズバリNSDictionaryクラスが存在する。ので、手持ちのCocoaプログラミングの本で辞書のページを引いてみたがやはりひと言で説明するのは難しい。まぁ、平たく言うとキーと値をセットにして複数保存しておける仕組みのことだ。

使いかたは、newメッセージで辞書を作りaddメッセージで辞書に項目を足していく。

d = Dictionary.new;
d.add('monkey' -> 0).postln;
d.add('robot' -> 1).postln;

このコードで↓のような辞書ができる。

Dictionary[ (monkey -> 0), (robot -> 1) ]

辞書ができたら引かなければならない。参照するには配列と同じatメッセージを使う。

d.at('robot');

この結果はrobotをキーとする値だから、「1」になる。削除は同様にremoveAtメッセージを使う。

続きを読む SuperColliderで連想配列を使うDictionaryクラスの概説。 #supercollider

SuperColliderの音をUstream Producerに流す方法

結論から言うとSuperColliderに限らず様々な用途に使える手段のようですが、こういう検索をする人の役に立つかなと思ってブログに書くことにします。

soundflowerという仮想オーディオデバイスを使うと、SuperColliderの音をsoundflowerに流し、その音をsoundflowerを入力デバイスとしてUstream Producerに入れることができる、と。説明難しいですね。SuperCollider側の設定も必要なく、非常に簡単なので試してみてください。

  1. soundflowerをインストールする。
  2. システム環境設定>サウンドで、入力・出力ともにSoundflowerにする。
  3. SuperColliderを起動する。うまく行っていれば起動時のメッセージでInput deviceとOutput DeviceがSoundflowerになっていることを確認できます。特に設定の必要はありませんでした。
  4. Ustream Producerを起動し、Live Inputを右クリックして、こちらでもSoundflowerを選択する。
  5. 以上。

こちらの記事を参考にさせていただきました。

http://veadardiary.blog29.fc2.com/blog-entry-1038.html
http://www.moongift.jp/2009/05/soundflower/

SuperColliderのネタ探し中

Twitterで音楽を奏でる!というのを研究してるんだけど、方向性に行き詰まってsupercollider.jpの過去ログをだらだら見ていたらL-systemの話題があった。otophiliaさんの話題はいつも高度だ。
L-system Base

短い文字列を再帰的に処理して複雑にするという意味では、Twitterから取得できるのは「短い文字列」だから面白いかもしれない。でもこれを耳で聴いて理解するには聴音能力が必要で一般の人には分かりづらいから今回は見送る…
だれでも参加できるというコンセプトのためには、分かりやすい必要がある。しかも、1分くらい遅れて反映されても分かる変化が…色々悩んでいます。

しかし、imoutoid = otophiliaのコードを音にして公開したら需要あるのかな?
ジムノペディのコード・リミックスと、Demand UGenを試してみたコード、ACIDサウンドに挑戦したコードの3つくらいが、かろうじてまだ実行できるみたい。

彼の代名詞とも思ってた実行コード中の変数をぐりぐり変化させるという変態コードのotophiliaNumModifierは、もう今のバージョンのSCでは使えないみたいだし。

[SuperCollider] GUI Overview and Introductionを流し読む

SuperCollider3.3になってアップデートされたというGUIのヘルプファイル、「GUI Overview and Introduction」を、翻訳する時間もスキルも無いので、あくまで流し読みます。

——

Basic usage: Kits and Syntax

GUIを扱うには2つの基本的なクラスがあるらしい。SCWindowJSCWindow
SCWindowはMacで、JSCWindowはそれ以外かな?

Basic Usage: Windows, Containers and Decorators

ウィンドウの作り方はほぼ変わらずというか変えなくてもよくて、Windowと書けばMacならSCWindowが呼び出されると言うことのようです。

(
// Window returns the window class for the current kit
w = Window( "my name is...", Rect( 128, 64, 340, 360 ));
w.front;
)

Window内のパーツの配置の仕方は、ひとつずつ座標を指定するやり方と、作ったパーツ順に自動的にWindow内に詰めて流し込むやり方がある。CSSで言ったら position: absolute; か float: left; のような感じ。当然フロートの方がらくちん。
やりかたはこれでOK

w.view.decorator = FlowLayout(w.view.bounds);

流し込むエリアもCompositeViewで複数設定できるらしい。知らなかった…
そもそもWindow自体CompositeViewのサブクラスなんだとか。

(
w=Window.new.front;
w.view.decorator = FlowLayout(w.view.bounds); // notice that FlowView refers to w.view, not w

v=CompositeView(w, Rect(5,5,190,390));
v.background = Color.rand; 					// set the color
v.decorator = FlowLayout(v.bounds);

14.do{ Slider(v, 180@20).background_(v.background) };

)

vで設定した範囲内にスライダーが流し込まれます。

Window Coordinates

ミニ情報的な感じで。SuperColliderのウィンドウはスクリーンの左下が基準なので何かと扱いづらい。そんなときはウィンドウの高さを取得すればいいよ、と。

(
w=Window.new("A Precisely Placed Window",
Rect(100, Window.screenBounds.height-300, 300, 200 )

).front;
)

ウィンドウの高さを取得して、そこから300px引いた数値を基準点とする。ウィンドウの高さが200pxなので、画面の上端からは100px離れてるよ、と。

Actions: Performing Things with a GUI Widget

アクションを設定するには。スライダーなどのGUIのactionメソッドに書く。

(
w = Window ("A Slider");
a = Slider (w, Rect(40, 10, 300, 30));
a.action={ |sl| sl.value.postln }; // set the action of the slider
w.front
);

SuperColliderの「|sl|」という引数の受け方がいまいちなじめないが…
アクションを追加するにはaddActionメソッド、削除するにはremoveActionメソッドを使う。

// adding and removing an action:
f = { |sl| "--------*******-------".postln; };
a.addAction(f);
a.removeAction(f);

この辺はすごく分かりやすい。

Asynchronous GUI Techniques: Communicating with the Sound Server

GUIとサウンドサーバの間の非同期通信。必要性・内容ともにいまいちつかめず。
ただ、サンプル中のNumberBoxと言うクラスは便利ですね!
NumberBoxで生成したテキストフィールドをクリックし、上下へのドラッグや上下矢印キーの入力で、テキストフィールド内の数字を増減できる。何かと使えそう。

——–

ううむ。次はGUI Classesを流し読みます。