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