Difference between revisions of "UUID Song Generator"

From Second Life Wiki
Jump to navigation Jump to search
(Created page with '<lsl> // Sendao Goodman wrote this integer max_note=7; // change this to the # of notes available! float speed=2.0; // change this to the length to wait before playing the next ...')
 
m (<lsl> tag to <source>)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
<lsl>
<source lang="lsl2">
// Sendao Goodman wrote this
// Sendao Goodman wrote this


Line 12: Line 12:
loadNotes()
loadNotes()
{
{
     integer i = llGetNumberOfPrims();
     integer i;
     integer ln;
     integer ln;
      
      
     for( ln = 0; ln < max_note; ln++ ) {
     notes=[];
        notes=(notes=[])+notes+[-1];
    }
      
      
     // scan this object, find the note players
     for( i = llGetNumberOfPrims(); i > 0; i-- )
    while( i > 0 )
     {
     {
         ln = (integer)llGetLinkName(i);
         notes=(notes=[])+notes+[(integer)llGetLinkName(i)];
        if( ln > 0 || llGetLinkName(i) == "0" )
            notes = llListReplaceList(notes, [i], ln, ln);
        i--;
     }
     }


Line 81: Line 75:
     state_entry()
     state_entry()
     {
     {
        notes=[];
         loadNotes();
         loadNotes();
     }
     }
Line 101: Line 94:
             return;
             return;
         }
         }
//        llSay(0, "Play note " + (string)llList2Integer(playback,spot) + " link " + (string)(llList2Integer(notes,llList2Integer(playback,spot))));
         playNote( llList2Integer(playback,spot) );
         playNote( llList2Integer(playback,spot) );
//      llSay(0, "Play note " + (string)llList2Integer(playback,spot) + " link " + (string)(llList2Integer(notes,llList2Integer(playback,spot))));
     }
     }
}
}
</lsl>
</source>

Latest revision as of 10:16, 25 January 2015

// Sendao Goodman wrote this

integer max_note=7; // change this to the # of notes available!
float speed=2.0; // change this to the length to wait before playing the next note

//Don't change anything else yo
list playback;
integer spot;
list notes;

loadNotes()
{
    integer i;
    integer ln;
    
    notes=[];
    
    for( i = llGetNumberOfPrims(); i > 0; i-- )
    {
        notes=(notes=[])+notes+[(integer)llGetLinkName(i)];
    }

// we tell the players how long each sound is
    llMessageLinked(LINK_SET, 3, (string)speed, "");
}

list transformKey(key uuid_k, integer max_note)
{ // convert a key into a string of numbers
    string uuid = (string)uuid_k;
    list uuid_untrans = llParseString2List(uuid, ["", "-"], []);
    list uuid_new;
    string mark;
    integer val;
    float conval;
    
    integer len = llStringLength(uuid);
    uuid_new=[];
    while( len > 0 ) {
        len--;
        mark = llGetSubString(uuid,len,len);
        val = (integer)mark;
        if( val == 0 ) {
            if( mark == "a" ) 
                val = 10;
            else if( mark == "b" )
                val = 11;
            else if( mark == "c" )
                val = 12;
            else if( mark == "d" )
                val = 13;
            else if( mark == "e" )
                val = 14;
            else if( mark == "f" )
                val = 15;
        }
        conval = (float)val / 16.0;
        if( mark != "-" )
            uuid_new=(uuid_new=[]) + uuid_new + [(integer)(conval*(float)max_note)];
    }
    return uuid_new;
}

playNote( integer notenum ) // send the message to trigger the note
{
    llMessageLinked( llList2Integer(notes,notenum), 1, "", "" );
}
default
{
    on_rez(integer sp)
    {
        llResetScript();
    }
    
    state_entry()
    {
        loadNotes();
    }
    
    touch_start(integer total_number) // scan avatar key and start playback
    {
        playback = transformKey(llDetectedKey(0), max_note);
        spot = 0;
//        llSay(0, "Your adjusted key is " + llDumpList2String(playback, ","));
        llSetTimerEvent(speed);
    }

    timer() // timer is used to play each sound
    {
        spot++;
        if( spot >= llGetListLength(playback) ) {
            llSetTimerEvent(0.0);
            llSay(0, "Song complete.");
            return;
        }
        playNote( llList2Integer(playback,spot) );
//      llSay(0, "Play note " + (string)llList2Integer(playback,spot) + " link " + (string)(llList2Integer(notes,llList2Integer(playback,spot))));
    }
}