I've written a new soundtrack for Fuel. I wanted to share what I have found out about the music file structure and the way I created my own tracks. The tracks are plain wavs although the game uses a set of markers (cue points) to move about within the track while you are playing the game. Dropping a vanilla wav into the music directory without the markers allegedly can cause the game to crash.
Cue points can be added using a variety of different programs. I tried a couple including old but faithful Cool Edit Pro before settling on Sony Sound Forge 8.0. Sound Forge allows scripting making the process of adding the markers less time consuming. I'll try to upload/attach my scripts to this tutorial.
The wavs live in the MUSIC directory in the Fuel folder on Windows. I'm not sure if it is possible to change the music on the Xbox360 or PS3. I'm using Steam so my Music directory is as follows
I suspect for a direct installation the music directory will be something along the following lines depending on where the game has been installed
Any PCM wav seems to work. The original wavs are stereo, 16bit, 32Khz. This makes them a little hefty at around 20mb each (zipped). I stuck to this when creating my music.
- freeride.wav The music that plays during freeride and on the menu
- freerideV7marker.wav I don’t this this track is used. Seems the same as the freeride music with slightly different cue points
- MENU.wav Burn My Shadow by Unkle - I love this track!
- track1MixV1.wav In game music
- track2MixV1.wav ...
- track3MixV1.wav ...
- track4MixV1.wav ...
- track5MixV1.wav ...
- track6MixV1.wav ...
- track7MixV1.wav ...
- track8MixV1.wav ...
- track9MixV1.wav ...
- TrackLoading.wav Music that plays while races etc are loading
The wavs contain markers (cue points) that allow Fuel to jump around within the music while you are playing the game. The wavs fit into three categories; track loading, free ride and in race.
The trackloading wav is the most simple as it has no cue points. When the wav reaches the end it will loop so it needs to be cut perfectly. It doesn't seem to matter about the length of the sample. The original is just over 32 seconds long.
There are two freeride wavs. They contain the same music and have a similar structure in terms of cue points. freerideV7marker doesn't seem to get played at all in my version of the game.
Both files have a marker for the start of each different section of music. This allows the game to randomly start at a different section when you jump territories or cause a track load to happen by using a helipad.
Freeride has a lead in 01-10 starting at 0.0 seconds half a second apart. This doesn't appear to be necessary. Both files then have simple numbered markers at the start of each new section of music. The original markers are shown in the below. The last marker (7) appears at the end of the music. I omitted 01-10 without running into any problems. I kept my mix at a constant bpm although I don't know if this is essential.
- 01 0.0
- 02 0.5
- 03 1.0
- 04 1.504
- 05 2.006
- 06 2.504
- 07 2.996
- 08 3.502
- 09 4.0
- 10 4.502
- 1 5.0
- 2 118.301
- 3 237.6717
- 4 302.4151
- 5 419.7626
- 6 511.8196
- 7 641.305
In Race Music (trackxMixV1)
One thing I haven't tested yet is whether it is possible to have more than 9 tracks by either using v2 or track10MixV1.
These tracks have the most complicated set of cue markers. To make things even more difficult to work out, some of them are a little inconsistent and some of the sections never play. I suspect this may be a case of the coders and the musician not communicating clearly about what the markers should be called. If anyone could check what the game is reading from these wav files I'd really appreciate it!
Each track needs a lead in of at least 4 markers. Some have more although this doesn't seem to affect the song at all. These start at 0.0 seconds at half second intervals as follows:
- 1 0
- 2 0.5
- 3 1
- 4 1.5
My script "Fuel Markers Start" adds these.
There are a couple of different sections - intro/introvar, standardvarx, actionvarx, extremevarx with x being a simple numeric. My script "Fuel Markers" can create these although you'll need to know the bpm of the track and a little about bars. I'll go into more detail about using the script later.
In the original tracks, intro always directly after the lead-in. Strangely, it is called introvar in track1. Regardless of what it is called it doesn't ever seem to get played!
Ordering of the next sections appears to be more haphazard (leading me to suspect that it doesn't actually mater!). standardvar denotes standard in game music while actionvar seems to kick in when something exciting happens. It's all very random. extremevar seems to kick in as you approach the finish line and loops once the race is over.
Each section has a series of ‘1's inside. These seem to be beat markers. They need to be there for the track to work and seem to be used to warp around the track while it is playing. So long as they are consistent and there are more than 8 in each section it doesn't seem to matter.
Track 1 has the following intro section:
- introvar1 2
- 1 2.96
- 1 3.92
- 1 4.88
- 1 5.84
- 1 6.8
- 1 7.76
- 1 8.72
- introvar1end 9.68
Sections can be any number of bars. Even odd numbers (such as 5 bars) seems to work fine. I don't know if there is a maximum length for a section. I've tried to fit in with the existing music as much as possible using even bars with 8,16 or 32 markers.
The sections are surrounded by silence. This can apparently be any length but I stuck to a bar of silence in my tracks since it was easier to create the markers that way.
Using "Fuel Markers"
I don't code in c#. I took an existing script from the Sound Forge examples and modified it to suit my filthy needs. If you are a professional c# programmer, my script will probably burn your eyes!
Sound Forge allows parameters to be passed into the scripts. However I found it easier in operation to just change the values in the script. The controls are:
- bpm The bpm (beats per minute) of the track. I've made this a double in case the bpm isn't a whole number.
- tag The section name. This can be one of intro, strandardvar1..., actionvar1..., extremevar1...
- start The start point for this particular section in bars.
- startOffset I had a few tracks where the start point wasn't a whole bar. This allows an offset in quarters of a bar.
- bars This sets the number of bars for this section
- barMultiplier I added this variable to control how many beat markers get put inside each section. Some of my tracks have longer sections to I experimented with fewer beat markers. This seems to help the music to jump around a little less unexpectedly during play! Good values are 4 and 8.