サウンドファイルを再生するスクリプトです。
通常サウンドファイルは、1つのファイルで最大10秒までしか再生できませんが、
複数のサウンドファイルを連続再生させることにより、4,5分あるような曲でも再生
することが可能です。SL内で音楽を楽しみたいあなたへw
ちなみにクリスマスも近いので、ワムのラストクリスマスが流れるスクリプトを作ってみました。
ページの最後に記載しているUUIDバージョンのスクリプトを使えばサウンドファイルは
不要なのでスクリプトのみでラストクリスマスを再生可能です。どうぞお試しくださいw

「スクリプト内容」
//
// SHOP ZERO Tips44 SoundPlay Script v1.0
//
// Created by Zero2000 Kidd 2009/12/16
//
string title="Last Christmas ♪";
float soundtime=10;
integer handle;
integer input_ch=-44;
list mlist=["Play","Stop"];
integer soundcount;
integer playnumber;
integer ItemType=INVENTORY_SOUND;
PlaySound (float i) {
string soundname=llGetInventoryName(ItemType, playnumber);
llPlaySound(soundname,i);
playnumber++;
if (playnumber>=soundcount) {
playnumber=0;
llSetTimerEvent(soundtime);
}
}
preload() {
playnumber=0;
integer i;
soundcount = llGetInventoryNumber(ItemType);
for (i = 0; i < soundcount; i++) {
llPreloadSound(llGetInventoryName(ItemType,i));
llSetText("Preload Now ...\n("+(string)(i+1)+"/"+(string)soundcount+")", <1,1,1>, 1.0);
}
llSetText("Preload Complete.", <1,1,1>, 1.0);
llSleep(1.0);
llSetText("- PLAY -\n"+title, <0,1,0>, 1.0);
llSleep(1.0);
llSetTimerEvent(soundtime);
PlaySound(1.0);
}
default
{
touch_start(integer total_number) {
handle = llListen(input_ch, "", llDetectedKey(0), "");
llDialog(llDetectedKey(0), "Please select menu.", mlist, input_ch);
}
listen(integer ch, string name, key id, string message) {
if (message=="Play") {
preload();
} else if (message=="Stop") {
llSetText("music stop...", <1,1,1>, 1.0);
PlaySound(0.0);
llSetTimerEvent(0.0);
llSleep(soundtime);
llSetText("- STOP -\n"+title, <1,1,1>, 1.0);
}
}
timer() {
PlaySound(1.0);
}
}
「使用方法」
1. オブジェクトを1つ作成します。(球でもボックスでも何でも構いません。)
2. オブジェクトにスクリプトをドラッグします。
3. サウンドファイルをオブジェクトのコンテンツの中に入れます。
注)サウンドファイルは名前の若い順に再生されます。サウンドが順番通りに
再生されるように、ファイル名を再生順にナンバリングして下さい。
4. スクリプトの下記の部分に1つのサウンドファイルの再生時間(秒)を設定します。
float soundtime=10;
5. オブジェクをクリックし、ダイアログからPlayを選択するとサウンドファイルを
読み込み後に音楽が再生されます。
6. 再度オブジェクトをクリックし、Stopを選択すると再生を停止します。
「サウンドファイルについて」
SLのサウンドファイルの再生時間は最大で10秒です。1曲が4,5分もあるような曲を
まるごと再生するには複数のサウンドファイルをつなぎ合わせて再生してあげる
必要があります。オブジェクトのコンテンツの中には、以下のように複数のサウンド
ファイルを入れる必要があります。
1曲5分ある曲だと、5 x 60 = 300秒になるので、サウンドファイルは30個必要です。
全部アップロードすると300L$かかるので結構お金かかりますね^^;
サウンドファイルの作成方法は下記のShuさんのサイトが参考になるかと思います。
サウンドのアップロード
「スクリプトの説明」
スクリプトの流れとしては、サウンドファイルを1ファイルずつダウンロード
した後に、タイマーを使用して1ファイルずつサウンドを再生します。
サウンドファイルのダウンロードにはllPreloadSoundという関数を使用します。
サウンドファイルを予めダウンロードすることにより、サウンドのデータが
ビューア内にキャッシュされますのでスムーズな音楽再生が可能になります。
音楽の再生には、llPlaySoundを使用します。
「UUIDバージョン」
サウンドの再生には、ファイルの名前またはUUIDを指定します。
ファイルの名前を指定した場合は、スクリプトが入っているオブジェクト内に
サウンドファイルが必要ですが、UUID指定の場合はサウンドファイルは不要です。
以下は、サウンド再生にUUIDを使用した場合のスクリプトです。
-- ラストクリスマス♪ by ワム --
//
// SHOP ZERO Tips44 SoundPlay-UUID Script v1.0
//
// Created by Zero2000 Kidd 2009/12/16
//
string title="Last Christmas ♪";
float soundtime=10;
integer handle;
integer input_ch=-44;
list mlist=["Play","Stop"];
integer soundcount;
integer playnumber;
list soundlist=["6bdb3b97-5cfa-fc82-6dfb-8beac14ff5cc",
"31485078-58fb-08b2-784b-f0d56b99f1a2",
"84200fb0-6c51-c3cf-5418-2e2ddda97c34",
"9ceb4b65-be84-957f-b1d3-8e7262cfe986",
"4cf83abf-7c18-3772-877d-0b02df32b5a5",
"522c32f7-d3c2-4d7a-ac52-8ec07761f5a6",
"2f463688-28da-07d3-3464-ea650c978bd5",
"fafe0b93-b2fa-7d8c-0319-c15038b731e8",
"e36922ac-fac0-9fb2-b197-d675d2bb1eb8",
"3386451b-036e-2a2a-80f3-4e6c611e509c",
"24076703-b7c0-a3dd-c85f-731424419114",
"a9f24e02-d18e-d80c-a762-5a623e1f5c95",
"c3197418-c92c-cf2e-04df-6c24dd50f99a",
"0457fa17-7a72-ea78-59dd-fca573d6ffd8",
"d4ccf573-f04d-2ffe-0960-8b044c7a2856",
"6169cf72-7d06-44a8-5634-09044450c250",
"42dad560-fe5f-c12f-b3fc-bd694498cb75",
"a0dfb2be-fc00-9662-2776-e1325fb9d528",
"e7399880-2f6e-54cf-9b6c-a20e051aa481",
"3fa3ae04-3dff-67fc-fa6e-acc2e65deb32",
"0f94db41-62d5-e32b-2fcc-fb449655aa88",
"9e87cf5b-92f8-5c8b-0154-f66444440cf1",
"1f9376cf-f2cd-cf76-eccc-2599fddebcfb",
"c8e58dd7-ece3-285f-8071-99a160eef118",
"56526419-dcf0-1da3-e491-4545ebfdfd57",
"43b50258-6a1b-d606-e014-8b94030cc7fb",
"12302bb1-1d9a-10f3-94d1-7c1304b866c9"];
PlaySound (float i) {
key soundkey=llList2Key(soundlist, playnumber);
llPlaySound(soundkey,i);
playnumber++;
if (playnumber>=soundcount) {
playnumber=0;
llSetTimerEvent(soundtime);
}
}
preload() {
playnumber=0;
integer i;
soundcount = llGetListLength(soundlist);
for (i = 0; i < soundcount; i++) {
llPreloadSound(llList2Key(soundlist, i));
llSetText("Preload Now ...\n("+(string)(i+1)+"/"+(string)soundcount+")", <1,1,1>, 1.0);
}
llSetText("Preload Complete.", <1,1,1>, 1.0);
llSleep(1.0);
llSetText("- PLAY -\n"+title, <0,1,0>, 1.0);
llSleep(1.0);
llSetTimerEvent(soundtime);
PlaySound(1.0);
}
default
{
touch_start(integer total_number) {
handle = llListen(input_ch, "", llDetectedKey(0), "");
llDialog(llDetectedKey(0), "Please select menu.", mlist, input_ch);
}
listen(integer ch, string name, key id, string message) {
if (message=="Play") {
preload();
} else if (message=="Stop") {
llSetText("music stop...", <1,1,1>, 1.0);
PlaySound(0.0);
llSetTimerEvent(0.0);
llSleep(soundtime);
llSetText("- STOP -\n"+title, <1,1,1>, 1.0);
}
}
timer() {
PlaySound(1.0);
}
}
リンデンスクリプト Tips Indexへ