ADX2LE_OSC

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

ADX2LE_OSC - (2013/05/18 (土) 14:11:24) のソース

*ADX2LEとOSC(Open Sound Control)

ADX2LEをOpenSoundControlでコントロールすることで、
Unity Proユーザー以外の方でもADX2LEのインタラクティブサウンドを実現する事ができるようになります。

例)
Processingでは扱いが面倒になりそうな以下のような事が、CRI Atom Craftで設定できます。
- Processingの背景音にブロック再生やAISACによるインタラクティブサウンド、カテゴリによるダッキング、ADX2LEのDSPエフェクト等、ゲームで使われているインタラクティブオーディオ処理が扱える。
- 大量の波形管理(圧縮音声、ループ音、ストリーム、複数トラック再生)の利用、ブロックによる連結再生、
 ランダムパラメータ再生、シーケンス再生、
 シャッフル、コンボシーケンシャル、ランダムノーリピートなど複数音の切り替え再生など
 専用ツールで管理する事で、比較的楽に実装可能になる。
- 音声の発音数や優先度処理、カテゴリによるバランス調整などが行える。
- インゲームプレビューによるツールと連動した調整が可能。
- これらのデータをそのままUnity用のゲームやその他プラットフォーム用のデータとして再利用可能

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)]|
|再生 |/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)]|
|AISAC |/adx2/XXX/aisacname |[aisacName(string)] [aisacVaue(float:0.0~1.0)]|
|リセット |/adx2/XXX/reset ||

/adx2/XXX/
2番目のXXXは
PlayerId (0~31)
として機能します。
例:/adx2/0/stop 0番目のプレーヤを停止

idや名前が存在しない場合無視されます。

*各アプリケーションのやりとり

ADX2LEは無料なのですが
UnityPro版でなければならないなど導入の敷居が高いのがネック。
[[ADX2LEでpinballデモ>http://www.slideshare.net/tatmos/20120821-cedec-sound-workshop]]などでインゲーム接続によるインタラクティブサウンド制作体験もできますが、
インタラクティブなサウンドはピンボールだけではありません。

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

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

#ref(p5toadx2le.png)

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

*【ツールダウンロード】
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をコントロールするパッチ集です。
 
*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更新
 
*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+】
 - BlockIndex
 - SetTime
 【Advance】
 - GetTime
 - LoadACB
 - GetState
 - Category
 ACFは固定でNewProject.acf。
 ACBは任意数持てるが、無指定でCueSheet_0.acbを使用する。
 決められたフォルダ(/streamingAssets/)にファイルを置くのみ。
 【Basic】は一方通行のみ。状態取得はできない。
 関数は独自でプレーヤ識別用ID playerId(0~31)を引数追加した形になる。
 【Basic】
  void InitCriAtom();
  void PlayCueName(string cueName,int playerId);
  void PlayCueId(int cueId,int playerId);
  void Stop(int playerId);
  void Pause(bool pauseFlag,int playerId); // pauseFlagはtrueでポーズ、falseで解除
  void AISAC(int aisacId,float aisacValue,int playerId);            // 即時反映   
  void AISACName(string aisacName,float aisacValue,int playerId);    // 即時反映   
  void Reset(int playerId);    // 即時反映
 
 【Basic OSC】
  /adx2/0/playcueid cueId:i
  /adx2/0/playcuename cueName:s
  /adx2/0/stop
  /adx2/0/pause pauseFlag:i
  /adx2/0/aisac aisacId:i aisacValue:f
  /adx2/0/aisacname aisacName:s aisacVaue:f
  /adx2/0/reset
 
 /adx2 接頭
 /0 PlayerId (0~31)
 /
 
 【Advance】
  string GetPlayerState();    // Stateは文字列で取得?