// Script Name: JukeTrack_v16_10_secs_looped.lsl //Play many wav sounds looped // Downloaded from : http://www.free-lsl-scripts.com/cgi/freescripts.plx?ID=1513 // This program is free software; you can redistribute it and/or modify it. // Additional Licenes may apply that prevent you from selling this code // and these licenses may require you to publish any changes you make on request. // // There are literally thousands of hours of work in these scripts. Please respect // the creators wishes and follow their license requirements. // // Any License information included herein must be included in any script you give out or use. // Licenses are included in the script or comments by the original author, in which case // the authors license must be followed. // A GNU license, if attached by the author, means the original code must be FREE. // Modifications can be made and products sold with the scripts in them. // You cannot attach a license to make this GNU License // more or less restrictive. see http://www.gnu.org/copyleft/gpl.html // Creative Commons licenses apply to all scripts from the Second Life // wiki and script library and are Copyrighted by Linden Lab. See // http://creativecommons.org/licenses/ // Please leave any author credits and headers intact in any script you use or publish. // If you don't like these restrictions, then don't use these scripts. //////////////////////// ORIGINAL AUTHORS CODE BEGINS //////////////////////////////////////////// float INTERVAL = 10.00; integer LISTEN_CHAN = 2000; integer SEND_CHAN = 2001; float VOLUME = 1.0; integer g_iSound; integer tottrack; integer g_iListenCtrl = -1; integer g_iPlaying; integer g_iLinked; integer g_iStop; integer g_iPod; string g_sLink; // DEBUG integer g_iWasLinked; integer g_iFinished; Initialize() { //llSetText(llGetObjectName(), <0, 100, 100>, 10); // reset listeners if ( g_iListenCtrl != -1 ) { llListenRemove(g_iListenCtrl); } g_iListenCtrl = llListen(LISTEN_CHAN,"","",""); g_iPlaying = 0; g_iLinked = 0; } PlaySong() { integer i; g_iPlaying = 1; //llWhisper(0,"Playing..."); llSetSoundQueueing(TRUE); tottrack = llGetInventoryNumber(INVENTORY_SOUND); llLoopSound(llGetInventoryName(INVENTORY_SOUND, 0),VOLUME); llPreloadSound(llGetInventoryName(INVENTORY_SOUND, 1)); llSetTimerEvent(5.0); // wait 5 seconds before queueing the second file g_iSound = 1; // for ( i = 1; i < tottrack; i++ ) // { // llPreloadSound(llGetInventoryName(INVENTORY_SOUND, i)); // } } StopSong() { g_iPlaying = 0; llWhisper(0,"Stopping..."); llStopSound(); llSetTimerEvent(0.0); } integer CheckLink() { string sLink; sLink = llGetLinkName(1); g_sLink = sLink; if ( llGetSubString(sLink,0,6) == "Jukebox" ) { return TRUE; } return FALSE; } default { state_entry() { Initialize(); } on_rez(integer start_param) { Initialize(); if ( start_param ) { g_iPod = start_param - 1; if ( g_iPod ) { llRequestPermissions(llGetOwner(),PERMISSION_ATTACH); } else { // Tell the controller what the CD key is so it can link llWhisper(SEND_CHAN,"LINK " + (string)llGetKey()); } } } changed(integer change) { if ( change == CHANGED_LINK ) { if ( llGetLinkNumber() == 0 ) { StopSong(); llDie(); } else { if ( g_iStop ) { llMessageLinked(1,llGetLinkNumber(),"UNLINK",""); } else { llMessageLinked(1,llGetLinkNumber(),"LINKID",""); g_iWasLinked = 1; } } } } attach(key id) { if ( id == NULL_KEY ) { llDie(); } else { PlaySong(); } } run_time_permissions(integer perm) { if ( perm == PERMISSION_ATTACH ) { llAttachToAvatar(ATTACH_LSHOULDER); llSetTexture("clear",ALL_SIDES); } } touch_start(integer total_number) { llWhisper(0,"Playing..."); integer i; for ( i = 0; i < total_number; i++ ) { if ( llDetectedKey(i) == llGetOwner() ) { //llWhisper(0,"DEBUG: g_iPlaying=" + (string)g_iPlaying); //llWhisper(0,"DEBUG: Link=" + (string)llGetLinkNumber()); //llWhisper(0,"DEBUG: g_iWasLinked=" + (string)g_iWasLinked); //llWhisper(0,"DEBUG: g_iFinished=" + (string)g_iFinished); if ( g_iPlaying ) { llWhisper(0,"Stopping..."); g_iPlaying = 0; llStopSound(); llSetTimerEvent(0.0); } else { PlaySong(); } } } } listen(integer channel, string name, key id, string message) { if ( message == "RESET" ) { if ( llGetLinkNumber() == 0 ) { llDie(); } else { llMessageLinked(1,llGetLinkNumber(),"UNLINK",""); } } if ( message == "STOP" ) { if ( g_iPod ) { StopSong(); llDetachFromAvatar(); } } } link_message(integer sender_num, integer num, string str, key id) { if ( str == "PLAY" ) { if ( !g_iPlaying ) { PlaySong(); } return; } if ( str == "STOP" ) { g_iStop = 1; StopSong(); llMessageLinked(1,llGetLinkNumber(),"UNLINK",""); } if ( str == "VOLUME" ) { VOLUME = (float)num / 10.0; llAdjustSoundVolume(VOLUME); } } timer() { if ( g_iPlaying ) { if ( g_iSound == 1 ) { llSetTimerEvent(INTERVAL); } llPlaySound(llGetInventoryName(INVENTORY_SOUND, g_iSound),VOLUME); if ( g_iSound < (tottrack - 1) ) { llPreloadSound(llGetInventoryName(INVENTORY_SOUND, g_iSound+1)); } g_iSound++; if ( g_iSound >= tottrack ) { //llSetTimerEvent(INTERVAL + 5.0); // g_iPlaying = 0; PlaySong(); } } else { if ( llGetLinkNumber() != 0 ) { llSetTimerEvent(0.0); if ( g_iPod ) { llWhisper(SEND_CHAN,"FINISH"); llDetachFromAvatar(); } else { llMessageLinked(1,0,"FINISH",""); g_iFinished = 1; } } } } }