Adsense

2007年10月7日日曜日

SLで音楽を楽しもう(続編

[音が鳴らない原因と対応を追記しています]
[ダイアログがでない対応を追記しています]

前のエントリの「SL で CD ですw」でご紹介した音楽を楽しむアイテムですが、お友達からの評判も上々かつお友達のテストのおかげで設定方法などこれまであまり理解できていなかったことがわかってきました。

で、、、こうなると「あれを加えて」「これをこうして、、、」というご要望をたくさんいただき、、、

まったく別物になるほどの修正・変更・追加を加えました。

名づけて、、、Music Ball (笑 ....(辞書玉から進歩しない。。。)

Byakko Cafe のほうに設置しているのは Yaz Mania という名前(!) になっちゃってますが。

これがその玉。。。
image

テクスチャを貼り付けただけ、、、進歩ね(笑

ご要望およびテストの結果、追加した機能は以下です。

1)ダイアログを使うようにしました
image
ダイアログを使ったことで、現状は以下の制限がでました。
  a) Notecard にいれる曲数は 10曲まで。1枚のダイアログには12個のボタンしかつけられないことからです。
  b) もちろん、、、複数のダイアログを使えば、それ以上登録可能ですが、現バージョンは10まで
  c) これら曲のボタンはNotecardから曲名(URLにある .mp3 ファイル名)を読み込んで表示されています。ボタンの数も Notecard の設定でスクリプトが処理してくれます。
(といっても、、List を変更しているだけ、、、)
touch イベントはこんな感じ、、、

    touch_start(integer nd){
        if (ownerstatus == TRUE) {
            gToucher = llDetectedKey(0);
            integer handle = llListen(-1122,"",gToucher,"");
            llListenControl(handle,TRUE);
            llDialog(gToucher,jString(gMsg4),musicList,-1122);
            llSetTimerEvent(20.0);
        } else {
            gToucher = llDetectedKey(0);
            integer handle = llListen(-1123,"",gToucher,"");
            llListenControl(handle,TRUE);
            llDialog(gToucher,jString(gMsg10),["RESET","OK"],-1123);
            llSetTimerEvent(20.0);
        }
    }

musicList という LIST が notecard から URL を読み込んで作成されます。
20秒だけ llListen を指定した マイナスのチャンネルを聞いています。20秒たったら llListenControl を使って OFF/FALSE にする SIM にやさいいスクリプトを目指してみました(笑
2)オーナー設定が適切でない場合の処理を盛り込みました。(ほんとうに盛り込み、、、)
a) Rez したときに Object Owner と Land Owner を比較して、同じでなければ以下のように llSetText でメッセージを表示。
image

そこの部分の処理は、以下みたいに llGetOwner() と llGetLandOwnerAt(llGetPos()) を比較しました。

ownerCheck() {
    ownerstatus = FALSE;
    if (llGetOwner()!=llGetLandOwnerAt(llGetPos())) {
        llWhisper(0,jString(gMsg1));
        llSetText(jString(gMsg9),<1,1,1>, 1.0);
    } else {
        llSetText("Please touch me\nto listen music",<1,1,1>,1.0);
        ownerstatus = TRUE;
    }
}

jString() は Base64 でグローバル変数として登録している日本語メッセージを String に変える関数を用意しました。関数を用意するほどじゃないけど、よく使うのでなるべく簡単にしようとw

string jString(string str) {
    return llBase64ToString(str);
}

たった、これだけですがw
日本語のメッセージを多用するときはとても楽です。
この状態で、たとえば Group 所有の土地だと、Deed (譲渡) してもスクリプトのリセットが必要なので、この時タッチしたら以下のダイアログを表示するようにしました。RESET ボタンが押されると、llResetScript() が走るだけの処理ですが。。。
image
Object の設定と Land オーナーの設定が同じときだけ、曲選択できるダイアログを表示するようにしています。
3) changed イベントで notecard の入れ替えに対応。
Notecard を入れ替えることで、自分の好きな曲(が保管されている URL) を差し替えることができますが、ノートカードのリロードをしなくてはなりません。なので、インベントリに変更があっきに llWhisper でノートカードのリロードをしてもらうようにメッセージを表示させてみました。

changed(integer mask) {
        if(mask & (CHANGED_INVENTORY|CHANGED_ALLOWED_DROP)) {
            llWhisper(0,jString(gMsg7));
        }
}

4) ノートカードから曲/URL を読み込んでいることを確認できるようにして、URL すべてを表示せずに、xxxx.mp3 の xxx だけを表示するようにしました
image
(くっ、、、Loading、、、d 多いし、、、)
みなさんから意見もらうと、次、これ加えよう、、、っていうモチベーションになりますね。。。
(ほめてくれたら、、、ですが、、、笑)
この音楽アイテムは ASUKA のクラブ雷神、Byakko の Byakko Cafe に設置しています~。

[追記 2007/10/8]
音がなりませーんという症状の原因と対策を追記します。
1) QuickTime が入ってなかった、、、
QuickTime がインストールされていないと、この Music Ball の音は聞けません。♪♪タブで音楽が聴けていても、だめなんです。QuickTime をインストールしてください。

2) 環境設定/Preferences の Audio&Video タブの [Play Streaming Video When Available (uses more bandwidth)] のチェックが入っていなかった、、、(日本語ベータ版の場合は以下 9) も参照してください)
QuickTime が入っていても、このチェックが入っていないと曲はきけません、、、

3) 環境設定/Preferences の Audio&Video タブの Volume で Media が最低になっていた、、、、
あい、、、これも NG です、、、Music Ball といいながら Media の機能を使っていますから、、、

4) どうにもこうにも原因がわからない、、、、
ありました、、、上記どれも OK なのに、、、
対応は キャッシュクリアです。キャッシュをクリアすることで曲が聴けるようになった人が数名いました。
環境設定/Preferences の Network タブのキャッシュクリアを試してみてください。

5) 曲が切れる、、、
これ、byakko カフェの現象ですが、、、カウンター向かって一番右端にある椅子のエリアは、、、パーセル(区画) が違います!
なので、となりのほうに移動すると区画が変わるので Media は無効になります。

6) 曲がきれる、、、
これも byakko カフェの現象なのですが、あのカウンターの椅子に座ったり、たったりといった change イベントがおこると、、、曲がとまります。。。海側の椅子とか、まったく問題がないのですが、このカウンターの椅子だけ、、、、曲が切れます。なので、カウンターに座ってから曲をきいてください、、、

7) ダイアログがでないときがある、、、
キャッシュクリアでなおるときと、時間がたてば直るときと両方確認しています、、、、これはよくわからない、、、のですが、特に ASUKA では Music Ball 上にカーソルをあたときに表示されるオブジェクトの説明で Owner が Retrieving... となっているときに発生しているみたいです。Owner センシティブなアイテムなので、そのあたりが関係しているのかもしれませんね、、、

8) ダイアログがでないときがある、、、2
タッチでダイアログがでるようにしているのですが、たまにでないときがあります。キャッシュクリアも既出でありますが、その前に右クリックでパイメニューを出して、Touch/触る(?) を選んでください。

9) 上記 2) と関連するのですが、、、Preferences/環境設定 で Audio&Video/音声とビデオ のタブに Streaming Preferences の項目がない、、、、?
現行日本語ベータ版のバグです。(^^; 本来 Streaming Preferences / たぶんストリーミング設定 という項目が、なぜか[ドップラー効果] になっています。ドップラー効果というセクションの [動画がある場合再生する(通信が重くなる)] のチェックを確認してください。
とりあえず、、、今確認できている「音が鳴らない原因と対応」でしたー