月曜日, 6月 29, 2015

iOS開発再入門 4 pd-for-iosをSwiftで使う

AudioKitやめる

AudioKit、忙しさにかまけているうちに2.1までバージョンが進み、軽い気持ちでアップデートしたらAPIが変わっていて、最新版に合わせて書き直したんだけど音が変に割れてしまうようになったので、使うのをやめた。

Pure Data for iOS

pd-for-iosはご存知Pure DataをiOSで使えるようにしたもので、Pure Dataの資産がそのままiOSで活かせるめちゃめちゃGame changingなライブラリ。デスクトップで使えるPd-extendedとは違うので、gateがないとか諸々注意する点はあるけれども、試した範囲ではパフォーマンスも問題なく、非常に便利。音の生成は全部Pure Dataに任せてしまって、XcodeではUIの部分だけ書けばいい。

  1. githubからcloneなりダウンロードなりで入手。
  2. Xcodeプロジェクトを作成(言語はSwift)し、プロジェクトファイルにFinderからlibpd.xcodeprojをドラッグ&ドロップ。
  3. プロジェクトファイルを選択し「TARGETS」の「Build Settings」にある「Search Paths」の「User Header Search Paths」にlibpdまでのパスを追加(検索窓で「user header」と入力すると早い)。$(SRCROOT)がプロジェクトファイルがあるフォルダを表す変数なので、そこから相対パスで指定するといい。ドロップダウンは「recursive」にする。
  4. 「Build Phases」にある「Link Binary With Libraries」の+ボタンを押して「libpd-ios.a」を追加(赤いままだが問題ないらしい)。

pd-for-iosはObjective-Cで書かれているので、Swiftで使うにはブリッジが必要。(プロジェクト名)-Bridging-Header.hというファイルを作成し、

#import "PdAudioController.h"
#import "PdDispatcher.h"
と書く。

「TARGETS」の「Build Settings」に「Objective-C Bridging Header」という項目があるので、ブリッジングヘッダファイルのパスを追記する。これ忘れがち。

正しく設定するとオブジェクト名やメソッド名がSwiftに変換された形で補完候補に出てくるようになる。enumがそのままだと受け取れないみたいだけど、いったん放置。

クラス変数として

var audioController: PdAudioController!
を宣言し、

AppDelegate.swiftの最初に呼ばれるメソッド内でサンプリングレートなどを設定。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    self.audioController = PdAudioController()
    self.audioController.configureAmbient(withSampleRate: 44100, numberChannels: 2, mixingEnabled: true)
    
    return true
}

アプリがアクティブでなくなった場合と、

func applicationWillResignActive(application: UIApplication) {
    self.audioController.isActive = false
}
アクティブになった場合の状態を切り替える。
func applicationDidBecomeActive(application: UIApplication) {
    self.audioController.isActive = true
}

ViewController.swiftでは、viewDidLoadメソッド内などで

    let dispatcher = PdDispatcher()
    PdBase.setDelegate(dispatcher)
    PdBase.openFile("dropophone.pd", path: NSBundle.mainBundle().resourcePath)
    PdBase.sendBangToReceiver("start")
とすれば、pd側のstartという名前のreceiveオブジェクトでBangを受け取れる。

お互いのやり取りはここを参考にする。

「readsf~」などでサウンドファイルを読み込む場合は、Xcodeでのリソースパスに準じる。wavじゃないと駄目だったり、afconvertで作ったwavだとヘッダが不正とか言われて再生できなかったのでiTunesで作り直したりして、情弱な感じのはまり方をした。

Dropophoneの音を鳴らす仕組み自体はpdで簡単に実装できた。あとはレイアウトとアニメーションなんだけど、これがまた曲者。

参考

Making Musical Appsという本を読んだ。Safari Books Onlineにもある。

YouTubeでLearning libPD for iOSというチュートリアルがあって、親切。インストールの手順など多少違うので後で確認する。

土曜日, 5月 30, 2015

Link list 2015-05

絵文字のエンジニアリング

http://instagram-engineering.tumblr.com/post/117889701472/emojineering-part-1-machine-learning-for-emoji
絵文字の意味を機械学習で解析。

