Music Timing

Timing
When I reference timing in this article I am referencing the time it takes to get through a pause of that time. For example:


 * When I reference to a timing of 4 I am referencing how long it takes to get through "/pause 4".

Basic Flourish, Chorus, and Intro timing
It seems to me that each flourish within a song has the same timing, as well as the songs intro and "chorus", the music that plays without flourishes. This means that if you put the same pauses between flourishes, if the work I have done is correct, you should never hear the chorus. Or say you wanted to hear the chorus twice between each flourish, then you would put 3 /pause x; commands after the flourish, where x is the timing of the song.


 * Note: flourishes and band flourishes have the same timing and the same sound per instrument.


 * Note: the reason I say "basic" is that some of the flourishes have different timings than the song, but the difference is not enough to happer the flow of the music (this is explained more in the Methodology  section).  However, this becomes a problem when you want to do more advanced stuff like put an effect in the middle of a flourish or kill your holograms at the end of a flourish for your solo finish.

First Steps
To figure out the timing I wrote various scripts with the pause information. In the beginning this was really tedious because I did not yet know if everthing had the same timing (in fact I assumed it didn't). This cause me to write shorter scripts to originally figure out the timing of the intro and chorus. This script looked somthing like this:


 * Macro Name: tim4
 * /echo start;
 * /startmusic virtuoso; /pause 4;
 * /echo 1;
 * /pause 4; /echo 2;
 * /pause 4; /echo 3;
 * /pause 4: /echo restart;
 * /macro tim4;
 * /pause 4: /echo restart;
 * /macro tim4;

Basically if the beginning of the chorus started at 1, it should start at 2, 3 all the way to restart. If it ended at 1 then it should end at restart. (I didn't keept a copy of the actual script I used, but in this case it would be the former, if you add /pause 4 before /echo 1; it would end on 1). To my joy and suprise, the intro and the chorus had the same timing (this follows from how the chorus works, since the chorus started at 1, the intro ended at 1). However, I did not know yet if this worked for ever single song. Nor was I going to immediately find out, I wanted to get something up for flourishes on virtuoso first.

Figuring out Flourish Timing
Having figured out that the chorus and the intro had the same timing, I decided to make a test to figure out if the same could be said of the flourishes. This time I used two different scripts because I got tired of reading the "You are already playing music" on screen error. These scripts looked like this:


 * Macro Name: startmu4
 * /startmusic virtuoso;
 * /pause 4;
 * /macro timing4;


 * Macro Name: timing4;
 * /echo start
 * /pause 4;
 * /bandflourish 1; /echo 1; /pause 4;
 * /bandflourish 2; /echo 2; /pause 4;
 * /bandflourish 3; /echo 3; /pause 4;
 * /bandflourish 4; /echo 4; /pause 4;
 * /bandflourish 5; /echo 5; /pause 4;
 * /bandflourish 6; /echo 6; /pause 4;
 * /bandflourish 7; /echo 7; /pause 4;
 * /bandflourish 8; /echo 8; /pause 4;
 * /pause 4;
 * /macro timing4;

I used the startmu4 macro to make everything uniform and to take out some human error (otherwise, I would have had to time when to start the timing script, not that it mattters too much). For the timing to be about the same after start I should hear the chorus once, which I did, then each flourish one after the other, without hearing the chorus once. Then at the end, if the timing is right, I should hear the chorus twice and then everything repeated again. This worked, so I started testing other songs and found (this time not to my suprise) that this script didn't produce the desired result from every song.

Generic Form
As a result of this data I developed new scripts to figure out the timing of each song (well I used the same scripts but replaced the song name in each script). The macros for this looked like this:


 * X = any rational number greater than 0 (replace x with that number in the script)
 * SONG = any song in SWG (replace song with any song)


 * Macro Name: startmux
 * /startmusic SONG;
 * /pause X;
 * /macro timingX;


 * Macro Name: timingX;
 * /echo start
 * /pause X;
 * /bandflourish 1; /echo 1; /pause X;
 * /bandflourish 2; /echo 2; /pause X;
 * /bandflourish 3; /echo 3; /pause X;
 * /bandflourish 4; /echo 4; /pause X;
 * /bandflourish 5; /echo 5; /pause X;
 * /bandflourish 6; /echo 6; /pause X;
 * /bandflourish 7; /echo 7; /pause X;
 * /bandflourish 8; /echo 8; /pause X;
 * /pause X;
 * /macro timingX;

I did a little bit of legwork by listening to the chorus of the song before actually testing the script to develop a hypothesis as to what pause timing I felt it should have (this saved time by writing scripts that tested only the timings I thought the songs had; however, I was wrong a lot so this only saved some time).

Summary and Info for further Research
This was the processed I used to figure out the timing for each song. As I alluded to earlier, this only helps with the "flow". The timing for music flourishes doesn't have to be perfect in order for it to sound good, just close. For more advanced things, like performing an effect at a certain time within a flourish, it is necessary to know how long each flourish really lasts, not when you need to perform the next flourish so that the next sound bite isn't the chorus. The latter is what is currently shown here. Hopefully the exact timings will be listed soon, but this takes a lot more time to figure out. The primary reason for this is that if the flourish is not performed soon enough, the chorus is played and then the flourish. This would suggest that SWG uses some type of stack to address when each flourish should be performed. I have found that if the timing is too fast (for instance if a song has a timing of 13 and you use a timing of 4) you will never, ever hear the chorus using these scripts. Furthurmore, if you use a /dump command after letting one of these scripts play for awhile, it takes quite a bit of time to return to the chorus, if you don't just stop playing (which clears the stack, at least this is my hypothesis).

Song Timing
Before reading this part it is suggested that you at least read Timing.

Shorter songs are on the left while longer songs are on the right.

To Do

 * 1) Need to get both Calypso and Western in the table.
 * 2) Need to get the specific timing of every flourish for every song.
 * The best way to do this (I think), are these two macros:
 * X refers to pause time for the flourish (you hypothesis)
 * Y refers to the flourish number
 * Z refers to the general song pause time
 * SONG refers to the song


 * Macro Name: teststart
 * /startmusic SONG; /pause Z;
 * /macro testflourish;


 * Macro Name: testflourish
 * /pause Z;
 * /flourish Y; /pause X;
 * /spotlight; /pause Z;
 * /macro testflourish;


 * The reason I loop the second script is so you can edit it while it is running (saving some time). After it loops it will run the changes you made (has to finish the loop it was on when you pressed "ok").  If spotlight starts right at the end of the song, you have the timing right.  If it starts at the beginning of the chorus, you are close to having it right.  Once you have it right, change X and repeat.  Once you have every flourish for the song, change SONG and repeat.  Fun right?