ソラマメブログ
< 2025年05月 >
S M T W T F S
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Mail

2007年10月24日

改:マイク&スピーカセット

micSpeaker links
改:マイク&スピーカセット

マイクをクリックしたときに、ダイアログでサウンドが選べるといいね、という
意見をもらったのでマッハで作ってみました。

改:マイク&スピーカセット
まず、マイクをタッチします。

改:マイク&スピーカセット
サウンド一覧のダイアログがでるので、鳴らしたいサウンドを選択します。
ダイアログはIgnoreを押すまで何度も出てきます。
(今まで通り、チャットでサウンドキーを指定しての操作も可能です。)

ちなみに、サウンドの数が多く、1つのダイアログに入りきらない際の処理は書いてません。
next、prevを出して制御する処理、めんどくさいので…。

そういうのは、モジュールが必要だなあ、モジュールが。
確かlslのイベントで階層化ダイアログモジュールを発表されてた方がいたはず…。


マイク側のソース
integer debug = FALSE;
Trace(string s){
//debug = TRUE;
if(debug) llOwnerSay(s);
}
integer ch = 86492;
Init(){
ResetChannel();
InitSoundList();
}
ResetChannel(){
Trace("ResetChannel");
string desc = llGetObjectDesc();
if(desc!=""){
ch = (integer)desc;
}
llListen(ch,"",llGetOwner(),"");
Trace("channel : "+(string)ch);
}
list soundList;
InitSoundList(){
Trace("InitSoundList");
soundList = [];
integer len = llGetInventoryNumber(INVENTORY_SOUND);
integer i;
for(i=0;i<len;i++){
soundList += [llGetInventoryName(INVENTORY_SOUND,i)];
}
}
ShowDialog(){
Trace("ShowDialog");
llDialog(llGetOwner(),"select sound",soundList,ch);
}
string LISTEN_COMMAND = "speak";
string BROADCAST_COMMAND = "harayoki.speakreq";
Speak(string soundName,string vol){
Trace("Speak "+soundName+" "+vol);
string soundKeyString = "";
if(llSubStringIndex(soundName,"#")==0){
//soundName is index number
integer i = (integer)llGetSubString(soundName,1,-1);
soundName = llList2String(soundList,i);
}
soundKeyString = (string)llGetInventoryKey(soundName);
if(soundKeyString==(string)NULL_KEY){
//soundName is key string
soundKeyString = soundName;
}
string s = BROADCAST_COMMAND+" "+soundKeyString+" "+vol;
Trace("Speak -> "+s);
llRegionSay(ch,s);
}
default{
state_entry(){
Init();
}
touch_start(integer total_number){
if(llDetectedKey(0)==llGetOwner()){
ResetChannel();
ShowDialog();
}
}
listen(integer cha,string name,key id,string mes){
integer index;
index = llListFindList(soundList,[mes]);
if(index!=-1){
Speak(mes,"1.0");
ShowDialog();
}else{
index = llSubStringIndex(mes,LISTEN_COMMAND+" ");
if(index==0){
list l = llParseString2List(mes,[" "],[]);
Speak(llList2String(l,1),llList2String(l,2));
}
}
}
changed(integer cha){
if(cha & CHANGED_INVENTORY){
InitSoundList();
}
}
}
// /86492 speak #0


改:マイク&スピーカセット
スタンドの形も若干修正しました。




同じカテゴリー(マイク&スピーカセット)の記事画像
マイク&スピーカセット
複数のスピーカをならす
スピーカで好きな音をならす
スピーカも作りました
マイクスタンドも作りました
マイク作りました
同じカテゴリー(マイク&スピーカセット)の記事
 マイク&スピーカセット (2007-10-24 07:47)
 複数のスピーカをならす (2007-09-09 04:38)
 スピーカで好きな音をならす (2007-09-09 02:00)
 スピーカも作りました (2007-09-08 03:57)
 マイクスタンドも作りました (2007-09-08 03:46)
 マイク作りました (2007-09-08 03:00)
この記事へのコメント
こんにちは

先日は Convention の会場で
お話いただきありがとうございます^^

ダイアログのモジュール使いますか!?
必要でしたら今度お渡ししますね~
Posted by Jvn Writer at 2007年10月24日 13:42
よし、つれた!

じゃなくて、Jvnさんこんばんは。
この間はありがとうございました。
ダイアログモジュールよろしくお願いします。

今回はノートカード記述じゃなくて(それはそれでスバラシイ)長いリストを渡して全部表示とかをやりたいんですが、そちらも対応してますか?

ノートカードって書き込めるとものすごく、いいんですけどねぇ…
ラインごとの操作で面倒くさそうではありますが。
Posted by harayoki at 2007年10月24日 21:11
つられましたw

可能です^^

Jvn.Logic.Ui.Dialog
がダイアログモジュール単体で

ノートカード読込は
Jvn.Logic.UI.Dialog.Calle.Note
になります

後者は、ノートからダイアログを呼びだすための別モジュールと考えてください。

引数は

ダイアログの種類(独自)
タイムアウトの時間
ダイアログ名(階層表示用)
メッセージ
ボタン名1
値1
ボタン名2
値2
...

というリストをシリアル化して、
リンクメッセージを投げればOKです

その辺の使いかたは
お渡ししたノートに書いてありますので、
見てみてください


もしくは、コンテンツ内のサウンドをダイアログに表示したい場合、
ノートカードのダイアログ種類に
Jvn.Logic.UI.Dialog.Inventory(1)と書けば
ダイアログを自動生成します

やりたい内容にもよりますが、
もしかしたらコチラのほうが手軽かも?

お試しください^^
Posted by Jvn Writer at 2007年10月25日 08:37
ありがとうございます。
まずはお手軽なほうでやってみますね。

誰ぞやから中規模な作りモノを引き受けちゃったので、ちょっと後になりそうですが。
Posted by harayoki at 2007年10月26日 08:40
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。