音感カメラ

「カメラ」というと、当然ある瞬間の、視覚的な情報を捉えるものですが、ここに音という要素を含めると遊べるのかどうか・・・。

録画じゃなくて、あくまで写真で。


先日、最相葉月さんの絶対音感という文庫本を見つけたのですが、90年代にベストセラーになっていました。必ずしも楽器やる人だけが音感に関心があるわけじゃないんですよね。実は日常に溢れている音というのをもっと感じる、意識するのって、今でもありかも。

HD映像のリアルタイム処理 on iPhone

特に今回はCPUを音声処理で使用するので、画像処理は可能な限りGPUに任せたい。となると画像(映像のフレーム)をTextureとして次から次に、例えば20fps(毎秒20枚)といったスピードで処理しなくてはいけない。当然これはOpenGLの鉄則、Textureは起動時にロード、に違反し、ロードに時間がかかって使い物にならない。

OpenGL ES 2.0では、こういった場合にRender to Textureという、Textureに直接書き込む手法を2つ提唱している。詳細については以下を参照。

Render to Texture with OpenGL ES

iPhone 3GS, iPhone 4OpenGL ES 2.0をサポートしているが、こういった手法は一切触れていない。しかし搭載されているGPUPOWERVR SGX)のマニュアルを見てみると、以下のようにある。

6.4. Render to Texture
OpenGL ES 2.0 offers two ways of rendering to textures. One is using EGL pbuffer surfaces; the other is attaching a renderable texture to a framebuffer object (FBO). The latter approach is the recommended one for POWERVR SGX.

さらにはSDKとデモまであった。

Khronos OpenGL ES 2.0 SDKs for POWERVR SGX

ということで、早速iPhone 4を申し込み。

例えば渋谷のスクランブル交差点を見下ろしながら

ジョバンニ・ミラバッシの、自由で、どこか悲しいピアノを聞く。iPhoneには映し出されたスクランブル交差点の映像。ピアノの音が雨音のように、ポツリ、ポツリ、と色を落としては消えて行く。

音階パレット、音楽、今そこにある映像。どれだけうまくシンクロしてくれるかは不明ですが、見たくなったので作ります。

iOS4からならカメラから入ってくるデータを動画として処理することも不可能ではないので、後は音声解析と画像処理を同時にリアルタイムで実行して、どれぐらいのfpsが出せるかが課題。

Programmable Filter

iPhoneでレンズ越しに入ってくる映像をリアルタイムに加工できるというのはこういうイメージで、夜景とかスポーツとかデジカメやビデオカメラにあるいろんなフィルターを、自由にプログラムできるということかもしれない。

今回はいわば音感フィルタなるものを作っちゃおうということだ。

バスの時刻表の写真を撮っている人に

目の前がバス停なんでよく見かけるんですが、結構難しいんじゃないかと思います。斜めから撮ると歪むから端へ行く程読みにくくなるはずですから。ただ正面から撮ろうと何度も撮り直している様子はありませんから、きっと特定の時間帯だけ撮っているんでしょう。

一回これなんとかできないんだろうかと調べた事があって、そういう技術はあります。例えばナンバープレートの撮影。歪みを補正して、文字を認識させます。たぶん日本のNシステム新宿鮫でそう呼ばれていた、ナンバー読み取り装置のこと)もそういうことをしているんだと思います。壁一面に描かれた古代の文字を研究している人なんか重宝らしいです。全体の写真を撮って、その歪みを直せば、紙に書いたように読むことが出来ます。

バス時刻表フィルター。これはニッチですぞ。

楽器やる人に応用すると、本になっている楽譜の1ページをコピーするとき、どうしても歪んじゃうことがあります。かといって普通の写真で撮ってもやっぱり歪みます。そんな時、

楽譜フィルター。これもニッチだなあ。

iPhoneのカメラからビデオフレームを取り出す方法

Technical Q&A QA1702 How to capture video frames from the camera as images using AV Foundation

確かに基本はこういうことなんでしょうが、相変わらずすんなりいかないようになっているので、Apple Developer Forumにまとめときました。