mDrawBot Kit - Makeblock

http://www.makeblock.cc/mdrawbot-kit/
10年前にメディアアートだったものが全部入りになってる。

ニューヨークで考え中

http://akinokondoh.com/webcomics/
単行本面白かった。線が本当に綺麗で絵を読む快楽がある。コマ割りが海外文化と日本文化が絶妙に混ざってる感じがする。

Tobias Schalken

http://www.tobiasschalken.com/
『ニューヨークで考え中』で思い出した人。この人も美術家で漫画を描いている。学生時代にEilandを読んで衝撃を受けたんだけど、タイトルとか思い出せなくてIAMASの図書館に問い合わせて教えてもらったので忘れないように。

わが星

http://wagahoshi.com/
ようやくみられたので安心してDVDみれる。構造的な作りになっていて、「繋がった!」という瞬間にカタルシスがある。単語を言ってるだけなのに泣きそうになったりする。

岩井秀人×快快(FAIFAI)「再生」 感想とかもろもろ!

http://togetter.com/li/825158
すごく良かった。この大変さを想像すると結構ずっしりくるものがある。使用楽曲のリストも良い。ど才能の集まり。

ÖHLIN/D

http://www.ohlin-d.com/
お洒落で遊び心がありつつ機能面も細かく作り込まれていて良い。商品詳細でNEXTをサジェストする方法とか、決済画面とか。

cero / Obscure Ride

http://www.kakubarhythm.com/special/obscureride/

社会と趣味

http://cocolog-nifty.hatenablog.com/entry/2015/05/10/200000

「賢い有権者」だけで政治はよくなるのか?

http://www.huffingtonpost.jp/synodos/post_9516_b_7457804.html

金曜日, 5月 01, 2015

Link list 2015-04

桉田餃子

http://andagyoza.tumblr.com/
割と近くに引っ越したのでようやく行けた。水餃子定食。スパイスが利いてて豚そぼろ飯、スープも美味しく、BGMなど雰囲気も最高。

Aerial Bold

http://letterhunt.aerial-bold.com/
機械学習で航空写真からアルファベットを検出するプロジェクト。「教師あり学習」なので、まず人間がデータを集める必要があり、クラウドソースしている。

Why I Don’t Worry About a Super AI

http://kk.org/thetechnium/2015/04/why-i-dont-worry-about-a-super-ai/
和訳:私はスーパー人工知能を不安に思わない
AIは指数関数的に賢くならず、やばそうなら止めるので、いきなり人類を超える知能ができて暴走し、人類が滅亡するシナリオは考えにくいとのこと。

Elisa van Joolen

http://www.11x17.nl/
今月のお洒落大賞。

The Making of Alto's Adventure

http://www.harrynesbitt.com/blog/the-making-of-altos-adventure/
シンプルで美しい今一番好きなゲームの開発話。Unityで作ってるらしい。風の旅人やProcessingのサンプル、Windosillを参考にしてるようなので、好きなものが近そう。

サイバネティック・セレンディピティ~システムの時代と芸術の未来

https://www.academia.edu/11788060/
森岡先生のテキスト。10年位前に特別講義を受けたことがある。その時既にメディアアートには飽きていたようだったが、リリースされたばかりのジャンのcv.jitを知ってて「あれはよくできてますね」と言うくらいには感度が高かった。facebookも面白いのでfollowしてる。
この展覧会、アーカイブが残っていて、音源もダウンロードできる。http://cyberneticserendipity.net/
Yuri Pattisonというアーティストがまとめてるみたいだけど、この人の活動も興味深い。

ドップラー効果を利用したモーションセンシング

http://danielrapp.github.io/doppler/
音源が動くのではなく自分が動く場合でもドップラー効果が起こる点に着目している。

Processingでlivecoding

https://github.com/gutugutu3030/RealTimeTweakMode

LINE WOW

LINE WOW
フードデリバリー。おねがいWOWで買物代行もしてくれる。そのうちTaskRabbitみたいなこともやりそう。TaskRabbitみたいなのは仕事が多様化しそうで面白い。専門家から素人までをなめらかにつなぐというか。