LoginSignup
60
56

More than 5 years have passed since last update.

Max+oFでOSCをしてみる

Last updated at Posted at 2015-01-24

[01] はじめに&セットアップ

MaxとopenFrameworksを使って音と同期するアニメーションを作ってみます。
Maxの勉強がてら記事を書いているので、使い方や説明など至らない点もあると思いますが
生温かく見守って下さい。

Maxとは

サンフランシスコのソフトウェア企業Cycling '74が開発・保守している音楽とマルチメディア向けのグラフィカルな統合開発環境(ビジュアルプログラミング言語)である。
引用元: Wikipedia - Max(ソフトウェア)

openFramewokrsとは

openFrameworks(オープンフレームワークス 略称oF)とは、"「創造的なコーディング」のためのC++のオープンソースツールキット"である。
引用元: Wikipedia - Max(ソフトウェア)

何が出来るのか

alt
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~というオブジェクト(でいいのか?)を使うようです。
それで出来たのがこちら。

006.png

Maxで素晴らしいなと思うのはHelp機能が充実しているので、
それっぽい関数を見つけたらとりあえず右クリックでヘルプを見るのが良いと思います。(コピペ最高!)

003.png

また、ファイルをドラッグドロップするにはdropfileというオブジェクトを使います。

パッチ画面内にある、「drag and drop a file here...」「Only mp3 file」という文字列はcommentオブジェクトでテキストを配置しています。
名前の通りプログラムにおけるコメント的な扱いですかね。

このバッテンのアイコンはトグルボタンです。
オブジェクト名はtoggle、クリックするとOn/Offが切り替わります。
004.png

そしてこちらが、messageオブジェクトです。
ボタンがtrue or falseを送るのに対し、messageは文字列などを送ります。(ここ適当に書いてます。誰か詳しい人..)
005.png

さらに続きます。
こちらが本家button。押してる時だけONになる(のではないでしょうか)。
008.png

このいかにも音を再生します感溢れるボタンですが、これはezdac~というもので、詳しくはこちらのWebサイトをご覧ください。開いているMaxパッチ全体の音のON/OFFかなと思います。
http://www.s-musiclab.jp/mmj_docs/max5/msp/msp_tutorial/max5_mstu03.html
009.png

これはゲージです。ステレオの。と思いきやスライダーを移動するとゲイン(入力信号の大きさ)を変更出来ます。ギターアンプとかにあるGainと一緒ですね。
オブジェクト名はlive.gainです。上のメニューのMax for Live Objectの中にあります。
010.png

パッチの組み方はMax内にあるsfplayのサンプルをそのまま持ってきているので、それぞれにどんな意味があるのがよくわかっていません。ごめんなさい。

使ったオブジェクト

ざっくりですがまとめます。

-dropfile: ファイルをドラッグドロップで開く
-sfplay~: 音源の再生に使う
-comment: コメント
-message: メッセージ(信号)を送る
-toggle: ON / OFFの切り替え
-button: 押してる時だON
-ezdac~: 全体のサウンドのON/OFF
-live.gain: 入力信号の大きさ変える

[03] Maxでmp3のFFTデータを取得

一応これが完成図です。
なんかすごく無駄がある気もしないでもないですが、
とりあえずmp3のFFTデータが取得できてOSCで通信もできています。

007.png

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というオブジェクトを使います。

Max
udpsend IPアドレス ポート番号

という形式でオブジェクトを作成します。
ここはデフォルトの通り、IPアドレスは127.0.0.1でポートは7400で大丈夫だと思います。
ただし他のアプリなどで同じIPとポートを使っているとうまく動作しないので、動かない場合は適宜変更してください。

その際、OSCがきちんと動いているかチェックするのには、ファイルメニューから「Extras -> UDP Tester」を使うとデバッグが楽です。
011.png

OSCで値がきちんと送られているのを確認出来たら、Maxでの実装は完了です。

[04] oFでOSCを受信する

oFについては、ここで説明するよりも素晴らしいリソースがあるのでそちらをご覧下さい。
yoppa氏のこの記事が参考になります。
http://yoppa.org/ma2_10/2279.html

また、openFramewokrs/examples/addons/oscReceiveExample をそのまま使っても良いと思います。

04) 出来上がり

Maxパッチで音を再生しながら、oFのプロジェクトをビルドすると下の画像の用に真ん中の球の大きさが音に同期して変わります。
ビジュアライズがクソしょぼいのは見なかったことにして下さい。
(心の声:なるべくコードをシンプルにしたかった!)

012.png

[05] GitHub

Max7用のパッチとoFのXcodeプロジェクトをアップしました。
中に入っているmp3はご自由にお使い下さい。
https://github.com/hisahayashi/Max-to-oF-OSC-Sample

以上

60
56
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
60
56