ADX2LE_OSC

目次


ダウンロード

ADX2LEOSCPlayer Unity5.3.4f1 ADX2LE2.02.00


ADX2LEとOSC(Open Sound Control)


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

例)
Processingでは扱いが面倒になりそうな以下のような事が、CRI Atom Craftで設定できます。

Processingの背景音にインタラクティブサウンド、インタラクティブミュージックを鳴らしたい


ゲームのような演出とか、データの分離ができて楽になります。

 ブロック再生AISACによる優先度、リミット、カテゴリによるダッキング、ADX2LEのDSPエフェクト等

大量の波形管理(圧縮音声、ループ音、ストリーム、複数トラック再生)の利用、ブロックによる連結再生、

 ランダムパラメータ再生、シーケンス再生、
 シャッフル、コンボシーケンシャル、ランダムノーリピートなど複数音の切り替え再生など
 専用ツールで管理する事で、比較的楽に実装可能になる。

音声の発音数や優先度処理、カテゴリによるバランス調整などが行える。


インゲームプレビューによるツールと連動した調整が可能。


これらのデータをそのままUnity用のゲームやその他プラットフォーム用のデータとして再利用可能

インタラクティブサウンドの標準としてADX2LEフォーマットを使う

環境によってばらばらになりがちな制作環境をまとめることができます。

ロジック混みのデータとして

ブラッシュアップ時などデータ差し替えのみで分離した環境で行えるのがADX2LEの魅力です。

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



OSCはMax/mspPureDataなどからも簡単に呼び出す事が可能で、インスタレーションや
ライブパフォーマンス、独自楽器のテーブル作成など、インタラクティブオーディオが活躍する場での活用が考えられます。


ここでは、ちゃーりーが独自に作成しているフォーマットを公開しています。
理由は、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程度の知識で簡単なプログラムを書く事ができます。

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


【ツールダウンロード】

CRI Atom CraftはADX2LEパッケージに含まれているWindows用ツールです。
ADX2LEのダウンロード→http://www.adx2le.com/download/index.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関連のダウンロード】

Processingのダウンロード→http://www.processing.org/
  • Processing本体です。

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

  • processingからOSCを使ってADX2LEOSCPlayerをコントロールするパッチ集です。

Processing ADX2LEOSCPlayer AtomCraftでのワークフロー


Maxサンプル



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

【Max6関連のダウンロード】

Max Runtimeのダウンロード→http://cycling74.com/downloads/
ADX2LE OSC Max6サンプルパッチ 2013-05-16更新

【Max + ADX2LE OSC + CRI Atom Craft(In-GamePreview)】


この動画で使ったMaxのパッチ→ADX2LE OSC Max6Advanceサンプルパッチ 2013-06-04追加 MMLハッカソン2013-05-18にて発表

PureDataサンプル


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


【PureData関連のダウンロード】

PureDataのダウンロード→http://puredata.info/downloads/pd-extended
ADX2LE OSC PureDataサンプルパッチ2013-05-16新規追加

参考情報

UnityでOSCを使う方法
http://www.nullpointer.co.uk/content/generative-av/


PureDataでOSC
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)を引数追加した形になる。

ご意見はこちら

名前:
コメント: