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日に再度手順を検証して記事を書き換えました。

3/5は名古屋で講演

3月5日は名古屋で開催されるスマートフォンITSセミナーで講演をさせていただきます。お題としてはコンシューマ視点でのスマートフォンITSだそうです。偶然にも最近新しいクルマを買ったこともあってネタは多く、ガラパゴス化しているクルマ&ITSはツッコミどころ満載。ご興味がありましたら、お越しいただけると幸いです。よろしくお願いします。

スマートフォンITSセミナー
講演「スマートフォンITSがもらたらす世界:コンシューマの視点から」
日時:2012年3月5日(月)14:00〜16:00
会場:ダイテックサカエ 6F クリエイトホール 【地図】
参加:無料(要申し込み)

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(渋谷)

Dashcodeでアプリ・アイコン効果

iOSが自動的に付加するアプリ・アイコンの角丸グロッシー効果、もちろん画像編集ソフトでできるんだろうけど、ここでは以前にTwitterで教えていただいたDashcodeでの手法をご紹介。DashcodeはXcodeの一部として提供されているAppleの無料ツールね。

(1) Dashcodeで新規プロジェクトを作成。
一番シンプルなSafariのカスタムのテンプレートが最適。

(2) ライブラリから四角形をキャンバスにドラッグ&ドロップ。

(3) インスペクタでサイズを設定。
使用するアイコン画像のサイズに一致させる。ここでは512×512ピクセルとする。

(4) インスペクタで塗りつぶしをイメージに設定し、画像ファイルを選択。

(5) インスペクタで角の丸さを設定。
アイコン画像が512×512ピクセルの場合は100ピクセルくらいになる。

(6) エフェクトのガラスを有効にし、パラメータを設定。
  シャイン:50%
   トーン:80%
    水平:50%
    湾曲:-20%

iOSでの効果とは微妙に違う気がしないでもないけど、まぁ、そこそこ雰囲気は出てるんじゃないでしょうか。

2/11は京都で講演&対談

最近はタイムマシンに乗る機会がなかったのですが、久々に京都でタイムマシンします。以前のタイムマシンは電子書籍「リアルタイム映像表現の可能性」の主題でしたね。それから、iOSアプリMirrorscopeはミニ・タイムマシン的な時間処理もあるので、こちらもよろしくお願いします。

from the movie “The Time Machine”, 1960

日本記号学会分科会 第2回「タイムマシン/タイムトラベル」研究会
タイムマシン!--デジタルメディアにおける時間の経験
日時:2011年2月11日 14:30〜
会場:同志社大学今出川キャンパス至誠館S2教室
主催:日本記号学会
共催:視聴覚文化研究会

報告:岩城覚久(関西学院大学研究員)
講演:赤松正行(情報科学芸術大学院大学教授)
対談:赤松正行×吉岡洋(京都大学大学院文学研究科教授)

概要:2011年1月に第1回「タイムマシン/タイムトラヴェル研究会」が開催された。そこでは、「人文科学の知的見地からのタイムマシン/タイムトラヴェル研究」という目的の下、映画、小説、マンガにおけるタイムマシン/タイムトラヴェル表象に関する議論が重ねられた。つづく第2回「タイムマシン/タイムトラウヴェル」研究会では、射程をさらに広げ、メディア作家赤松正行氏をゲストに招聘し、作品制作実践、アートの営み、さらにはメディアと時間におけるタイムマシン/タイムトラヴェルを中心的課題にし、議論を展開していく。

1/28は名古屋で演奏

1月28日に名古屋のパルルで演奏、iPhoneをン十台(?)並べて、小さな音を鳴らします。会場は大きくないので、おそらくアンプラグド・ノーPAで大丈夫じゃないかな。よろしければお越しくださいませ。

Deep Acoustics Live Act vol.47 「unformated」
日時:2012年1月28日 (土)
   19:30 open 20:00 start
