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

iSuperColliderのビルド方法

先日のワークショップでiOS用のSuperColliderを紹介したことで、その入手方法の問い合わせが何度かあったので、ビルド方法のメモを書いておきます。ただし、これは2012年3月7日時点のレポジトリでの作業方法です。その後にソースコードが変更されることもあるでしょうから、同じように作業してもビルドできるとは限らないです。従って、質問されてもお答えできないってことでご了承願います。

How to build SuperCollider for iOS (March 7th, 2012)

Don’t ask me any questions 😉

Getting source codes

(1) Open Terminal

git clone git://supercollider.git.sourceforge.net/gitroot/supercollider/supercollider isc
cd isc
git checkout 3.5
git submodule init && git submodule update

Building SuperCollider.app (Language)

(1) Open isc/platform/iphone/iPhone_Language.xcodeproj

(2) Set Scheme to ‘SuperCollider > iOS Device’

(3) Set Build Configuration to ‘Release’

(4) Click iPhone_Language in the navigator area
Click SuperCollider in TARGETS
Click Build Settings
Scroll down to Search Paths and open Header Search Paths
Change ../../external_libraries/yaml-cpp-0.2.6/include to ../../external_libraries/yaml-cpp-0.3.0/include

(5) Open externals/yaml group of iPhone_Language in the navigator area
Remove src group
Add isc/external_libraries/yaml-cpp-0.3.0/src into externals/yaml group

(6) Click iPhone_Language in the navigator area
Click SuperCollider in TARGETS
Click Build Phases
Remove libsndfile_iphone.a from Link Binary With Libraries
Add isc/platform/iphone/lib/ libsndfile_iphone.a to Link Binary With Libraries

(7) Connect your iOS device and run

Building iscsynth.app (Synth)

(1) Open isc/platform/iphone/iPhone_Language.xcodeproj

(2) Set Scheme to ‘iscsynth > iOS Device’

(3) Set Build Configuration to ‘Release’

(4) Open Resources group in iPhone_Synth.xcodeproj in the navigator area
Click iscsynth_MainWindow.xib
Remove Dir Browser View Controller from Tab Bar Controller in Objects

(5) Click iPhone_Language in the navigator area
Click iscsynth in TARGETS
Click Build Phases
Remove scUBlibsndfile.a from Link Binary With Libraries
Add isc/platform/iphone/lib/ libsndfile_iphone.a to Link Binary With Libraries

(6) Connect your iOS device and run


以上です。

なお、このビルド作業ではFredrik Olofsson氏にヘルプしていただきました。感謝!(でも彼にも迷惑をかけないようにお願いしますね〜)

また、ワークショップで使用したiSuperColliderは、スリープを自動禁止にしたり、スピーカー選択のコードを修正したり、といった変更を少々加えています。

【追記】本記事初出時には2012年1月末時点のレポジトリでのビルド方法を記載しましたが、2012年3月7日に再度手順を検証して記事を書き換えました。

2/29は渋谷でワークショップ

2月29日はSuperCollider for iOSのワークショップを渋谷のWOMB LOUNGEで行わせていただきます。本日!なのですが、すでにワークショップは満員御礼とのことなので、事前の告知を控えさせていただいていました。受講される方はよろしくお願いします。

SuperCollider Workshop at WOMB LOUNGE
第4回「愛のSuperCollider」
 日時:2012年2月29日(水) 19:00〜22:00
 会場:WOMB LOUNGE(渋谷)

なお、3/3に開催される受講者の方々による作品発表会は当日参加可能とのことなので、ご興味のある方にお勧めします。

SuperCollider Workshop at WOMB LOUNGE 発表会
 日時:2012年3月3日(土) 19:00~22:00
 出演:SuperCollider Workshop at WOMB LOUNGE受講者のみなさま
ゲスト:Craftwife+Kaseo+
参加料:2,000円(1ドリンクつき)
 会場: WOMBLOUNGE(渋谷)

6月のimoutoidくん追想

今週末は「6月のimoutoid」と銘打たれたイベントが開催されます。若くして夭折された音楽家imoutoidくんにちなんだトーク、ライブ、DJ、VJが織りなす一夜だそうです。このイベントのために制作された特別小冊子が発行され、生前の貴重なライブ記録映像も上映されるとか。

