サウンドデザイン インタラクションデザイン
サウンド再生
ADX2LE_OSCBasicPlayer アプリケーション /adx2/0/playcueid
OSC (udp) localhost通信
/StremingAssets/
NewProject.acf
CueSheet_0.acb
CRI Atom Craft
ビルド 出力ファイル
差し替え Processing
ProcessingのoscP5
インゲーム プレビュー
作成中 最終出力
1
2
• ADX2LE OSC Player
を起動•
ブロックを解除する•
起動するファイルをコピーする
•
以下のバッチを実行する• C:\ADX2LE_Workshop\AtomCraftData\copy.bat
• ACF,ACB
ファイルを コピーしました。• ADX2LEOSCBasicPlayer_Data
を開く• StreamingAssets
を開く• ACB 、 ACF
を差し替える1
2
4
3
•
先ほど出力したフォルダからinGamePreview
を開く【参考】もしも手動でやる場合は以下のような手順になります。
• ADX2LE OSC Player
を一度終了して再起動•
もう一度起動して0:tri
に変化していたらOK
3
1
2
•
♪を押すと音が鳴る、■
で停止•
真ん中のスライダーでピッチが変わる•
左のスライダーで音量が変わる1
2
3
4
•
いちいちバッチを実行するのは面倒なので、ビルド時に呼び出すようにします。
2 1
3
4
もっと直感的に
•
プレーヤーでも2つコントロールができましたが、同時にコントロールしたいので、
マウスの位置が反応するような、簡単なプログラムを 用意しました。
•
サウンドデザインする上で簡単なプロトタイプを作 ると捗ります。プログラムからどんな風にコントロールされるか理 解を深めると、データ作成に有利な点が見つかるか もしれません。
音以外のインタラクションを作る
• processing
でインタラクティブ サウンドを
コントロールします。
サウンドデザイン インタラクションデザイン
サウンド再生
ADX2LE_OSCBasicPlayer アプリケーション /adx2/0/playcueid
OSC (udp) localhost通信
/StremingAssets/
NewProject.acf
CueSheet_0.acb
CRI Atom Craft
ビルド 出力ファイル
差し替え Processing
ProcessingのoscP5
インゲーム プレビュー
作成中 最終出力
• proessing
が起動します• sketch_AISACXY.pde
を開く1
2
3
•
を押して実行•
を押して停止import oscP5.*;
import netP5.*;
OscP5 oscP5;
NetAddress myRemoteLocation;
void setup() {
size(480,240);
oscP5 = new OscP5(this,9000);
myRemoteLocation = new NetAddress("127.0.0.1",8000);
}
int playerState = 0;
int mouseState = 0;
void draw() {
background(204);
if(mousePressed) {
if(mouseState == 0){
if(playerState == 0){
OscMessage myMessage = new OscMessage("/adx2/0/playcueid 0");
oscP5.send(myMessage, myRemoteLocation);
playerState = 1;
} else if(playerState == 1){
OscMessage myMessage = new OscMessage("/adx2/0/stop");
oscP5.send(myMessage, myRemoteLocation);
playerState = 0;
}
mouseState = 1;
} } else {
mouseState = 0;
}
if(playerState == 0){
} else {
OscMessage myMessage
= new OscMessage("/adx2/0/aisac 0 "+mouseX/480f);
oscP5.send(myMessage, myRemoteLocation);
myMessage = new OscMessage("/adx2/0/aisac 1 "+(1f-mouseY/240f));
oscP5.send(myMessage, myRemoteLocation);
ellipse(mouseX,mouseY,60,60);
描画処理
ウィンドウを
480x240
で表示背景を
204
色(グレー)で1
2
import oscP5.*;
import netP5.*;
OscP5 oscP5;
NetAddress myRemoteLocation;
void setup() {
size(480,240);
oscP5 = new OscP5(this,9000);
myRemoteLocation = new NetAddress("127.0.0.1",8000);
}
int playerState = 0;
int mouseState = 0;
void draw() {
background(204);
if(mousePressed) {
if(mouseState == 0){
if(playerState == 0){
OscMessage myMessage = new OscMessage("/adx2/0/playcueid 0");
oscP5.send(myMessage, myRemoteLocation);
playerState = 1;
} else if(playerState == 1){
OscMessage myMessage = new OscMessage("/adx2/0/stop");
oscP5.send(myMessage, myRemoteLocation);
playerState = 0;
}
mouseState = 1;
} } else {
mouseState = 0;
}
if(playerState == 0){
} else {
OscMessage myMessage
= new OscMessage("/adx2/0/aisac 0 "+mouseX/480f);
oscP5.send(myMessage, myRemoteLocation);
myMessage = new OscMessage("/adx2/0/aisac 1 "+(1f-mouseY/240f));
oscP5.send(myMessage, myRemoteLocation);
プログラムの流れ
起動直後一度呼ばれる
描画は毎度呼ばれる
1
2
import oscP5.*;
import netP5.*;
OscP5 oscP5;
NetAddress myRemoteLocation;
void setup() {
size(480,240);
oscP5 = new OscP5(this,9000);
myRemoteLocation = new NetAddress("127.0.0.1",8000);
}
int playerState = 0;
int mouseState = 0;
void draw() {
background(204);
if(mousePressed) {
if(mouseState == 0){
if(playerState == 0){
OscMessage myMessage = new OscMessage("/adx2/0/playcueid 0");
oscP5.send(myMessage, myRemoteLocation);
playerState = 1;
} else if(playerState == 1){
OscMessage myMessage = new OscMessage("/adx2/0/stop");
oscP5.send(myMessage, myRemoteLocation);
playerState = 0;
}
mouseState = 1;
} } else {
mouseState = 0;
}
if(playerState == 0){
} else {
OscMessage myMessage
= new OscMessage("/adx2/0/aisac 0 "+mouseX/480f);
oscP5.send(myMessage, myRemoteLocation);
myMessage = new OscMessage("/adx2/0/aisac 1 "+(1f-mouseY/240f));
oscP5.send(myMessage, myRemoteLocation);
ellipse(mouseX,mouseY,60,60);
通信処理
OSC
インポートOSC
アドレスをセット再生メッセージ
停止メッセージ
AISAC0
メッセージ1 3
2
4
import oscP5.*;
import netP5.*;
OscP5 oscP5;
NetAddress myRemoteLocation;
void setup() {
size(480,240);
oscP5 = new OscP5(this,9000);
myRemoteLocation = new NetAddress("127.0.0.1",8000);
}
int playerState = 0;
int mouseState = 0;
void draw() {
background(204);
if(mousePressed) {
if(mouseState == 0){
if(playerState == 0){
OscMessage myMessage = new OscMessage("/adx2/0/playcueid 0");
oscP5.send(myMessage, myRemoteLocation);
playerState = 1;
} else if(playerState == 1){
OscMessage myMessage = new OscMessage("/adx2/0/stop");
oscP5.send(myMessage, myRemoteLocation);
playerState = 0;
}
mouseState = 1;
} } else {
mouseState = 0;
}
if(playerState == 0){
} else {
OscMessage myMessage
= new OscMessage("/adx2/0/aisac 0 "+mouseX/480f);
oscP5.send(myMessage, myRemoteLocation);
myMessage = new OscMessage("/adx2/0/aisac 1 "+(1f-mouseY/240f));
oscP5.send(myMessage, myRemoteLocation);
ellipse(mouseX,mouseY,60,60);
}
判定の処理
マウス押されたら
再生中なら 再生中かどうか
マウス状態
1
2
3
チャレンジ(課題) 30 分
•
内容: 絵にあった変化を音に加えてみる。•
どちらか好きなものを選んで音をデザインしてみる。•
分からない事があれば、質問も受け付けます。•
内容:どんな音の変化があるか動かしながら考えてみる。•
ヒント:残響を増やすにはバスセンドを使う•
ヒント2
:バスセンドは閉じるのみのコントロール• C:\ADX2LE_Workshop\processingSample
\sketch_test1\ sketch_test1.pde
•
どんな音の変化があるか動かしながら考えてみる。•
ヒント:2つの音をクロスフェードするにはボリュームを使う
• C:\ADX2LE_Workshop\processingSample
\sketch_test2\sketch_test2.pde
インゲームプレビュー
•
【インゲームプレビュー】とは、ツール側で音を加工、編集した結果を
【実行中のゲーム】に送信し、
音を即時に差し替える技術です。
•
ゲームを中断させる事なく音の加工を反映させる事ができ るため、非常に細かい微調整が可能です。インゲーム接続
インゲームプレビューの開始
【
F10
キー】を押すまたは、【プレビューメニュー】から【インゲームプレビューの開 始】を選択
発音数や
CPU%
が変化していればこれからのサウンドデザインに 求められるもの
•
楽器や身の周りの音のなるも のもデザインの参考になります。
•
なぜ、その音が鳴っているの か?どう変化するのか?
意識してみます。
シンプルである事
•
なるべく少ない操作で、最大の効果を求め ます。
•
演奏しやすいインタラ クティブサウンドをデザインする事が良い です。
•
難しいと練習(ルール 設定)が必要になる音はこだわるべき
•
めっちゃ【凝って】良い。•
こだわりを捨てずに•
気持ちよい音を探求する。•
それが面白さや、楽しさに繋がる。サウンドデザインで リッチに!
•
シンプルプログラマを困らせな い
•
分かりやすさ効果的か、理論的か 客観的に判断