[01] はじめに&セットアップ
MaxとopenFrameworksを使って音と同期するアニメーションを作ってみます。
Maxの勉強がてら記事を書いているので、使い方や説明など至らない点もあると思いますが
生温かく見守って下さい。
Maxとは
サンフランシスコのソフトウェア企業Cycling '74が開発・保守している音楽とマルチメディア向けのグラフィカルな統合開発環境(ビジュアルプログラミング言語)である。
引用元: Wikipedia - Max(ソフトウェア)
openFramewokrsとは
openFrameworks(オープンフレームワークス 略称oF)とは、"「創造的なコーディング」のためのC++のオープンソースツールキット"である。
引用元: Wikipedia - Max(ソフトウェア)
何が出来るのか
Subroutine from Devin Powers on Vimeo
このように音と映像を同期させたり、様々なセンサーと組み合わせることで素晴らしい作品を作ることが出来ます。
制作環境
- Mac OSX 10.10.1 Yosemite
- XCode 6.1.1
- Max 7
- openFrameworks 0.8.4
インストール
oFはこちらからダウンロードし、環境に合わせてセットアップして下さい。
http://openframeworks.jp/download/
Maxは製作元のCycling74のサイトからダウンロードできます。
シェアウェアですが1ヶ月はトライアルで使用できます。
https://cycling74.com/downloads/
▼ 参考
oF: http://qiita.com/WizowozY/items/91afd8d07e6c5d6cf465
Max6: http://qiita.com/shu223/items/38a14ad3efd260faafe0
※ 一つ前のバージョンでUI等異なるので注意
使い方・詳しいインストール方法については別途記事、書籍等を参考にして下さい。
[02] Maxで音を再生する
mp3ファイルをドラッグするとサウンドが再生するパッチを作ってみます。
調べてみたところ、音を再生するのはsfplay~
というオブジェクト(でいいのか?)を使うようです。
それで出来たのがこちら。
Maxで素晴らしいなと思うのはHelp機能が充実しているので、
それっぽい関数を見つけたらとりあえず右クリックでヘルプを見るのが良いと思います。(コピペ最高!)
また、ファイルをドラッグドロップするにはdropfile
というオブジェクトを使います。
パッチ画面内にある、**「drag and drop a file here...」や「Only mp3 file」**という文字列はcomment
オブジェクトでテキストを配置しています。
名前の通りプログラムにおけるコメント的な扱いですかね。
このバッテンのアイコンはトグルボタンです。
オブジェクト名はtoggle
、クリックするとOn/Offが切り替わります。
そしてこちらが、message
オブジェクトです。
ボタンがtrue or falseを送るのに対し、message
は文字列などを送ります。(ここ適当に書いてます。誰か詳しい人..)
さらに続きます。
こちらが本家button
。押してる時だけONになる(のではないでしょうか)。
このいかにも音を再生します感溢れるボタンですが、これはezdac~
というもので、詳しくはこちらのWebサイトをご覧ください。開いているMaxパッチ全体の音のON/OFFかなと思います。
http://www.s-musiclab.jp/mmj_docs/max5/msp/msp_tutorial/max5_mstu03.html
これはゲージです。ステレオの。と思いきやスライダーを移動するとゲイン(入力信号の大きさ)を変更出来ます。ギターアンプとかにあるGainと一緒ですね。
オブジェクト名はlive.gain
です。上のメニューのMax for Live Objectの中にあります。
パッチの組み方はMax内にあるsfplay
のサンプルをそのまま持ってきているので、それぞれにどんな意味があるのがよくわかっていません。ごめんなさい。
使ったオブジェクト
ざっくりですがまとめます。
-dropfile
: ファイルをドラッグドロップで開く
-sfplay~
: 音源の再生に使う
-comment
: コメント
-message
: メッセージ(信号)を送る
-toggle
: ON / OFFの切り替え
-button
: 押してる時だON
-ezdac~
: 全体のサウンドのON/OFF
-live.gain
: 入力信号の大きさ変える
[03] Maxでmp3のFFTデータを取得
一応これが完成図です。
なんかすごく無駄がある気もしないでもないですが、
とりあえずmp3のFFTデータが取得できてOSCで通信もできています。
live.gain
のアウトからpfft~
というオブジェクトでFFTを取得できます。
pfft~
についてはこちらのページに詳しくまとめられているので、詳しく知りたい方はご覧ください。
http://www.shonan.ne.jp/~hiro-s/mmj_docs/msp/msp_tutorial/mstu26.html
そういえば、FFTとOSCの説明をしていなかったのでWikipediaの注釈置いておきますね。
FFTとは
高速フーリエ変換(こうそくフーリエへんかん、英: Fast Fourier Transform、FFT)とは、離散フーリエ変換 (Discrete Fourier Transform、DFT) を計算機上で高速に計算するアルゴリズム。
OSCとは
OpenSound Control(OSC)とは、電子楽器(特にシンセサイザー)やコンピュータなどの機器において音楽演奏データをネットワーク経由でリアルタイムに共有するための通信プロトコルである。
簡単にいうとFFTはアナログ→デジタルへの変換を高速にしたもの、それにより逐次データを解析出来るのでリアルタイムでビジュアライズ出来るね!OSCはもともと電子楽器の連携のために使われた通信規格だけど便利だから普通のデータ通信にも使えるね!という認識で良いかと。
本題に戻り、MaxでFFTまでは出来たので、次はそれをoFに飛ばします。
それには、udpsend
というオブジェクトを使います。
udpsend IPアドレス ポート番号
という形式でオブジェクトを作成します。
ここはデフォルトの通り、IPアドレスは127.0.0.1
でポートは7400
で大丈夫だと思います。
ただし他のアプリなどで同じIPとポートを使っているとうまく動作しないので、動かない場合は適宜変更してください。
その際、OSCがきちんと動いているかチェックするのには、ファイルメニューから「Extras -> UDP Tester」を使うとデバッグが楽です。
OSCで値がきちんと送られているのを確認出来たら、Maxでの実装は完了です。
[04] oFでOSCを受信する
oFについては、ここで説明するよりも素晴らしいリソースがあるのでそちらをご覧下さい。
yoppa氏のこの記事が参考になります。
http://yoppa.org/ma2_10/2279.html
また、openFramewokrs/examples/addons/oscReceiveExample をそのまま使っても良いと思います。
04) 出来上がり
Maxパッチで音を再生しながら、oFのプロジェクトをビルドすると下の画像の用に真ん中の球の大きさが音に同期して変わります。
ビジュアライズがクソしょぼいのは見なかったことにして下さい。
(心の声:なるべくコードをシンプルにしたかった!)
[05] GitHub
Max7用のパッチとoFのXcodeプロジェクトをアップしました。
中に入っているmp3はご自由にお使い下さい。
https://github.com/hisahayashi/Max-to-oF-OSC-Sample
以上