imoutoid_in_june

イベント「6月のimoutoid」
日時:2011年6月25日(土)開場19:00 開演19:30
会場:六本木 SuperDeluxe
料金:予約2,500 円 /当日3,000円 (1ドリンク付)

私は出演するわけでもなく、お手伝いをするわけでもないのですが、会場でウロウロしていると思います。なぜって、実は一度だけimoutoidくんに会ったことがあるから。それは2008年7月に開催されたSuperColliderワークショップでのこと。その時の写真には、後ろ姿で小さく彼が写っている。この記事で以下のように書いたのは、まさに彼のこと。

個人的には、フル・シンセシス(サンプリングは使わない)で作られたディストーション・ギターのリズミカルなフレーズ・ジェネレータがお気に入り。年齢的にまだIAMASに入ることができないそうですけど、若輩才人くん、なかなかヤル〜って感じ。

彼のお父様はギタリストで、彼のSCコードから魔法のように紡ぎ出されるギター・リフはお父様お得意のファンク奏法にそっくりだと、最近になって聞いた。同じワークショップで披露していた花火のシミュレーションも、彼が育った地元の花火大会のそれだと言う。これらのコードは「The SuperCollider Book」に収録されている。

同じ日、軽口っぽく「18歳になったらIAMASにおいでよ」と話したことも覚えている。ありきたりの教育制度とはチョットと違うIAMASは、彼が活躍する場になったと思う。ほどなく彼は入試資料を取り寄せたものの、過去問題集を見て諦め顔だったそうだ。ありきたりの一般教養や主要科目の問題ばかりが目立ったに違いない。もう一度会う機会があれば、入試制度もチョット違うんだよと伝えたはずだが、それは叶わなかった。

imoutoidくんは年齢や経歴や体制とは関係のない世界で優れた才覚を発揮していた。それはギターや花火のSCコードが示すように、彼自身の体験に根ざした、地に足がついた創作だったように思える。そんな彼の一端に触れることができるであろうこのイベント、ちょっとメランコリックになりながらも楽しみにしています。

OSCならコレ【Remokon】リリース

Wi-FiでOSC (OpenSound Control)メッセージを送受信するiPhoneアプリケーションRemokon for OSCをリリースしました。RemokonとMaxやSuperColliderを使って、音楽や映像をバリバリ制御してください。i3L(無料)などを使えば、Ableton LiveなどのMIDI対応アプリケーションもコントロールできます。

remokon-all-pages_s

サポート・サイトにはRemokonやその前身にあたるakaRemoteを使ったデモ・ビデオがありますので、参考にしてくださいね。サンプル・プログラムやサポート・ライブラリもあります。

ちなみに、すでにApp StoreにはいくつかOSC対応アプリケーションがあるのですが、Remokonならではと思われる点を書いておきますね。これらにピンと来た方は是非使ってやってください。

・OSCメッセージを受信してUIを設定できるので、ライブのセットアップなどに便利。
・SCメッセージをブロードキャスト送信できるので、複数の機材を同時コントロールできる。
・iPhoneを区別するデバイスIDが利用できるので、複数のiPhoneを使うことができる。
・送受信されるOSCメッセージの情報量が多いので、高度なアプリケーションが開発できる。
・入力ポートと出力ポートを独立して設定できるので、柔軟な通信ができる。

とこんな感じかな。単純なOSCコントローラとしても使う場合にも、いろいろと便利な機能を備えているので、優秀だと思いますよ。

iSuperColliderの現状

期待の星、SuperCollider for iPhoneは、かなり整備されてきたようです。ただ、まだチューニングが不十分なのか、私のビルドが悪いのか、ちょっとしたコードでCPU使用率が100%を超えたり、音が変になったりしますが、それなりに使うことができます。実用まであと一歩というところでしょうか。

isupercollider

現在のAppleのポリシーでは、プログラミング言語・実行環境であるSuperColliderがApp Storeからリリースされることはないので、がんばってSVNからビルドしましょう。

svn co https://supercollider.svn.sourceforge.net/svnroot/supercollider/trunk supercollider

