目次
ダウンロード
ADX2LEとOSC(Open Sound Control)
Processingの背景音にインタラクティブサウンド、インタラクティブミュージックを鳴らしたい
ゲームのような演出とか、データの分離ができて楽になります。
大量の波形管理(圧縮音声、ループ音、ストリーム、複数トラック再生)の利用、ブロックによる連結再生、
ランダムパラメータ再生、シーケンス再生、
シャッフル、コンボシーケンシャル、ランダムノーリピートなど複数音の切り替え再生など
専用ツールで管理する事で、比較的楽に実装可能になる。
音声の発音数や優先度処理、カテゴリによるバランス調整などが行える。
インゲームプレビューによるツールと連動した調整が可能。
これらのデータをそのままUnity用のゲームやその他プラットフォーム用のデータとして再利用可能
インタラクティブサウンドの標準としてADX2LEフォーマットを使う
環境によってばらばらになりがちな制作環境をまとめることができます。
ロジック混みのデータとして
ブラッシュアップ時などデータ差し替えのみで分離した環境で行えるのがADX2LEの魅力です。
Processingでプロトタイプ(スケッチ)をし、実際の作業はUnityやネイティブコードで行うといった流れも想定できます。
OSCは
Max/mspや
PureDataなどからも簡単に呼び出す事が可能で、インスタレーションや
ライブパフォーマンス、独自楽器のテーブル作成など、インタラクティブオーディオが活躍する場での活用が考えられます。
ここでは、
ちゃーりーが独自に作成しているフォーマットを公開しています。
理由は、OSCは自由な書き方でコントロールができるのですが、
これをある程度、標準化することで、様々な用途での再利用性を高める目的があります。
※これらの仕様は突然変わる可能性があります。
2013-05-12 初版(暫定)
ADX2LE OSCの対応は、段階をおって進化させる予定です。最初は【Basic】で基本的な再生部分をかためていくことにします。
ADX2LE_BasicPlayerAppの動作仕様
【Basic】
- 発音数 64音(多め)HCAのみ。
- AISAC使える
- Play,Stop,Pause
- Reset
- Player 32(多め)
【Basic OSCフォーマット】
再生 |
/adx2/XXX/playcueid |
[cueId(int:0~65535)] |
キューIDで再生 |
再生 |
/adx2/XXX/playcuename |
[cueName(string)] |
キュー名で再生 |
停止 |
/adx2/XXX/stop |
|
プレーヤを停止 |
ポーズ |
/adx2/XXX/pause |
[pauseFlag(int:0 or 1)] |
プレーヤをポーズ/ポーズ解除 |
AISAC |
/adx2/XXX/aisac |
[aisacId(int:0~15)] [aisacValue(float:0.0~1.0)] |
AISACIDでAISACコントロール |
AISAC |
/adx2/XXX/aisacname |
[aisacName(string)] [aisacVaue(float:0.0~1.0)] |
AISAC名でAISACコントロール |
リセット |
/adx2/XXX/reset |
|
プレーヤをリセット |
/adx2/XXX/
2番目のXXXは
PlayerId (0~31)
として機能します。
例:/adx2/0/stop 0番目のプレーヤを停止
idや名前が存在しない場合無視されます。
再起動 |
/adx2/restart |
|
OSCプレーヤ全体を再起動 |
各アプリケーションのやりとり
ADX2LEは無料なのですが
ADX2LEでpinballデモなどでインゲーム接続によるインタラクティブサウンド制作体験もできますが、
インタラクティブなサウンドはピンボールだけではありません。
Processingは無料で手に入れる事ができ、コンピュータプログラムを学ぶのに手頃です。
サウンドクリエータの方でプログラムが苦手な方でもHTML程度の知識で簡単なプログラムを書く事ができます。
ここからスタートすることで、実現したいインタラクティブサウンドをすぐに再生して確認しながら作って行くことができ、
同時にプログラムからのコントロールも学べるようになります。
【ツールダウンロード】
サンプルアプリの紹介
Processing + ADX2LE (OSC) という組み合わせのサンプルを作成してみました。まだ作り始めたばかりですが、
うまく作れたらばOSCサポートしているゲームエンジンとかアプリケーション間でいろいろ捗りそうな予感がしています。
OSC詳しくないのでつっこみよろしくお願いします。
ここでは、以下のようなサンプルアプリを想定しています。
ADX2LEはUnityProでしか動作しませんが、アプリケーション化した場合は、Windows/Mac上で動作します。
ADX2LEBasicPlayerOSCというアプリケーションを作成し、サウンド処理をバックグラウンドで行うようにします。
これにより、OSCをもつ環境から自由にADX2LEをコントロールするのが目標となります。
Processingからの呼び出し
まだ一部しか対応していません。
oscP5の使い方などはこちらを参考にしています
Processingからの呼び出しは以下のような感じになります。
import oscP5.*;
import netP5.*;
OscP5 oscP5;
NetAddress myRemoteLocation;
PImage img;
void setup()
{
size(480,240);
img = loadImage("background.png");
oscP5 = new OscP5(this,9000);
myRemoteLocation = new NetAddress("127.0.0.1",8000);
}
int playerState = 0;
int toggle = 0;
void draw()
{
//background(204);
image(img,0,0);
if(mousePressed)
{
if(toggle == 0){
if(playerState == 0){
OscMessage myMessage = new OscMessage("/adx2/0/playcueid");
myMessage.add(10); // cueId
oscP5.send(myMessage, myRemoteLocation);
playerState = 1;
} else if(playerState == 1){
OscMessage myMessage = new OscMessage("/adx2/0/stop");
oscP5.send(myMessage, myRemoteLocation);
playerState = 0;
}
toggle = 1;
}
} else
{
toggle = 0;
}
if(playerState == 0){
fill(255);
} else {
fill(0);
OscMessage myMessage = new OscMessage("/adx2/0/aisac");
myMessage.add(0); // aisacId
myMessage.add(mouseX/480f); // aisacValue
oscP5.send(myMessage, myRemoteLocation);
myMessage = new OscMessage("/adx2/0/aisac");
myMessage.add(1); // aisacId
myMessage.add(mouseY/240f); // aisacValue
oscP5.send(myMessage, myRemoteLocation);
}
ellipse(mouseX,mouseY,60,60);
fill(127);
text("0",mouseX-4,mouseY-4);
}
void oscEvent(OscMessage theOscMessage) {
/* print the address pattern and the typetag of the received OscMessage */
print("### received an osc message.");
print(" addrpattern: "+theOscMessage.addrPattern());
println(" typetag: "+theOscMessage.typetag());
}
【Processing関連のダウンロード】
- oscP5はOSC通信のライブラリで、インストール方法は、
[Windowsの場合]
processingを一度起動すると、マイドキュメントフォルダに\Processing\libraries\というフォルダができるので、
oscP5フォルダをこのフォルダへ置く。
[Macの場合]
processingを一度起動すると、書類フォルダに\Processing\libraries\というフォルダができるので、
oscP5フォルダをこのフォルダへ置く。
- processingからOSCを使ってADX2LEOSCPlayerをコントロールするパッチ集です。
Processing ADX2LEOSCPlayer AtomCraftでのワークフロー
Maxサンプル
udpsendを使って通信しています。Korg nanoPad2を使って操作できます。
【Max6関連のダウンロード】
【Max + ADX2LE OSC + CRI Atom Craft(In-GamePreview)】
PureDataサンプル
sendOSCを使って通信しています。Korg nanoPad2を使って操作できます。
【PureData関連のダウンロード】
参考情報
今後の予定
【Basic+】
ブロック指定 |
/adx2/XXX/blockindex |
[blockIndex(int)] |
ブロックを指定する |
再生開始位置指定 |
/adx2/XXX/settime |
[time_ms(int)] |
開始時刻を指定する |
ACBロード |
/adx2/loadacb |
[acbPath(string)] |
ACBをパス指定でロードする。ロードできるACBは1つのみ |
【Advance】
- GetTime
- GetState
- Category
- GetPlayerState
ACFは固定でNewProject.acf。
ACBは任意数持てるが、無指定でCueSheet_0.acbを使用する。
決められたフォルダ(/streamingAssets/)にファイルを置くのみ。
【Basic】は一方通行のみ。状態取得はできない。
関数は独自でプレーヤ識別用ID playerId(0~31)を引数追加した形になる。
ご意見はこちら
最終更新:2016年04月03日 14:36