2007年09月09日
スピーカで好きな音をならす
micSpeaker links
昨日作ったスピーカにはscript(ソースはエントリーの最後)を使って
ちょっとした仕掛けを入れてあります。
チャットで指令を送ると指定された音が鳴るようにしてみました。
映像のチャットコマンドで打っているのは、これ。
”/2 harayoki.speakreq a842ec8d-aafe-7528-9f42-a91592a24dc7”
青字がチャンネル番号、緑字がおまじない、赤字がサウンドのキー値です。
チャンネル番号は好きな番号に変えられます。
(くわしくは後述。この映像の場合チャンネル2に設定してあります。)
おまじないはscriptで判別する命令名(ちょい長いけど気にしない)で、
サウンドのキーは鳴らしたい好きなサウンド指定します。
サウンドのキー値がわかれば、
スピーカの中にそのサウンドが含まれてなくとも、
自分の持ち物でなくとも、いきなり鳴らす事ができます。
ちょっと便利?
しかしこのスピーカはこうやって使うものではないのです。
次のエントリーに続く。
と、たったこれだけのエントリーを書くのにマシン
(VISTA)とかQuickTimeとかFlashとか色々調子悪くて半日以上かかってしまいました…。
QuickTimeは結局直らず。うーん。
昨日作ったスピーカにはscript(ソースはエントリーの最後)を使って
ちょっとした仕掛けを入れてあります。
チャットで指令を送ると指定された音が鳴るようにしてみました。
映像のチャットコマンドで打っているのは、これ。
”/2 harayoki.speakreq a842ec8d-aafe-7528-9f42-a91592a24dc7”
青字がチャンネル番号、緑字がおまじない、赤字がサウンドのキー値です。
チャンネル番号は好きな番号に変えられます。
(くわしくは後述。この映像の場合チャンネル2に設定してあります。)
おまじないはscriptで判別する命令名(ちょい長いけど気にしない)で、
サウンドのキーは鳴らしたい好きなサウンド指定します。
サウンドのキー値がわかれば、
スピーカの中にそのサウンドが含まれてなくとも、
自分の持ち物でなくとも、いきなり鳴らす事ができます。
ちょっと便利?
しかしこのスピーカはこうやって使うものではないのです。
次のエントリーに続く。
と、たったこれだけのエントリーを書くのにマシン
(VISTA)とかQuickTimeとかFlashとか色々調子悪くて半日以上かかってしまいました…。
QuickTimeは結局直らず。うーん。
◆パラメータ指定
オブジェクトのdescriptin欄には動作パラメータとして
チャットチャンネル番号(空白でデフォルト86492)
命令を受け付けるチャット送信元オブジェクト/アバタのキー値(空白で指定なし)
再生のづれ時間(解説は次回 空白で0秒)
を、コンマ区切りで指定して設定できます。
例) "2,,0"
本来descriptin欄はオブジェクトの詳細テキスト情報を書く部分ですが
rezしたオブジェクト毎に別の値を指定できるので
自分は動作パラメータを記述する欄としてよく利用しています。
◆ソースコード
オブジェクトのdescriptin欄には動作パラメータとして
チャットチャンネル番号(空白でデフォルト86492)
命令を受け付けるチャット送信元オブジェクト/アバタのキー値(空白で指定なし)
再生のづれ時間(解説は次回 空白で0秒)
を、コンマ区切りで指定して設定できます。
例) "2,,0"
本来descriptin欄はオブジェクトの詳細テキスト情報を書く部分ですが
rezしたオブジェクト毎に別の値を指定できるので
自分は動作パラメータを記述する欄としてよく利用しています。
◆ソースコード
integer debug = FALSE;
Trace(string s){
debug = TRUE;
if(debug) llOwnerSay(s);
}
integer initialized = FALSE;
key owner;
Init(){
if(initialized) return;
Trace("Init");
initialized = TRUE;
owner = llGetOwner();
string desc = llGetObjectDesc();
string s;
if(desc!=""){
list l = llParseStringKeepNulls(desc,[","],[]);
Trace("description param : "+llList2CSV(l));
ch = (integer)llList2String(l,0);
s = llList2String(l,1);
if(s!="") listenId = (key)s;
s = llList2String(l,2);
if(s!="") delay = (float)s;
}
llListen(ch,"",listenId,"");
Trace("channel : "+(string)ch+" key : "+(string)listenId+" delay :"+(string)delay);
}
integer ch = 86492;
key listenId = NULL_KEY;
float soundRange = 50.0;
float delay = 0.0;
string BROADCAST_COMMAND = "harayoki.speakreq";
Speak(list l){
Trace("Speak "+llList2CSV(l));
string sound = llList2String(l,1);
float vol = 1.0;
string s = llList2String(l,2);
if(s!="") vol= (float)llList2String(l,2);
llSetSoundRadius(soundRange);
llSleep(delay);
llPlaySound(sound,vol);
//llTriggerSoundLimited(sound, vol, llGetPos() + soundRange/2, llGetPos() - soundRange/2);
}
default{
state_entry(){
Init();
}
on_rez(integer num){
llResetScript();
}
touch_start(integer total_number){
if(llDetectedKey(0)==owner){
llResetScript();
}
}
listen(integer channnel,string name,key id,string mes){
list l = llParseString2List(mes,[" "],[]);
if(llList2String(l,0)==BROADCAST_COMMAND){
Speak(l);
}
}
}
Posted by harayoki at 02:00│Comments(0)
│マイク&スピーカセット