*****************************************************************************************************************;
*****************************************************************************************************************;
*****************************************************************************************************************;
;
;
;
0. Read This First!;
This is a tutorial score, provided to teach the user how to create custom scores;
READ THE FOLLOWING INFORMATION BEFORE BEGINNING!;
First Thing's First! If you want to make your own score, you need to copy this file!;
You will not be allowed to 'save over' this score until you replace it, so any changes you make will be deleted after you close the window;
To make your own, modifiable file, follow these instructions:;
~~~;
Go to the ‘Score View’ menu and select 'Save Score';
Make sure to save your score in the Saved Scores project folder. This will ensure that the score loads properly on launch.;
In your own saved version, feel free to delete all of this text and start fresh;
The original will be saved with the program, so don't worry about losing this tutorial!;
;
;
;
~~~;
*****************************************************************************************************************;
*****************************************************************************************************************;
*****************************************************************************************************************;
;
;
;
1. Introduction;
;
Now To Start The Tutorial!!!!;
;
Notice a few things before we begin! Each line of code in the score ends with a semi-colon;
This is crucial! Make sure you end each line of your code with a semi-colon as well;
This tells the system that you've finished a thought, and are ready to start your next thought;
;
~~~;
;
What are the scores, and what do they do?;
The scores are the most advanced way of creating automation for your modules;
They also allows you to breathe life into projects for easy and intuitive live performances;
They give you direct control over the System Board Metronome and allow you to fully customize your experience;
;
~~~;
;
How do scores function?;
The score are user-made sets of Events consisting of one or more Automation Messages;
Automation Messages are commands that control the various parameters in your modules, and around the system;
Events are sets of automation messages that you want to send out all at one time, to any part of your project;
Events are Triggered, or started, by the performer in or out of sequence, at any point that they need to be triggered;
Events can be Triggered one of the following ways:;
1. By using the Event Buttons on the Perfomer View;
2. By using the Event Buttons on the Score Player;
3. By properly setting up a Foot Pedal or Controller for the necessary function;
4. By using the Pitch-to-MIDI module to convert signals into MIDI control data;
5. By using the Metronome to trigger events at specific points in time.
;
;
;
~~~;
*****************************************************************************************************************;
*****************************************************************************************************************;
*****************************************************************************************************************;
2. The Automation Message;
;
Let's look at how to build automation messages first;
;
An Automation Message consists of Two Parts: The Automation ID, and one or more Parameter Commands;
;
It may be useful at this point to review Automation IDs, how they function, and what they do;
If you are unfamiliar with these concepts, go to our YouTube channel, where Automation is introduced in detail;
;
An automation message consists of a single line of code, set to change the parameters of a single module;
The first word of automation message will be the ID of the module you want to control;
For example, if we want to control a module called Echo1, we will want our message to read like this:;
****;
Echo1 p1 something, p2 "something something”… etc;
***;
^--- Check out the name that I gave that message.;
Starting the line with 'Echo1' will send all of the information out to the module with the “Echo1” ID!;
You can only choose one ID per line, so don't mix and match IDs in a single line. The system won't be sure what to do if you do!;
Also, remember that the ID MUST go at the beginning of the line. The system will ignore the message if you put the ID anywhere else;
;
~~~;
;
After we've placed our ID at the beginning of the line, we can decide how we want to change the parameters.;
This will make the most sense if you review the YouTube tutorial on Automation first;
Remember that each module is constructed of parameters that can be changed;
Most of these parameters can be controlled via automation messages in the automation board, Controller Board, or Metronome Contoller;
With the System Score we can control even more parameters and we can control modules in more depth!;
This is achieved through creation of Parameter Commands;
;
~~~;
;
Parameter Commands are the specific commands created to change parameters throughout modules and various System Board screens;
Parameter Commands consist of two parts;
The first part is the parameter number;
The second part is the value or values for the parameter;
;
~~~;
;
Look at the first example line again. After the word Echo1, we placed the word p1.;
We tell the system what parameter to change by writing 'p', followed by the number of the parameter.;
In other words, if we want to change the input of the Echo1 module, we state this by writing p1 for Parameter 1;
In the same way, changing the output would start with p2, and changing the volume would start with p3;
Remember that p1, p2, and p3 are *almost* always our Input, Output, and Volume controls;
There are different types of parameters though, and not all can be controlled the same way.;
;
;
;
~~~;
*****************************************************************************************************************;
~~~;
*****************************************************************************************************************;
;
;
;
2a. Different Types of Parameters;
;
Let's review the different types of parameters now and look at how to build commands for each;
;
~~~;
;
INPUT AND OUTPUT MENUS;
;
First there are inputs: This is the couplet of letter and number drop down menus;
In our system score, we can set our input by simply typing out the letter and number we want to set it to;
Here's an example message:;
***;
Echo1 p1 Mic 2;
***;
This message would set Echo1's input to Mic 2. With our system score, we can change inputs and outputs on the fly;
There are a few modules where we can choose two inputs;
In this case, we group them together into a single command;
Here's an example message:;
***;
Convolve1 p1 Mic 1 B 2;
***;
We just set the inputs of our Convolve1 module to Mic 1 and B 2;
Pretty easy, right?;
~~~;
;
Next let's review Outputs;
Outputs can be set the same way as inputs.;
The only difference is that we always have two options for outputs.;
This means that we'll have to provide two sets of choices;
Remember also that outputs are *almost* always parameter 2;
Here's an example message:;
***;
Echo1 p2 Master Out A 13;
***;
This message sets the first output of Echo1 to Master Out, and our second output to A 13;
Just like with our inputs, we can use the system score to change the routing at any time!;
;
~~~;
;
OTHER MENUS;
;
Sometimes we'll find other parameters that are menu-based. All non-input/output menus work a little bit differently;
In this case, we'll simply use a number, based on it's position in the menu list.;
The top-most menu item can be called by setting the number to 0, the second from the top is menu item 1, etc..;
The Degrade module has one such menu;
Look at the menu for parameter four, used to route the signal through either the Overdrive or Degrade effect;
The menu has three items to choose from.;
The first item in the menu is labelled "4. Choose Routing." This is non-functional, but is selected with the number 0;
The second item is Overdrive. This is selected with the number 1;
The third item is Degrade. This is selected with the number 2;
Choosing number 1 will set our parameter to Overdrive, and choosing number 2 will set it to Degrade;
Here's an example message:;
***;
Degrade1 p4 1;
***;
So, if we have a module named Degrade1, we just told it to set the menu to its Overdrive setting.;
;
~~~;
;
KNOBS, SLIDERS, AND NUMBER BOXES;
;
Knobs, Sliders, and Number Boxes are particularly fun to automate, as you can send them gliding from one position to another;
Watching a board full of knobs and boxes that are all moving at their own rate can be really fun!;
Setting these in motion requires a little more attention to detail, so let's look at how to do it.;
First, as always, we choose a parameter. Let's use volume as our example parameter... p3;
Volume is a knob, and so it can be sent to move between two states;
First, set the parameter to it's starting value. Here's an example message:;
***;
Echo1 p3 0.;
***;
This message sets our volume on Echo1 to start at 0, or silence.;
After a starting state is chosen, you can send it to a new location by giving it a Destination Value AND a Ramp Time.;
The Destination Value is the number you want the knob to move to.;
The Ramp Time is how long (in milliseconds), it will take to get there;
Here's an example message:;
***;
Echo1 p3 1.3 10000;
***;
We just set the volume knob on Echo1 to move to a value of 1.3 over 10 seconds of time;
Note that if we DON'T set a starting volume first, the knob will start moving from its current position.;
After the discussion of parameters, we'll look at how to make messages with multiple parameter settings;
This will make it easier to set the volume all at once;
Knobs, Number Boxes, and Sliders all work the same way.;
;
~~~;
;
MULTI-SLIDERS, EQ GRAPHS, AND LINE GRAPHS;
;
These controls are set with long messages. These are rarer, and are tricky;
Each of these requires knowing exactly how to build the message, and can not glide between values;
Setting these effects up requires inputting a string of numbers all as a single command.;
Pull up a StudioEQ module and you'll see there's a button that let's you view the parameter setting for the current EQ;
A similar button should exist for all of these multiple-value graphs.;
These parameters should be copied verbatim into the System Score.;
Let's look at an example of one of these long messages:;
***;
EQ1 p3 params 4 6986.908691 3.554371 0.924832 params 3 1307.57 2.688353 1.86785 params 2 353.243591 0.356756 1.762398 params 1 126.749527 1.024613 2.083906 params 0 38.909744 0.518315 1.510518;
***;
That's a long message! But it's got to be exactly right if you want the EQ to be set exactly this way. These are tricky, but can be well worth it;
Let's look at an example of the messages we get with the multi-slider in the Additive;
***;
Additivite1 p21 0.261364 0.522727 0.9 0.261364;
***;
Finally, here's an example of the line-graph in the Gater;
***;
Gater1 p10 0. 0. 1.904762 1. 35.238094 1. 47.142857 0.569767 53.333328 0. 100. 0.;
***;
;
~~~;
;
KEYBOARDS;
;
Keyboards send and receive midi note values. For reference, Middle C is Midi Note 60;
A good example of setting a keyboard is in the comb tool;
If we wanted to set the comb keyboard to A3, we'd want to use the value 57;
Here's an example message:;
***;
Comb1 p8 57;
***;
Here we sent the keyboard (parameter 8) the midi number for the A below middle C;
;
~~~;
;
TOGGLES and TOGGLING BUTTONS;
;
Toggles and Toggling Buttons only have two states. Off (0) and On (1);
To set the state, simply choose whether you want the toggle to be in the Off (0) or On (1) position;
Here's an example message:;
***;
Granulator1 p19 0;
***;
We just sent our granulator the command to toggle OFF the Start/Stop switch. Our Granulator has just stopped working!;
;
~~~;
;
NON-TOGGLING BUTTONS;
;
Non-Toggling buttons respond to any message, and will act as if they've been clicked, triggering their action;
Go ahead and send the button parameters any number or word;
Here's an example message:;
***;
Scratcher1 p10 scratchy;
***;
We just triggered the "Random Chop" button on our scratcher, using the word scratchy! Remember that any number or word will do!;
;
~~~;
;
FILE PLAYERS;
;
The File Player and EZ File Play both provide the ability to load audio files.;
The System Score actually CAN load audio files directly into a module, as long as the file exists in your project’s Audio Files folder.;
Any file that’s been added via the Audio File manager will already be in the right place, although files may be added manually;
Once you've placed the audio file into the folder, loading it is as simple as adding the name of the file to the proper parameter;
In most modules that use files, this is parameter 1, but you’ll want to check for each module you plan on using;
Here's an example message:;
***;
FilePlay1 p1 testaudio.wav;
***;
In this example we loaded a file called testaudio.wav into the normal file player;
~~~;
;
;
;
~~~;
*****************************************************************************************************************;
~~~;
*****************************************************************************************************************;
2b. Automation Messages with Multiple Parameter Commands;
;
All of the demonstration Automation Messages shown in the section above contained a single Parameter Command;
One thing that makes scores so powerful is its ability to combine Multiple Parameter Commands onto a Single Automation Message;
This is done simply by adding a comma at the end of the command, and then beginning a new command!;
Here's an example message:;
***;
Echo1 p3 0., p1 Mic 2, p2 Master Out Z 12, p4 0., p4 10000 5000, p3 1.3 10000;
***;
This Automation Message contains six Parameter Commands, separated by commas;
Notice that we don't put the semi-colon in until the END of the Automation Message;
The commands do NOT need to follow the parameter number order;
IMPORTANTLY, commands are executed one at a time, in order from left to right;
That means that:;
The First event in the message sets volume to zero immediately;
The Second event sets the inputs immediately. The Third event sets the outputs immediately;
The Fourth event sets the delay to 0 immediately;
The Fifth event moves the delay to 10000, over 5 seconds;
The Sixth event moves the volume to 1.3 over 10 seconds;
The semi-colon states that the message is over.;
;
;
;
~~~;
*****************************************************************************************************************;
~~~;
*****************************************************************************************************************;
2c. Leaving comments to yourself;
;
As you build your score, you might find it to be useful to leave messages to yourself about what you're doing;
These messages are called Comments, and won't affect the way to score works;
To make a comment, start a line with the ID MSDP_COMMENT (all caps);
You can write anything you want in the comment line, and it will be ignored. It's important to avoid ONE THING in your comment:;
DO NOT WRITE A SEMI-COLON FOR ANY REASON OTHER THAN TO END YOUR COMMENT LINE;
Here's an example comment:;
***;
MSDP_COMMENT ///This is an example comment. It won't do anything!///;
***;
Note that I started and ended the comment with three dashes. Because they are part of the comment, the dashes don't do anything;
I like to add the dashes to make it easier for me to see comments.;
Consider adding dashes or your own symbols to make your comments easier to see in the score;
;
;
;
~~~;
*****************************************************************************************************************;
*****************************************************************************************************************;
*****************************************************************************************************************;
;
3. Events;
;
3a. Introduction to Events.;
;
An Event is a collection of Automation Messages and comments that will be triggered and sent out together.;
Remember that the scores are constructed as a sequence of events that the performer will move through one at a time;
An Event consists of two parts:;
1. One or more Automation Messages;
2. The Event Number; 
The Event Number is a Line consisting only of a number and a semi-colon;
;
The Automation Messages come first;
There is no limit to the number of messages that can be grouped together into an event.;
;
The Event number must come after the last Automation Message for the event;
The Event number signifies the end of the current event;
The First Event is Event 0, the Second Event is Event 1, etc...;
;
;
;
~~~;
*****************************************************************************************************************;
~~~;
*****************************************************************************************************************;
;
3a. An Example Event;
;
Here's an example event;
;
;
;
***;
MSDP_COMMENT ///Here's where the Event Begins///;
FilePlay1 p1 test.aiff, p2 Master Out A 1, p3 1.;
Echo1 p1 A 1, p2 Master Out A 6, p3 0., p3 1. 20000, p5 100., p5 10000 2000;
Delay1 p1 A 1, p2 Master Out A 7, p3 0., p3 1. 10000, p4 5000;
MSDP_MESSAGE This is the First Example Event;
MSDP_DScore p4 delay.txt;
COMMENT ///This is the end of the event///;
0;
***;
;
;
;
This event consisted of five automation messages, two comments, and the event number 0 at the end;
Some of these automation messages use special IDs that control unique parts of the system.;
We'll cover these and more, later in the tutorial.;
;
Events are executed in sequence from top to bottom;
Each automation message sends its parameter controls in sequence from left to right.;
So the first the that happens in our example is that the Comment is sent out;
This doesn't do anything other than send the comment to the Score Player.;
Next, the Echo1 automation message goes out.;
The input is set, the outputs are set, the volume is set then moved, and the delay is set then moved.;
Next, the Delay1 automation message goes out;
Then, in sequence, the MSDP_MESSAGE, MSDP_DScore, and MSDP_COMMENT commands are sent out.;
Finally, the event is finished, signaled by the Event Number 0.;
;
;
;
~~~;
*****************************************************************************************************************;
*****************************************************************************************************************;
*****************************************************************************************************************;
;
4. Controlling the Scores;
;
The Scores can be controlled from one of seven locations:;
1. The Performer View;
2. The Score Player;
3. Pedals or Controllers;
4. The Metronome Controller;
5. The Signal-to-MIDI Module;
6. Other Scores;
7. The Same Score!;
;
Events can be triggered sequentially by hitting the "next event" button in the Performer view,;
Or by sending a command to parameter P1 for any of the scores from automation locations;
Or by pressing the correct Controller or playing the correct Pitch, as set by the “Control Method” and “Control Value” in the Score Player;
Alternately, events may be queued to trigger in any order by selecting the desired number from the "Choose Event" number box, then hitting Enter.;
If a new event is selected from "Choose Event", then hitting "Next Event" will move to the event and begin the event.;
;
;
;
~~~;
*****************************************************************************************************************;
~~~;
*****************************************************************************************************************;
;
4a. The System Score Controls;
;
With the Performer View toggled open, event controls can be found on the right side of the window;
If the Score Player is opened, the same controls will be found, but with more options.;
The Score Player can be found in the 'Music_SDP Windows' and 'Scores’ menus on the menu bar.;
;
~~~;
;
The Current Event Display;
The top control is the Current Event, which is really just a display of the event that was recently loaded;
The Current Event is only displayed properly if the event has a special automation message added to the end of it;
This special message requires the ID 'eventnum' followed by the number you want to display;
A demonstration of this can be seen in the earlier example event;
This message will be covered in more detail in the next chapter: Customizing Music_SDP;
;
~~~;
;
The Next Event Button;
This button, when pressed, moves the System Score forward one event, triggering all of the automation messages in that event;
;
~~~;
;
The Reset Score Button;
This button, when pressed, moves the System Score back to Event 0. Resetting the score Does NOT trigger Event 0.;
In order to trigger Event 0, once the Reset Button has been set, the Next Event button needs to be pressed.;
;
~~~;
;
Skip to Event #;
Entering a number into this number box (and then hitting Return or Enter) will automatically move the score to this event.;
Once Return or Enter has been pressed, the System Score will move to the selected event and the event will automatically trigger;
;
;
;
;
~~~;
*****************************************************************************************************************;
~~~;
*****************************************************************************************************************;
;
4b. Foot Pedal and Controller Setup;
;
During a performance, it might not always be convenient to work with the keyboard and mouse.;
You might not be able to take your hands away from your instrument, or you may be working in multiple programs.;
The Foot Pedal and Controller Setup has been created specifically to address this issue.;
;
(Unfortunately, I haven't finished this section yet. This will be completed in a future update);
;
;
;
;
~~~;
*****************************************************************************************************************;
*****************************************************************************************************************;
*****************************************************************************************************************;
;
5. The Performer View;
;
THE EVENT NUMBER;
;
When cycling through the system score, it's useful to keep track of the current event without having the score opened.;
Unfortunately, the only way to view the current event is to set it to display with a special message;
The ID for this message is 'eventnum'. After the ID is set, enter the event number you want to display.; 
Creating this message will make the event number show up on the Performer View and the Score Player when the event is triggered;
Here's an example message:;
***;
eventnum 6;
***;
This simple message sets the Current Event display to show the number 6 when the event is triggered.;
;
THE MESSAGE VIEWER;
;
While performing, it is often useful to have a little information displayed with the current event.;
The Message Viewer can be found above the Performer View Mixer, and in the Score Player.;
The viewer isn't very large, so it's important to keep your message brief.;
This information in your message could be whatever you need.;
Maybe you want to display the measure number for the next event.;
Maybe you want to display a little information about what's happening at that event!;
;
The Message Viewer is controlled with the ‘MSDP_MESSAGE’ ID;
Follow the ID up with the message you'd like to display with the current event;
Here's an example message:;
***;
MSDP_MESSAGE This is a Demonstration Message;
***;
This automation message will send the above sentence to the Performer View and the Score Player;
Remember that semi-colons finish lines in the score, so don't place a semi-colon in the middle of your message.;
;
;
;
;
~~~;
*****************************************************************************************************************;
*****************************************************************************************************************;
*****************************************************************************************************************;
*****************************************************************************************************************;
6. Secondary Scores;
;
Two other scores exist that compliment and expand upon the capabilities of the main System Score.;
These other scores are: The Delay Score and the Repeat Score;
These scores can be written following the same structure as the System Score, but each operates slightly differently;
*****************************************************************************************************************;
~~~;
*****************************************************************************************************************;
6a. Controlling the Secondary Scores;
Secondary scores can not be controlled via direct MIDI data, and lack the option to set a pitch or control value to move forward;
Instead, secondary scores must be controlled via automation messages;
They may be triggered by other scores, or by custom designed messages in automation boards, or by creating controller or metronome automation;
*****************************************************************************************************************;
~~~;
*****************************************************************************************************************;
6b. The Delay Score;
The Delay Score functions identically to the System Score, but it includes a changeable delay time.;
This delay time determines an amount of time between when an event is triggered, and when the messages in the event are actually distributed.;
If you need to wait a specific amount of time AFTER the beginning of an event for other events to happen, the Delay Score makes this possible;
*****************************************************************************************************************;
~~~;
*****************************************************************************************************************;
6c The Repeat Score;
The Repeat Score functions identically to the System Score, but it include a repeat on/off toggle and a delay time.;
When the repeat toggle is on, the message will be re-triggered after the predetermined delay time has passed.;
The event will continue to re-trigger at this interval until the repeat toggle is turned off, or until a different event is triggered in the repeat score;
;
;
~~~;
*****************************************************************************************************************;
*****************************************************************************************************************;
*****************************************************************************************************************;
7. End of Tutorial;
The following section provides a set of complex and complete sample events;
;
;
;
***;
MSDP_COMMENT ///LOAD THE NECESSARY FILES INTO FILE PLAYERS///;
File1 p1 testaudio.wav, p2 Master Out A 1, p3 1.0, p4 0, p5 1, p6 1., p7 0;
File2 p1 testtudio2.mp3, p2 Master Out A 2, p3 1.0, p4 0, p5 0, p6 0.5, p7 1, p8 1.5;
MSDP_COMMENT ///SETUP THE ECHO, SHIFT, AND DEGRADE EFFECTS///;
Echo1 p1 A 1, p2 Master Out Z 0, p3 0.0, p4 1000, p5 0.85, p6 0, p7 0;
Shift1 p1 A 2, p2 Master Out Z 0, p3 0.0, p4 -12, p5 0, p6 0, p7 0, p8 0, p9 0, p10 0;
Degrade1 p1 A 1, p2 Master Out Z 0, p3 0.0, p4 2, p5 1.0;
MSDP_COMMENT ///SETUP THE METRONOME///;
MSDP_Metronome p1 60, p2 4;
MSDP_COMMENT ///SEND TWO MESSAGES TO THE DELAY SCORE///;
MSDP_DScore p4 delay.txt, p5 0.5;
MSDP_DScore p1 bang;
MSDP_COMMENT ///SEND TWO MESSAGES TO THE REPEAT SCORE///;
MSDP_RScore p5 delay.txt, p3 1, p6 0.5;
MSDP_RScore p1 bang;
COMMENT ///THE FINAL BITS///;
MSDP_MESSAGE Begin the Demo;
1;
MSDP_COMMENT ///PLAY THE FILES///;
File1 p4 1;
File2 p4 1;
MSDP_COMMENT ///CHANGE THE EFFECTS///;
Echo1 p3 1.0 1000, p4 10000 10000;
Shift1 p3 1.0 2000, p5 0.2 2000, p6 -12, p7 12, p8 1;
Degrade1 p3 1.0 4000, p5 0.25 6000;
COMMENT ///START THE METRONOME///;
MSDP_Metronome toggle 1;
MSDP_COMMENT ///SEND A MESSAGE TO THE REPEAT SCORE///;
MSDP_RScore p3 0;
MSDP_COMMENT ///THE FINAL BITS///;
MSDP_MESSAGE Start the Files and Change the parameters;
2;
***;
;
;
;
~~~;
*****************************************************************************************************************;
*****************************************************************************************************************;
*****************************************************************************************************************;
*****************************************************************************************************************;
*****************************************************************************************************************;
*****************************************************************************************************************;
*****************************************************************************************************************;