OSCillatter
Sound & Recording Magazine 2017年3月号 Maxで作る自分専用パッチ補足ページ
制作の経緯とか動機とか目標とか
利用方法等をさっさと知りたい方は読み飛ばして下の方にあります。
何かネタないでしょうか?
とお話がきたからなのですが、それじゃあ味気なさすぎるのでこのコラムの依頼をきっかけになぜエクスターナルを作ったかとか書きます。
自分が寄稿している今回のサンプルパッチはちょっと特殊で、音をどのようにハックするかになりがちなプログラミング言語Maxで、
— leico (@1_0101) 2017年1月17日
既存の枠組みをどのようにハックするかに挑戦し、その一例を提示しています。
売り上げで収入増えたりしませんが、ちょっと異質なMaxを是非ご覧ください。
何を提供するか/作るか迷いましたが、今回は音じゃなく音周辺を魔改造することにしました。 やっていることはこの2つです。
- できない機能をエクスターナルで実現する
- 普通思いつかない利用方法で可能性を拡げる
何をどうするかはサンレコのWebか雑誌で確認ください。 ご覧になってる方の創作や発想のヒントになれば幸いです。
前身の作品の話
これが ray.twitteroauth の元です。私の別のプロジェクトで ray.sniff~ というのがありまして、それとTwitter Streaning APIを組み合わせTwitterをベースに様々な情報を送り合ってみんなで演奏しよう。 という試みです。動画は途中バージョンのものでHEAD1 はもう少し変化しています。
この時もTwitter Streaming APIを利用していました。 Twitterに貼られる画像やSoundCloudの音源、 誠に残念ながら今は亡きVine動画、gmaps.jsによる位置情報表示をWebブラウザが担当し、 OSCでMaxを制御する部分はPHPサーバからOpen Sound Control for PHP を利用してMaxにOSCデータを送っていました。
……これHEADの話かもしれません。この動画の時点ではPHPでのTwitter Streaming APIのテストがうまく動かなくて、 C言語とcURLを使った方法では動いていたので、 PHPからC言語のプログラムをexec で呼び出し、出力をPHPで受け取り、OSCはosc.phpでMaxへ送るようにしていた気がします。
最終的に、ray.sniff~ からの通信データの音、SoundCloudの音源、 Vineのループ音源とループ映像/投稿された画像によるVJ—みんなで寄ってたかって 行うセッション。全てのデータ共有が映像へ音へ反映され、コミュニケーション即ち音源となり得る場を作り出す試み。 それがこのプロジェクトです。
ray.twitteroauthつくることになってしまった話
OSCtterのTwitter Streaming API部分をMaxオブジェクトにしたのがray.twitteroauthです。
これができたら誰でもTwitterでOSCをツイートして遠隔地にあるMaxパッチを、ほぼリアルタイムに制御することができるんですよ。 アドレスさえ知ってたら会場/配信関係なく観客全員がライブに参加できるんですよ? 何か専用アプリ入れる必要もなしに。すごくないですか?
というのが製作動機かつ、掲載のお話をいただいた時に推した部分です。
最初はmaxurlでできるんじゃないかと思っていました。 maxurl、ヘルプ見ていただくと分かるのですが、さっき登場したcURLをMaxで使えるようにしたオブジェクトなんです。 こんなサンプル (日本語はこっちが詳しい) がアップロードされているし、これでいけんじゃね? 使ったことあるから大体の使い方わかるし。って簡単に考えてました。
まー無理でしたね。maxurlが使いにくいのと、Twitter OAuth 突破用REST APIヘッダの準備が無理でした。
なので、前回同様いろんなライブラリを引っ張ってきて継ぎ合わせて、 前回のC言語のプログラムを流用してMaxオブジェクトを作ろうってなったんです。
制作ぐだぐだ話
ここ飛ばして大丈夫です。
まー動かないっすわ。Twitterの仕様が変わったのか、それともライブラリ使い方間違っているのか。 開発と同時期にTwitter DevelopperサイトのOAuth Testが落ちてるし。
あとlibOAuth(Github) の開発が止まっているのか最新のOpenSSLに対応していない。
他のライブラリならよかったのだけれど、OpenSSLの更新追従できてないのはマズいだろう、 と思ったのでOpenSSL最新のものに対応したlibOAuthを作ったり。
動くようになってMaxに移植したらMax自体がフリーズして戻ってこなくなり、 cURLのドキュメント読んで内部処理を変更したり。
そんなことをしていたら原稿の締め切り直前までプログラムが動かないという。 無事期限内にデータを渡すことができてほんとよかった。
制作したエクスターナルの紹介
今回実は2つエクスターナルを作っています。 ざっくり説明すると以下
- ray.twitteroauth
- TwitterOAuth認証を行うためのオブジェクト
- ray.OSCiter
- 複数のOSCメッセージを含んだ文字列からjson毎に切り出して出力
- before
/aaa/bbb 1 /aaa/aaa 3 /ccc/x 200
- after
/aaa/bbb 1
/aaa/aaa 3
/ccc/x 200
- before
- 複数のOSCメッセージを含んだ文字列からjson毎に切り出して出力
現状の注意点
macOS 64bitのみで動作します。
32bit版、及びWindows版は間に合いませんでした。
GETメソッドしか動きません
しか対応してないです。自分のタイムラインか全ツイートの1%は取得できますが、 ハッシュタグや発信地域でフィルタリングすることができません。
[macOS] Maxを64bitで起動する方法
ツールバーのMax -> About Max
でMaxのバージョンが確認できます。
インストール時の初期設定ではMaxは32bitで動作しています。
過去開発されたエクスターナルの多くが32bitのみ対応で放置されているからです。
求ム:エクスターナルのコントリビューター
Maxのバージョンの変更方法です。Finderでアプリケーションフォルダを開き、
Max.app
で右クリック、情報を見るを選択します。
Max.appの情報
ウィンドウ中央辺り、
- [x] 32ビットモードで開く
となっているので
- [ ] 32ビットモードで開く
と変更します。
この状態でMaxを起動した時32bitのままの場合は、macOSを再起動させてみてください。
これで64bitモードで動作します。
Twitter Streaming APIを使うために必要な準備
参考
電話番号を登録する
Twitterアプリを作成するには、まず電話番号の登録が必要です。
アプリを作成するTwitterアカウントにログインして、「設定」メニューの「モバイル」を開きます。
以下のように、電話番号を入力します。
- 「国/地域」…「日本」
- 「電話番号」…先頭の「0」が「+81」に変わるので、それ以降の番号を入力
電話番号を入力したら、その電話番号宛にショートメール(SMS)が送信されるので、 そこに記載されている認証用コードを入力します。
Twitter Appsでアプリ作成
https://apps.twitter.com/にアクセスします。
画面の Create New App をクリックします。
アプリの概要を記述して同意
画像の内容を、各々の目的や領域に合わせて記述して、利用許諾に同意してCreate your Twitter Application
でアプリケーションを作成します。
作成成功すると作成したアプリのDetails
タブにジャンプしますが、
よく他の人と名前被りが発生して作成できないことがあります。
各種キーを取得
必要となるのは
- Consumer Key(API Key)
- Consumer Secret(API Secret)
- Access Token
- Token Secret
の4種類です。
自分のアカウントのキーに関してはKeys and Access Tokens
タブで確認、取得が可能です。
Access Token、Token Secretはページ下部、Create my access Token をクリックすると取得できます。
ここまでで必要なキーが取得できました。
役立つかもしれない情報
Twitter活用Tips&注意事項
- 1時間に100ツイートまで
- 規制かかるよ。資源は大切に
- 1日の上限目安も1000ツイートまで
- 同じ内容ex:
/gain 0
を短時間に連続して送れない- いらない情報を加えて回避する
1 /gain 0
2 /gain 0
aaa /gain 0
- etc …
- リツイート、引用リツイートを使う
- リツイートした内容も反映されるよ
- 引用リツイートするとリツイート元に加えて別のOSCが送れるよ
- リツイートは取り消せばまたリツイートできるようになるよ
- いらない情報を加えて回避する
- 140字以内ならいくつでもOSCメッセージを送れるよ
- 同一ツイートの内容は全てほぼ同時に実行されるよ
line~
を駆使するとリニアに変化させることもできる- OSCメッセージはこうなる
/osc/freq 440 3000
/osc/gain 0 0 1 2000 0.5 200
- OSCメッセージはこうなる
- userstreamで第三者がパッチを操作するにはどうするの
- 操作してくれる方をフォローしましょう
- 自分へリプライを送ってもらいましょう
Maxエクスターナルオブジェクトとは
連載で既にいくつか出てきてますが、特に解説もなかったと思うので少し紹介します。 Maxに元から入っているオブジェクトで大抵のことは実現することができます。が、それだけでは実現不可能なことが まれによく あります。 そういう問題に直面した際、Maxには他のプログラミング言語でオブジェクト制作する機能があるんです。
その機能を使って、個々人が作ったMaxオブジェクト、それがMaxエクスターナルオブジェクトです。 パッチではないです 。内部は C/C++ 、最近では FAUST というものを使って記述されていたり。 DAWで言うところのAUやVSTのようなものです。Maxパッチと同様、そしてVSTと同様にこちらも世界中で制作され共有されてます。
このオブジェクト、デフォルトのMaxでは実現困難な処理を行うものが数多く存在し、速度も高速ですが、OSやCPUに依存します。 macOS用はmacOSで、Windows用はWindowsで制作しなければなりません。 またMaxが32bit版なのか64bit版なのかということも問題になってきます。 32bit用で64bit用は動きませんし、64bit用で32bit用は動きません。
Maxエクスターナルオブジェクトオススメインストール方法
Maxのツールバーのオプション -> ファイル初期設定
を見ると
書類/Max 7/Library
にリンクが貼られていることがわかります。
こちらに例えばexternals
フォルダを作成し、必要なエクスターナルをインストールすると使用可能になります。
フォルダ名externals
はわかりやすい名前で大丈夫です。
様々なMaxのバージョンが混在している環境の場合、例えば書類/Max/externals
フォルダを作成し、
個々のMaxのファイル初期設定で書類/Max/externals
フォルダを加えると全てのバージョンで利用できるようになります。
この時、右側のSubfoldersを
- [x]
としておくと中にフォルダあった場合、フォルダの中身も検索します。
ray.
って何?
名前空間として使っています。
他のエクスターナル製作者とオブジェクト名が被ってしまうとMaxで呼び出せなくなるので、
自分の製作したオブジェクトにはray.
を付けています。
インスパイア元はIAMASの赤松正行教授です。
その他
リポジトリ
最新バージョンはこちら。雑誌刊行時は同一。
共同開発者募集
ray.twitteroauth/ray.OSCiter利用ライブラリ
- zlib
- libz
- curl
- libcurl
- OpenSSL
- libcripto
- libssl
- libOAuth
- libOAuth
- libTwitterOAuth
- libTwitterOAuth
- picojson
- 1
- git用語で最新のデータのこと。