Graveyard Skulls VSA Programming Tutorial
Please start with the following:
Read the directions. Go to the "Help" tab in the menu at the top of VSA, and read through the topics.
Then, Read the Tutorial on setting up the SSC-32 on this website (found HERE)
You may also want to look over the FAQs on the Brookshire Software website found HERE.
If none of that helps, continue to read below and follow along step by step.
![]() |
Step 1: As mentioned above, read the tutorial on setting up the SSC-32 first, then for the purposes of this tutorial, we will ask you to attach one servo to the SSC-32 on the servo output marked "0" as shown to the left circled in red.
The servo should plug in so that the black wire is on the pin to the far outside edge of the board, the red wire is in the center and the yellow (or sometimes white) Pulse wire is on the pin which is closer to the center of the board. For learning purposes, it os best to just hook up a servo that is not connected to anything mechanical. That way, you can observe the behavior of the servo without breaking something by moving it too far. Once you are comfortable with how the servo reacts to commands and how to set limits, use a servo that is actually hooked up to your skull and set real limits, and practice moving it around.
|
|---|---|
![]() |
Step 2: Open up VSA. You should see a screen that looks like the one to the left. We will be dealing with a smaller section of that screen in the steps that follow so that you can see the text and see what we are doing rather than an entire screenshot. |
![]() |
Step 3: This is what the routine should look like when you start, although you will see more devices listed on the left-hand side.
From this screen, you will want to click on the "Tools" menu option, then select "Settings" from the menu that will drop down. |
![]() |
Step 4: You should now be looking at a box that looks like the one to the left. If you are using a computer that has a serial port output. you will see COM1 listed under "Port". If you are using a laptop that does not have a serial port, you will need to add one somehow. There may be a card you can get that will give you a serial port, but the easier method would be to get a USB to Serial adapter. The only issue here is that USB to Serial adapters frequently do not work properly depending on the computer, software, card, and adapter combinations. I have been told that the KEYSPAN USA-19HS USB to Serial adapter is VERY reliable and will work on almost any combination of equipment. One source for this adapter is HERE. Feel free to find it other places as well. Once you have that worked out, you will see a COM number show up in your port column. If you are using an adapter or a card, it may show up as almost any number. Maybe COM3 or COM6 or something else. This is fine. Just be sure that if you have more than one com port, that you select the one that you are using the SSC-32 card on. |
![]() |
Step 5: The first thing to do here is to UN-select all the checkboxes beside all the devices. You can do this by clicking on the small icon at the bottom on the down arrow as shown circled in red to the left. A menu of choices will appear. The last menu option is called, "Invert Enabled". Select that one, and all the boxes will become Un-checked. |
![]() |
Step 6: Now double-click on the word "Device #0" in the "Name" column. It will allow you to type in a new name for that channel. To the left, you can see that I changed it to "Test Servo". Type in whatever you want here or use what I used. |
![]() |
Step 7: Next, move to the "Type" column. Double Click where it says, "MiniSSC Servo" and you will get a dropdown menu. Click on the down arrow to the right of the selection in that column and scroll almost all the way to the bottom. Select SSC32 Servo so that it looks like the image to the left.
Then Click on the selection in the "Port" column ONLY IF it is not already reading the correct port. If you need to change it, select the correct port from the dropdown menu. If it is already reading the correct port, skip that step. |
![]() |
Step 8: The last 3 visible columns show the +Value (Maximum) the -Value (Minimum) and the Default value for the servo. By default, they are 2500, 500 and 1500 respectively. First, let me explain what all that means. I will start by explaining how a servo works and how it knows where it is. A servo is just a small gear motor, but it has an extra part. A potentiometer. That is just a variable resistor. It changes it's resistance as you move it from it's minimum point to it's maximum point. By measuring that resistance, the servo knows where it is. This is also why the servo can not just continue to spin around like a regular motor. Like a simple dimmer switch in your house (The rotary kind), it has a starting point and a maximum value. Once you reach the maximum, you can not continue to turn the knob or you will break something. The same is true in the opposite direction. This is why the servo can only go so far in either direction. It is restricted by the physical limitations of the potentiometer. So your servo is designed to go a certain distance to the right and a certain distance to the left (Neither far enough to damage the potentiometer) and should move right to the center when it is powered up. The center position (Halfway between all the way to the right and all the way to the left) is 1500. Having said all that, once you hook it all up in your skull, mount in in the plexi plate, add the linkage, and decide which hole on the servo arm to connect everything to there are now lots of variables. It is quite likely that when the servo is sitting at 1500, that the skull will not be looking straight forward and be centered. This means that you have to change that center (or Default) position to a new number that you can see actually does make your skull look straight ahead. Again, it is true that the servo (If not attached to anything) can go all the way to 2500 or 500, but once it is attached, the device you are moving (The skull in this case) may not be able to move that far for a variety of reasons. Physical limitations as the center rod hits the plastic on the skull or the servo arm becomes fully extended or some other limitation. Because of this, for each servo, you have to find out how far you can move it before you reach a point where the skull can not move any more in that direction. If you force the servo to go past that point, you risk burning out the motor, stripping the gears or causing damage to the skull or breaking a linkage.
So now we want you to double click on any one of the numbers in that first row. Either the +Value, the -Value or the Default and you will see a box like the one to the left pop up. This is where you set all your values. This tells the software (VSA) to never drive this particular servo past the Min or Max value that you set, and also tells the servo to sit ready at the default position as soon as you power up. |
![]() |
Step 9: For our purposes, I am going to have you change the Maximum and Minimum Values as shown to the left. You can do this 2 ways. You can: 1. Highlight the existing number and type something new in, or 2. With the mouse, move the line that is in the circle (This represents the servo arm) to the position you want, then click the arrow to the left of the Value you want to change. Note: The Minimum Value can not be more than the default, and the Maximum Value can not be less than the default.
I have chosen the numbers I have to limit the range of the servo. I would use this method once you have the servo hooked up for Nod, Tilt or Rotate. This way, we limit the min and max motion so we don't take the risk of damaging something while we look for the real values to use. Once you have changed your values, Click "OK" |
![]() |
Step 10: You will now be looking at a screen that should look like the one to the left.
By the way, the scrollbar at the bottom of this "Settings" box allows you to see the last feature that you can change which is the color of the track. Making each track a different color helps you keep track of which thing you will be programming later on. If you are using multiple skulls, you may want to assign one color for each skull, and every servo related to that skull will be the same color. |
![]() |
Step 11: Before we click "OK" on this box, be sure to enable the servo we are working on, by clicking the checkbox beside that servo as shown on the left.
Then click "OK" |
![]() |
Step 13: Your main screen should now look like the one on the left, showing all devices "grayed out" except for the one you checked and it is now called "Test Servo(0)" or whatever name you gave it. In the plot view, you will notice a straight line. That represent the movement of the servo and it's current position. Since we haven't told it to move anywhere yet, it is just sitting in the default position at 1500. The line is blue because I did not change the color for that track. If I had, the line would be whatever color I chose. |
![]() |
Step 14: Now it's time to create an "Event". Move your cursor into the timeline area in the same row as the device you want to move. In this case, "Test Servo". Start at whatever point you want to in the time line and hold down the left mouse button. Drag it along in a straight line for however long you want in the time line and release the left button when you are done. This creates an event. Each bar on the Time Line is a frame. This plays at 30 frames per second, so you can estimate how long the event will take to execute by counting the number of frames. In the settings, you can change that so that the timeline reads seconds instead of frames. None of that is really important because when you are programming for real, you will be making events that relate to the audio track you have imported (We'll get to that later) and you don't care what time it is in the time line. You only care if your motions make sense according to what the audio track is doing.
|
![]() |
Step 15: After drawing your box in the time line, it should look like this. Or whatever color you made it. What that represents is the point on the time line that you want the event to start, the starting position of the servo, at the left end of the bar, then the point on the time line that you want the event to complete and the ending position of the servo. So it moves the servo from point A to point B in the amount of time represented by the length of the bar.
To see how to set those values, double click on the bar and you will see the Box shown in the next step. |
![]() |
Step 16: This is where you adjust the properties for each event. What it shows right now is the Event type (leave that one alone), the start time (which is determined by the place where you started to draw the bar and is measured here in frames), the Stop Time (Determined by where you decided to stop drawing the bar and is also measured in frames), the Start Position (Which you will leave alone - This will be the default position if this is the first event. For all subsequent events the start position will be the end position of the previous event), the Stop Position (This is the one that you will need to change) and the Annotation (Don't worry about this one) |
![]() |
Step 17: To change the Stop position (and give the servo a new position to go to), grab the line which represents the current servo position and move it with the cursor by clicking and holding the left mouse button until you reach the position you want.
|
![]() |
Step 18: In this example, I moved it to position 1133. You will move yours to whatever position makes sense for you depending on the servo you are adjusting and what is happening in the audio file. |
![]() |
Step 19: Now to set the new stop position, Click once on the words "Stop Position" and highlight that line. |
![]() |
Step 20: Then click on the "Capture" button, and the position you have set for the servo will be transferred as the new stop position. You can also manually type in a new stop position by double clicking on the number following the words, "Stop Position" and typing in a new value.
Once you have your new stop position set, click "OK". |
![]() |
Step 21: Now, you should have something on the main screen that looks like this. You can see that the plot view has changed to show what position the servo started in, what position it ended up in and how long it took to get it there.
So as a rundown of what just happened, you just told the servo (in this example) that you wanted to start moving the servo at frame number 17. The servo was at position 1500 at that point. Over the time it takes to move to frame 170 (Approximately 5.1 seconds) the servo would move towards its minimum position smoothly until it reaches position 1133 where it will stop and wait for a new command. Since it is currently sitting at position 1133 after execution of this "event", the next event must start at position 1133 simply because that is where the servo currently is.
Observe the motion of the servo and watch what happens when you try different settings. Also watch what happens when you power down and then start up again and observe how the servo quickly moves to the default position as soon as you click play on VSA. Once you are comfortable with this, you will want to try it for real with a servo hooked into a function on your skull. The first one to try would probably be "Rotate" This moves the head from left to right. With the default position still at 1500, power up that servo and look at where the skull is facing. Is it facing straight forward or is it looking off a little to one side or the other. If it is a bit off (Which it probably will be) you have two choices. You can adjust the hardware and the length of the linkage until it is looking straight ahead, or you can simply change the "Default" position to a number that does cause the head to look straight ahead. The latter is the preferred method. Once you have the default position worked out, you need to test how far you can move the head in one direction before you reach the maximum point and set the Maximum value and then repeat that for the other direction and set the minimum value. Move it a little bit at a time until you reach the right spot. Write that number down, go back into "Tools", "Settings" and change the values for Min, Max and Default for that servo. Keep in mind that if you make the head able to turn a complete 90 degrees to one side, that when you tell it to turn back, it will be a coin toss which way the linkage will turn the rotate tab attached to the center rod. It might push it to the back of the skull instead of back the way it came. It is a good idea to set min and max levels that come short of the very outer possible limits so that you don't have this problem.
|
![]() |
Step 22: Now let's talk about adding the audio track and working with the Jaw servo. In the main window of VSA, Click on "Tools" from the menu at the top, then select "Load Audio File" from the dropdown, or just hit F2. You will see a box that looks like this pop up. |
![]() |
Step 23: Since you want to add an audio file, click on the "Add" button. You will see the selection box under the words "Audio File" appear as shown to the left. |
![]() |
Step 24: Click on the Box with the three dots as circled in red to the left and use the navigation window that appears to select your audio file. |
![]() |
Step 25: This is what the navigation box looks like. I have chosen the highlighted track to load into VSA this time.
Let me talk a little about audio files. First, use wav files as a rule. VSA will play mp3 files just fine, but you can easily run into a problem with synchronization. An mp3 is a compressed format as you know. The data that tells the player what and how much compression is used is stored within the file. Since it is not audio content it acts as a short blank space at the beginning and end of each mp3 file. Each time the file is changed and re-saved, that space gets larger as more data is stored. If you had all your jaw movements synched up to a file and then you needed to edit that file for any reason, when you put it back in the routine, everything would be off by a little. It is noticeable. To avoid that whole mess, I always deal with wav files. What I am about to do in the next few steps is to show you how to synchronize jaw movement to an audio file. If your audio file ONLY contains the sounds for the Jaw that will be moving and no other sounds, no music, no sound effects, no additional voices, etc. then you are fine with just that one file. Also, do not add reverb or any other effects to that voice track. You can do that in the final mix, but not before you program the jaws. But since VSA will create jaw movements based on whatever sounds are in the file that you load in, if there is a clap of thunder, the jaw will open up for that as well. The same for music or any other sound. The solution is to create separate tracks for each of these things. If you have more than one skull, you will need a separate track for each skull that only contains the voice track for what that particular skull is saying. Then you need to mix all the tracks together with whatever other music or sound effects you have and create a final "Mix" of all the tracks. You can do this with software called Audacity. It is free and you can download it HERE. If you have an existing song that you want to make into a routine, the easiest way to get the separate tracks is as follows: 1. Put the song on a CD and put it in a CD player. 2. Wear headphones or ear buds that are connected to the CD player. Do not play it over speakers. 3. While wearing the headphones, sing along into a microphone and record your voice into the computer. Listening to the CD will keep you in time with the original singer and you can tweak your timing afterwards in Audacity. You will have to repeat this process for each distinct part in the song and assign each track to a different skull (assuming you have more than one.) You may only want to do the lead voice if you only have one skull. Then using Audacity, align all the parts up with the original song to make sure all the syllables line up as close as possible with the original. Don't worry about being off key. No one will hear these tracks except you. Once each track is aligned, mute all other tracks and save each one individually. Once all the skull jaws are individually programmed, You put your final mixdown into VSA and play that. The jaws will move to your tracks that you made and the people will hear the original recording. If you want to see what I am talking about, I have some sample files for you which I plan to use for my quartet this year. The song I am using is an original. It is a parody of I'm in the mood for Love. I wrote the new lyrics, did the voice for the 3 backup singers, and created the music track in Fruity Loops (Another software program that is NOT free) You can download the files HERE so that you can see what I am talking about. They are all wav files, so the download is large. If you haven't seen the quartet, you can see some youtube video HERE. There are actually 5 characters. There are 3 un-named backup singers that I call Guy 1, Guy 2 and Guy 3. There is Sindy Skinless (The lead singer voiced by my wife) and there is Mr. Head (The disembodied head character that cracks bad jokes and complains. He is voiced by a friend of mine). In the zip file, you will see where I created a separate voice track for each of those characters individually (For the new song I'm doing) Then I also include the Final Mixdown for VSA which puts them all together, adds the music, effects and everything else. The audience only hears the final mixdown, but each individual file was added into VSA one at a time so that each jaw could be programmed. Then I would remove that file and add a new one.
So back to the picture on the left. You can see that I have selected one individual voice track, in this case it was "Guy 1 Final Track". That has only the Voice for that one character in it. I highlight it, then click "Open". |
![]() |
Step 26: And there it is. Showing up in VSA. You can see the name of the track under "Displayed Audio Channel" and the entire path of where it resides on my hard drive under the words, "Audio File"
When you see that yours is set up like this, except with your own files, then click "OK" |
![]() |
Step 27: This will bring you back to the main window of VSA and the audio track will load and be displayed in "Wave View" at the bottom. Now it's time to program the Jaw Servo.
BUT WAIT!!! We haven't set up a jaw servo yet. OK, let's do that first. Go back to the end of Step 3 to about Step 13 and set up another servo, or just change the Test Servo to Jaw Servo. You will need new Minimum, Maximum and Default settings. Here is how I do it: Minimum setting 500 Default Setting 500 Maximum Setting 1000
That Maximum setting may not be perfect, but it will be close. First thing to do is to disconnect the linkage that goes from the Jaw servo mounted in the skull down to the jaw itself. This is so you don't break anything while experimenting with the new settings. Then power up the servo. It should snap all the way up to the high side which is the default setting of 500. Once you see where that positions the servo arm, you will want to replace the linkage that goes down to the jaw and set it so that while the servo is in this position (All the way to one side) the jaw is completely closed, but the servo is not straining to keep it that way. You may have to remove the servo arm and reposition it so that it achieves this goal. You will not need to play with the minimum or default values for the jaw servo again. All you have to do is find the position where the jaw is open as far as you want it to go and the servo is not trying to push it any farther. Once you find that value, set it as the Maximum Value and you are ready for this step.
Go to "Tools", then select "Wavemotion Analysis" from the dropdown menu. |
![]() |
Step 28: You will get this box. The only thing you will need to change here is the Track. In our case, the Jaw Servo is the very first track (Device #0) so I don't need to change it, But if you have more than one skull or you choose a different track to be the jaw, you will. |
![]() |
Step 29: If you need to change the track to point to the one you want to program as the jaw, double click on the track under the word "Value". You will get a dropdown list of all available tracks. Select the right one and click "OK". |
![]() |
Step 30: VSA does all the work for you. You can see to the left that VSA has created hundreds if not thousands of short "events" which move the jaw according to the amplitude of the track loaded into VSA at the time. The plot view shows the motion of the jaw with the flat lines at the bottom being the times when the jaw is closed and the highest peaks being the times when the jaw is open as wide as you allowed it to go with your Maximum Value for that servo.
Note, that in order for this to work well, the audio track that you use should be as loud as it can be without clipping so that the loudest parts bring the wave pattern as high as it can go, and the parts in between words should be silent. No background noise or anything. Use the tools in Audacity to mute out sections between words or phrases. VSA will pick up on background noise and will open the jaw a bit thinking it is wanted signal.
Now for this experiment, we are going to assume that I am using one skull. That the voice track I just loaded is what is being sung and spoken by that skull and that I plan on playing the final mixdown with the music for the audience when I am finished. If there is no other sounds to be added such as a routine with a single skull doing a monologue with no other sounds or music, you would only need to program in head movements and you would be done. |
![]() |
Step 28: In our example, I am going to take out the audio track I just programmed the jaw with and replace it with the Final Mixdown that contains both the sound from the file that I just put in mixed in with other voices and music. Let's start by removing the file I just loaded in. Again, go to "Tools" then select "Load Audio File". You will see something like the picture to the left. Make sure that the file is highlighted as it is in the picture. |
![]() |
Step 29: Then click "Remove" The file will go away and the box will be empty. Now repeat steps 22 through 24 to load the new audio file in. |
![]() |
Step 30: Instead of choosing the file we selected before, I am now going to select the Final Mixdown for VSA as shown in the picture to the left.
Click "Open" after selecting the correct file. |
![]() |
Step 31: There it is! The file I wanted!
Click "OK" and the new file will load into VSA. |
![]() |
Step 32: Here you are. The new file loaded. You can see that there is more audio information there and that there are no silent areas, but the programming for the Jaw Servo still reflects what it saw when we had the other audio file in there. That programming will not change unless you delete it all and do it over.
Now if you play the routine, it will play the whole song with all the parts, music and sound effects, but the jaw will only move according to what "Guy 1" is supposed to be saying or singing.
That concludes lesson one in VSA Programming 101 - The Basics
There will be a quiz. |