ADX2LE_OSC

「ADX2LE_OSC」の編集履歴(バックアップ)一覧に戻る

ADX2LE_OSC - (2013/06/04 (火) 06:45:37) のソース

*ADX2LEとOSC(Open Sound Control)

[[ADX2LE>http://www.adx2le.com/]]を[[OpenSoundControl>http://ja.wikipedia.org/wiki/OpenSound_Control]]でコントロールすることで、
[[Unity Pro>http://japan.unity3d.com/unity/]]ユーザー以外の方でもADX2LEのインタラクティブサウンドを実現する事ができるようになります。

例)
[[Processing>http://www.processing.org/]]では扱いが面倒になりそうな以下のような事が、[[CRI Atom Craft>http://www.cri-mw.co.jp/product/lineup/audio/criadx2/demo.html]]で設定できます。
- Processingの背景音に[[ブロック再生>http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&ved=0CEAQtwIwAg&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DbPQeYh8waf8&ei=6RylUcX3DJHpkAWE8ID4BQ&usg=AFQjCNF7L4tMn-UFTCUvErrlwzoIFrHCaA&sig2=lZJQG2GL1yX2FDjIuF8sHg&bvm=bv.47008514,d.dGI]]や[[AISAC>http://www.youtube.com/watch?feature=player_embedded&v=0Ak01g9eFyc]]によるインタラクティブサウンド、カテゴリによるダッキング、ADX2LEのDSPエフェクト等、ゲームで使われているインタラクティブオーディオ処理が扱える。
- 大量の波形管理(圧縮音声、ループ音、ストリーム、複数トラック再生)の利用、ブロックによる連結再生、
 ランダムパラメータ再生、シーケンス再生、
 シャッフル、コンボシーケンシャル、ランダムノーリピートなど複数音の切り替え再生など
 専用ツールで管理する事で、比較的楽に実装可能になる。
- 音声の発音数や優先度処理、カテゴリによるバランス調整などが行える。
- インゲームプレビューによるツールと連動した調整が可能。
- これらのデータをそのままUnity用のゲームやその他プラットフォーム用のデータとして再利用可能

Processingでプロトタイプ(スケッチ)をし、実際の作業はUnityやネイティブコードで行うといった流れができます。

OSCは[[Max/msp>http://ja.wikipedia.org/wiki/Max_%28%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%29]]や[[PureData>http://puredatajapan.info/]]などからも簡単に呼び出す事が可能で、インスタレーションや
ライブパフォーマンス、独自楽器のテーブル作成など、インタラクティブオーディオが活躍する場での活用が考えられます。


ここでは、[[ちゃーりー>http://park18.wakwak.com/~cha/index.html]]が独自に作成しているフォーマットを公開しています。
理由は、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は無料なのですが
UnityPro版でなければならないなど導入の敷居が高いのがネック。
[[ADX2LEでpinballデモ>http://www.slideshare.net/tatmos/20120821-cedec-sound-workshop]]などでインゲーム接続によるインタラクティブサウンド制作体験もできますが、
インタラクティブなサウンドはピンボールだけではありません。

Processingは無料で手に入れる事ができ、コンピュータプログラムを学ぶのに手頃です。
サウンドクリエータの方でプログラムが苦手な方でもHTML程度の知識で簡単なプログラムを書く事ができます。

ここからスタートすることで、実現したいインタラクティブサウンドをすぐに再生して確認しながら作って行くことができ、
同時にプログラムからのコントロールも学べるようになります。

#ref(p5toadx2le.png)

*【ADX2LE OSC プレーヤダウンロード】
[[ADX2LE OSC Player for Mac>http://ux.getuploader.com/tatmos_iroiro/download/20/MacADX2LEOSCPlayer.zip]] 2013-06-04更新
[[ADX2LE OSC Player for Win>http://ux.getuploader.com/tatmos_iroiro/download/19/WinADX2LEOSCPlayer.zip]] 2013-06-04更新
 &bold(){[Windowsの場合]}
 XPの場合デスクトップ等では動作しない(起動しても何も表示されない)時は、Cドライブ直下などにフォルダを移動して起動してみて下さい。

追記:2013-06-04版 ADX2lEOSCPlayerの名称変更。ACFのロードもできるように変更。ロードしたファイル名表示追加。メモリ表示追加。レベルメータの表示修正。(acf,acbの簡易プレーヤとしても利用できます)

*【ツールダウンロード】
CRI Atom CraftはADX2LEパッケージに含まれているWindows用ツールです。
ADX2LEのダウンロード→[[http://www.adx2le.com/download/index.html]]


*サンプルアプリの紹介
 
 Processing + ADX2LE (OSC) という組み合わせのサンプルを作成してみました。まだ作り始めたばかりですが、
 うまく作れたらばOSCサポートしているゲームエンジンとかアプリケーション間でいろいろ捗りそうな予感がしています。
 OSC詳しくないのでつっこみよろしくお願いします。
 
&youtube(http://youtu.be/4CeOcYN7i6c){425,350}
 
 ここでは、以下のようなサンプルアプリを想定しています。
 
#ref(p5app.png)
 
 ADX2LEはUnityProでしか動作しませんが、アプリケーション化した場合は、Windows/Mac上で動作します。
 ADX2LEBasicPlayerOSCというアプリケーションを作成し、サウンド処理をバックグラウンドで行うようにします。
 これにより、OSCをもつ環境から自由にADX2LEをコントロールするのが目標となります。
 
*Processingからの呼び出し
 
まだ一部しか対応していません。

oscP5の使い方などはこちらを参考にしています。
- ProcessingでOSCを使う方法&br()[[http://tokyomax.jp/?p=923>http://tokyomax.jp/?p=923]]
 
 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関連のダウンロード】
Processingのダウンロード→[[http://www.processing.org/>http://www.processing.org/]]
- Processing本体です。

ProcessingのoscP5ダウンロード→[[http://www.sojamo.de/libraries/oscP5/index.html]]
- oscP5はOSC通信のライブラリで、インストール方法は、
 &bold(){[Windowsの場合]}
 processingを一度起動すると、マイドキュメントフォルダに\Processing\libraries\というフォルダができるので、
 oscP5フォルダをこのフォルダへ置く。
 &bold(){[Macの場合]}
 processingを一度起動すると、書類フォルダに\Processing\libraries\というフォルダができるので、
 oscP5フォルダをこのフォルダへ置く。

[[ADX2LE OSC Processingサンプルスケッチ集>http://ux.getuploader.com/tatmos_iroiro/download/3/Processing_ADX2LE_OSC.zip]]
- processingからOSCを使ってADX2LEOSCPlayerをコントロールするパッチ集です。
 
*Processing ADX2LEOSCPlayer AtomCraftでのワークフロー
[[2つのワークフロー.jpg]]
&ref(2つのワークフロー.jpg)

*Maxサンプル
 
#ref(max6toadx2le.png)
 
udpsendを使って通信しています。Korg nanoPad2を使って操作できます。
 
*【Max6関連のダウンロード】
Max Runtimeのダウンロード→[[http://cycling74.com/downloads/]]
[[ADX2LE OSC Max6サンルパッチ>http://ux.getuploader.com/tatmos_iroiro/download/10/ADX2LEOSC.maxpat]] 2013-05-16更新
 
*【Max + ADX2LE OSC + CRI Atom Craft(In-GamePreview)】
&youtube(http://youtu.be/tfy-oPoqzuk){425,350}

*PureDataサンプル

sendOSCを使って通信しています。Korg nanoPad2を使って操作できます。

#ref(pdtoadx2le.png)

*【PureData関連のダウンロード】
PureDataのダウンロード→[[http://puredata.info/downloads/pd-extended]]
[[ADX2LE OSC PureDataサンルパッチ>http://ux.getuploader.com/tatmos_iroiro/download/9/ADX2LE_OSC.pd]]2013-05-16新規追加
 
*参考情報
- UnityでOSCを使う方法&br()[[http://www.nullpointer.co.uk/content/generative-av/>http://www.nullpointer.co.uk/content/generative-av/]]
 
- PureDataでOSC&br()[[http://reg.s63.xrea.com/tutorial-latest/html/stepup-osc.htm]]
 
*今後の予定
【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)を引数追加した形になる。