この中でiPhone_Language.xcodeprojからSuperColliderというアプリケーションがビルドされ、iPhone_Synth.xcodeprojからiscsynthがビルドされます。前者のSuperColliderはinternal serverだけで、後者のiscsynthがOSCに対応するlocalhost serverを備えているようです。

従って、iPhoneではiscsynthを起動しておいて、MacのSuperColliderから次のようなコマンドを送ると、iPhoneをリモート・コントロールして音を鳴らすことができました。Mac上でシンセを定義して、それをiPhoneに送って鳴らしているわけで、ちょっと面白ですね。

// 変数sにiPhoneサーバを定義する。
s = Server.new(\iphone, NetAddr.new(“10.0.1.6”, 57110));

// サーバを起動する。
s.boot; // これは不要みたい。

// 「pulse」という名前のSynthDefを定義する。
SynthDef(“pulse”, { arg freq = 440, rate = 2, amp = 0.5;
var osc, trg;
trg = Decay2.ar(Impulse.ar(rate,0, 0.3), 0.01, 0.3, amp);
osc = {SinOsc.ar(freq,0, trg)}.dup;
Out.ar(0, osc);
}).writeDefFile;

// 「pulse」をサーバに送る。
s.sendSynthDef(“pulse”);

// サーバで「pulse」を鳴らす。
s.sendMsg(“/s_new”, “pulse”, 1000, 1, 0);

// 周波数などパラメータを変える。
s.sendMsg(“/n_set”, 1000, “freq”, 880, “rate”, 3, “amp”, 0.75);

// 周波数などパラメータを変える。
s.sendMsg(“/n_set”, 1000, “freq”, 660, “rate”, 4, “amp”, 0.5);

// ノードを破棄する。
s.sendMsg(“/n_free”, 1000);

一方、internal serverだけのSuperColliderは、外部からOSCでコントロールできないですね、きっと。画像表示などもLanguageであるSuperColliderのみのハズだから、画像は外部制御できないってことかな。もう少し調査・研究いしたします。

iSCSynthに大期待!

iPhone SDKではオーディオへのアクセス方法が複数ある上に、凝ったことをしようとすると大変です。MSPやSuperColliderなら10分でできることが丸1日かかっちゃう。オーディオ入出力のAPIはあっても、オーディオ・シンセシスのためのAPIは皆無だからね。サイン波を鳴らすだけでも、自分で計算しなければならないワケ。OscillatorEchochopsは地道に自前でシンセシス(というレベルではない)してるんだけど、その路線を続けるほど酔狂じゃない。

そこで既存のオーディオ・ライブラリを利用したいわけだけど、これまた適当なものがない。これまでの例で言えば、PocketGuitarが採用したSTK (Synthesis Toolkit)はC++ベースなので面倒ってか、言語として好きではない。RjDjが利用しているPd (Pure Data)もイマイチなのは、MSPからすれば貧弱過ぎるし、以前にThe Breadboard BandでiPod Linuxで使ってヒドイ目にあったから(笑)。NeXT時代から使われていたMusicKitはObjective-Cベースで一番素性が良いけど、近年アップデートされていないのが不安を誘う。

そんなこんなで思いあぐねていたところ、SuperCollider (scsynth)のiPhoneへの移植情報がSC-MLに出ていました。SuperColliderはシンセシスの機能の豊富さや記述能力の高さでは当代ピカイチだから、これは期待せざるを得ないですね。これで他のライブラリが吹き飛んでしまいました。現状ではパフォーマンスの改善が必要だそうですが、今すぐにでも使ってみたいところ。Axel Balleyさんが取り組まれていて、協力者募集中とか。

SuperColliderも主要部分はC++で記述されていて、オーディオ入出力はCore Audioに対応しているので、iPhoneとの親和性が良いハズ。だから、随分以前にSCマニアのtn8さんに誰か移植していないの?と尋ねたんだけど、その時はそんな動きはナイとのことで悲しい思いをしていました。でも、もう大丈夫(?)です。

Max5→Max4のパッチ・コンバータ