会場:parlwr (名古屋、新栄)
出演:石川泰昭+中川丘
   赤松正行(iOS Devices)
   Shoko Nagai(piano/electronics)
   平尾義之(turntable,etc)
料金:1,800円

ニューヨークから即興・ジャズ・映画音楽などさまざまなジャンルで活動するNagai氏を迎えてのマルチフォーマットな演奏会。音響プログラミング言語MAX/MSPの第一人者として有名な赤松氏は近年主として取り組んでいるiPhoneを用いてのパフォーマンス。ノイジシャンの平尾は改造ターンテーブルのパフォーマンス。愛知県芸音楽科の若い才能によるパフォーマンスも注目。

MoMu-STKでシンセシス処理

先に紹介したMoMuでのオーディオ処理は、基本的な入出力を肩代わりしてくれるものの、それ以上のことは自前でやらなくてはいけない。実際にもMoMuオーディオは内部的にRemoteIOを呼び出しているだけ。自前でデジタル信号処理を書くのは、お勉強にはイイけど、面倒で難解であることも確か。

一方、MoMuを使うメリットは、同時に用意されたThe Synthesizer Toolkit (STK)を簡単に利用できること。STKはCCARMAを中心に開発されている音響合成ライブラリで、そのクラス・リストを見れば分かるように、基本的なオシレータやフィルタ、エフェクタはもちろんのこと、フィジカル・モデリング系の音源が充実している。Maxな人にはPeRColateという移植ライブラリで有名かもね。

と言う訳で例によってナンチャッテ路線で、MoMu-STKを使ってみよう。まずは「MoMuでオーディオ処理」に示した手順で爆音が出るようにしておく。そして、The Synthesis Toolkit (STK): MoMu ReleaseのサイトからMoMu-STKをダウンロード。その上での手順は以下の通り。ここではTubeBellクラスを用いて、鐘(チューブラー・ベル)を鳴らす。

(1) プロジェクトにMoMu-STK-1.0.0フォルダを追加。

(2) ソースコード(例えば〜ViewController.mm)で、ヘッダをインポートし、定数と鐘のオブジェクトを定義。

#import "mo_audio.h"
#import "TubeBell.h"

#define SRATE         44100
#define FRAMESIZE     128
#define NUMCHANNELS   2

stk::TubeBell	*myBell;

(3) 適切なメソッド(例えばviewDidLoad)でMoMuのオーディオ処理の初期化と開始の後、鐘のインスタンスを生成し、鳴らす。

MoAudio::init(SRATE, FRAMESIZE, NUMCHANNELS );
MoAudio::start(audioCallback, nil);
	
myBell = new stk::TubeBell();
myBell->keyOn();

(4) コールバック関数では、tick()メソッドによって返される値でバッファを満たす。

Float32 *data = buffer;
for (int i=0; i<framesize; i++)
{
	Float32 value = 0;
	if (myBell != nil)
		value = myBell->tick();
		
	*data++ = value;
	*data++ = value;
}

このようにしてアプリを起動すると鐘が鳴り響くハズ。シミュレータでも実機でもOK。はい、おしまい。

というのも味気ないので、もう少しシンセシスらしいことをしておこう。

まずボタンを作り、Touch DownでplayBell:メソッドを呼び出すようにアクションを定義する。

- (IBAction)playBell:(UIButton *)sender
{
	myBell->keyOn();
}

同じくスライダーを作り、Value ChangedでmodulationChanged:メソッドを呼び出すようにアクションを定義する。

- (IBAction)modulationChanged:(UISlider *)sender
{
	myBell->controlChange(2, sender.value * 127.0);
}

これで、ボタンをタップすると鐘が鳴り、スライダーを動かすと鐘の音色が変わる。シンプルながら、これだけでもサンプリング音の再生では難しい音響合成ですね。他にもパラメータは沢山あるので、いろいろとイヂってみてください。

はい、おしまい。