Max4のパッチは、そのままMax5で開くことができるけど、その逆はできません。ダウングレードできるほうがマッチ・ベターとは言え、過渡期的な問題なので仕方がないかなと思っていました。ところが、Max5からMax4へのパッチ・コンバータをFredrikが作っていました。先の記事のFredrikと同一人物です。AIRの仕事・作品ってことじゃないとは思いますが。

ただし、皮肉っぽく(?)コンバータ自体はSuperColliderコードで作られています。つまり、Maxパッチを処理するために、SuperColliderをインストールして起動しなければならないワケですね。彼のSCページにあるMaxPatがソレです。

FredrikはMaxのオブジェクトなどもガンガン書いている人だから、コンバータをMaxパッチあるいはオブジェクトとして書いても良さそうだけどね〜ブラック・ジョークの類いなんでしょうか? 今度尋ねておきますね。

【追記】本人に尋ねたところ、やはり(!)MaxユーザをSuperColliderに仕向ける作戦だそうです(笑)。ただ、これによって、ファイルに保存されたMaxパッチをパースし、組み替えることができるので、いろいろと発展させようってことで盛り上がりました。例えば、2つのパッチを交配させるジェネティック・プログラミングができるよね。

SuperColliderワークショップ

基本的に学内向けなので外部告知をしませんでしたが、昨日のIAMASではSuperColliderワークショップがありました。十数名の参加者で、こじんまりとした雰囲気ながら、熱気に溢れた土曜日の午後。私は普段は余りない「講義を受ける」立場だったので、学生って大変だよな〜と再認識しました(笑)。

3人のゲストによるショート・プレゼンテーションは、次々と作品の概要を見せたり、実演したりするスタイルだったので、そのスピーディさが良かったですね。個人的には、フル・シンセシス(サンプリングは使わない)で作られたディストーション・ギターのリズミカルなフレーズ・ジェネレータがお気に入り。年齢的にまだIAMASに入ることができないそうですけど、若輩才人くん、なかなかヤル〜って感じ。

そして、この日のメインはベルリンから来たスウェーデン人アーティスト、Fredrik Olofsson氏によるjitlibを用いたライブ・コーディング指南。以下のような記述から始まって、次第に高度なテクニックに進んで行きます。実際には、一行ずつ書いては実行し、次々と音を変化させていくのがミソね。

p=ProxySpace.push(s.boot)
~out.play
~out={SinOsc.ar([700,704], 0, 0.1)}
~out={Saw.ar([400, 404], 0.1)}
~out.fadeTime=4
~out={SinOsc.ar([400, 404],0, ~amp.kr)}
~amp={SinOsc.kr(1.0)}
~amp={Saw.ar(4)}
~amp.fadeTime=4
~amp={Pulse.kr(10)}
~amp={LFPulse.kr(4)}
~amp={LFNoise0.kr(4)}
~out={BPF.ar(Saw.ar([200,204],~amp))}
~out.release

Fredrikは今年のAIR(アーティスト・イン・レジデンス)なので、年内はずっとIAMASにいます。ってこともあって、来週から週1回のペースでSCミーティングを続けて行くそうです。なかなか楽しみですね。

でも、学生にとっては、授業でProcessingやMaxなどがあり、iPhoneスタディ・グループ(これも授業の一環)でObjective-Cに取り組んでいるから、それらに加えてSuperColliderとなれば、百花繚乱状態でウレシイ悲鳴なんじゃないかな(笑)。

SuperColliderでakaRemote.app

昨年秋に日本に来ていたCylobが、akaRemote.appをSuperColliderで利用するクラス・ライブラリを作ったそうです。SuperColliderなら、OSCメッセージを解釈するのは簡単だけど、クラス・ライブラリがあれば、さらに簡単になりますね。ダウンロードは以下のリンクをどうぞ。
http://durftal.com/supercollider/C2_interfaces.zip

あまり反応がないとかで、日本のSCユーザからのフィードバックがあれば喜びそうですよ。彼はiPod touchを使っているそうなので、iPhoneでなくっても大丈夫みたいです(でも、1.1.3以降はプリファレンスが保存されません〜)。

YouTubeにデモ・ムービーがアップされています。前半はMonome、後半からiPod touchが登場しますね。