Difference between revisions of "Music.tbl"

From FreeSpace Wiki
Jump to: navigation, search
(Specific Music Tracks)
(...you've no clue. I tried to make the top half (pertaining to soundtrack) more human-readable while drastically cutting down the format sample at the bottom to the necessary portions. I'll work on menu music on my next edit.)
Line 1: Line 1:
 
{{TableVersion|5307}}
 
{{TableVersion|5307}}
  
The '''music.tbl''' defines the soundtracks and how they are played in FSO.
+
'''music.tbl''' is a [[Tables|table file]] used by the ''FreeSpace'' game engine to define the [[music]] played during the game.
  
 +
In FSO, this table can be further extended with any [[modular table]] with a filename ending with <code>-mus</code> (e.g. <code>AF-mus.tbm</code>, <code>bp-mus.tbm</code>, <code>v_music-mus.tbm</code>).
  
This table is one of the [[Modular Tables]] and can be extended with xxx-mus.tbm
+
== Description ==
 +
<code>music.tbl</code> consists of two sections defined as follows:
 +
# The soundtracks, which are music files intended to be played ''during a mission''.
 +
# The menu music, which are music files intended to be played for other purposes.
  
[[Tables|List of Tables]]
+
Comments (which are not read by the game engine) can be added at the start of a line or after any line containing formatting using a semicolon (<code>;</code>).
  
==General Format==
+
<code>-mus.tbm</code> modular tables use the exact same formatting as <code>music.tbl</code>.
*Music.tbl consists of two sections: one for in-game soundtracks, another for menu music tracks.
 
*Soundtrack entries
 
**'''#SoundTrack Start'''
 
**Soundtracks names and definitions
 
**'''#SoundTrack End'''
 
*Menu music tracks
 
**'''#Menu Music Start'''
 
**Music names and definitions
 
**'''#Menu Music End'''
 
  
 +
== Soundtrack ==
 +
Each individual soundtrack should start with <code>#SoundTrack Start</code> and end with <code>#SoundTrack End</code>.
 +
=== $Soundtrack Name: ===
 +
<code>$Soundtrack Name:</code> is immediately followed by the soundtrack order number and the name of the soundtrack.
 +
*Syntax: '''Integer''': '''String'''
 +
**Example: 1: Genesis
 +
 +
==== Flags ====
 +
{{Table3610|
 +
The following flags can be added in additional lines after <code>$Soundtrack Name:</code> in [[modular table]]s.
 +
 +
===== +nocreate =====
 +
This flag should be added if the soundtrack is intended to completely overwrite an existing soundtrack.
 +
 +
===== +Cycle: FS1 =====
 +
This cycles the NRML and BTTL tracks the FS1 way, instead of the FS2 way.
  
==Soundtrack Music==
+
===== +Allied Arrival Overlay: NO =====
 +
This allows the Allied Arrival track to play on its own, as it did in FS1.
 +
}}
  
 +
=== $Name: ===
 +
For this section, refer to the code for <code>FS2_Amb_A01.wav</code>, as follows:
 +
  $Name: FS2_Amb_A01.wav 25.0 105840 ; * Ambience
  
===$Soundtrack Name:===
+
The code above can be explained using the following table:
*Soundtrack Name is immediately followed by the soundtrack order number and the name of the soundtrack.
+
{| border=1 cellpadding=4 style="border-collapse: collapse; border: solid 1px #995050;"
*Syntax: '''Integer''': '''String'''
+
|- align="center" colspan=3 style="background:#351515; border: solid 1px #995050;"
**Example: 1: Genesis
+
! $Name: ('''required''') !! Filename !! Number of measures (''m'') !! Samples per measure (''s'') !! Comments (optional)
 +
|- align="left"
 +
| <code>$Name:</code> || <code>FS2_Amb_A01.wav</code> || <code>25.0</code> || <code>105840</code> || <code>; * Ambience</code>
 +
|}
  
 +
====$Name:====
 +
The individual music segments in a soundtrack is defined using '''at least 12 lines''', all beginning with <code>$Name:</code>. The ''FreeSpace'' engine parses and plays the audio file referenced in each line in the following order:
  
===+nocreate===
+
{| border=1 cellpadding=4 style="border-collapse: collapse; border: solid 1px #995050;"
 +
|- align="center" colspan=3 style="background:#351515; border: solid 1px #995050;"
 +
! Order !! Situation !! Details
 +
|- align="left"
 +
| 1 || Ambience || Normal track&mdash;plays when nothing is happening or units are out of combat range
 +
|-
 +
| 2 || Allied Arrival during Ambience || Plays when a friendly unit arrives while Ambience is playing
 +
|-
 +
| 3 || Enemy Arrival during Ambience || Plays when a hostile unit arrives while Ambience is playing
 +
|-
 +
| 4 || Battle 1 || Battle track 1&mdash;plays when units are in combat range; usually segues into Battle 2
 +
|-
 +
| 5 || Battle 2 || Battle track 2&mdash;plays when units are in combat range; usually segues into Battle 3
 +
|-
 +
| 6 || Battle 3 || Battle track 3&mdash;plays when units are in combat range; usually segues into Battle 1
 +
|-
 +
| 7 || Allied Arrival during Battle || Plays when a friendly unit arrives while any Battle track is playing
 +
|-
 +
| 8 || Enemy Arrival during Battle || Plays when a hostile unit arrives while any Battle track is playing
 +
|-
 +
| 9 || Victory 1 || Plays when a goal is completed
 +
|-
 +
| 10 || Victory 2 || Plays when all goals are completed ''and'' there are absolutely no hostile units present; is only called once
 +
|-
 +
| 11 || Goal Failed || Plays when the primary goals of a mission are failed; does not appear to be called in-game
 +
|-
 +
| 12 || Player Dies || Plays when the player is killed and goes to the death screen
 +
|}
 
{{Table3610|
 
{{Table3610|
*Used with [[Modular Tables|modular tables]] to set the parser to use the modular table only for modifying an existing entry instead of creating a new (possibly incomplete) one.}}
+
* The following lines can be added.}}
 +
{| border=1 cellpadding=4 style="border-collapse: collapse; border: solid 1px #995050;"
 +
|- align="center" colspan=3 style="background:#351515; border: solid 1px #995050;"
 +
! Order !! Situation !! Details
 +
|- align="left"
 +
| 13 || Ambience 2 || Normal track&mdash;if Ambience 3 is defined, usually segues into it, otherwise segues into Ambience
 +
|-
 +
| 14 || Ambience 3 || Normal track&mdash;usually segues into Ambience
 +
|}
  
 +
The order and situation of the 12 lines '''cannot be changed''' and are '''required''' in order for the engine to parse the audio files in the correct situations. If there is no audio file available for any of the situations (such as Battle 3, for instance), a placeholder line denoting an empty track should still be included, like so:
 +
  ...
 +
  $Name: FS2_Btl_A02.wav 27.8 81415 ; * Battle 2
 +
  '''$Name: silence.wav 0.0 0 ; * Battle 3'''
 +
  $Name: FS2_AArv_A01.wav 1.8 105840 ; * Allied Arrival during Battle
 +
  ...
  
===Soundtrack Flags===
+
====Filename====
{{Table3610|
+
The filename of the audio file must also include its file extension. FS1 and FS2 only support the playback of Waveform Audio (.wav) files; FSO supports the playback of .wav and OGG vorbis (.ogg) files.
If the music should be played according to the FS1 style, the following flags should be added after $Soundtrack Name:
 
  
*'''+Cycle: FS1'''
+
====Measures and Samples per Measure====
**This cycles the NRML and BTTL tracks the FS1 way, instead of the FS2 way.
+
The ''FreeSpace'' engine's dynamic music capabilities are defined using the number of measures (''m'') and samples per measure (''s''). Using ''m'', the engine parses the audio track by dividing it into individual parts, called ''measures''; if an event happens that would change the music being played, the game will play the current audio track until the end of the current measure, whereupon it segues into the correct audio track via a built-in crossfade. The length of the measures is defined using ''s'', which is the number of ''samples'' in a measure.
  
*'''+Allied Arrival Overlay: NO'''
+
''m'' is user-defined and can be set to a decimal point for greater fine-tuning.
**This allows the Allied Arrival track to play on its own, as it did in FS1.}}
 
  
 +
''s'' is calculated using the following formula:
 +
  ''s'' = 2 × sample rate (hertz) × total audio length (seconds; up to 3 decimal places) ÷ ''m''
  
===Music Tracks===
+
Depending on the ''m'' and ''s'' values declared, the game may only play a portion of the actual audio file or, if the values result in it attempting to play the audio file beyond its actual length, playing nothing for a period of time after it finishes playing the actual audio file.
*All music track lines beging with '''$Name:''' followed by the '''filename''' of music track, with file extension. After the tracks filename the '''number of measures''' (NM) in the track is defined followed by the '''number of samples per measure''' (SPM).
 
*Syntax: '''String''' '''Float''' '''Integer'''
 
**Example: $Name: FS2_Amb_A01.wav 25.0 105840
 
*The SPM value is computed using the formula '''SPM = 2 * SF * L / NM''', where SF is the sampling frequency in hz and L is length of the music piece in seconds (exact seconds up to about 3 decimal places). The NM value is important. The game uses SPM to determine how long a measure is, and it will stop playing the track after the specified number of measures. Whenever the game situation changes and one track must be interrupted by another, the game will interrupt the current track at the end of the currently playing measure.
 
So if you enter wrong numbers here, say using a different calculation, the track might still be played to the end - but when it should be interrupted it might not be for quite a while because you specified the length of one measure wrong.
 
E.g.: If you set NM to 1 and SPM to 2*SF*L the track will be played without problems - BUT, the interrupt will never happen. You have informed the game that the entire track basically consists of one large measure, so it will keep playing the track until that measure is over before switching to any other track - and this can take a while.
 
So make sure you use correct values here. If the exact measure count is not known you best use the following method:
 
  
Set NM to half the length of the track in seconds, say 61.202s = 30.601, and SPM to 4 * SF, say 4 * 22050Hz = 88200.
+
In the case of <code>FS2_Amb_A01.wav</code>, it is defined in <code>music.tbl</code> as an audio track that has 25 ''m'' and 105,840 ''s'', so even though the file has an ''actual'' audio length of 62.556 seconds, the engine only ever parses the first 60 seconds of the audio file as its ''total'' audio length (hence omitting the last 2.556 seconds), split into 25 measures. This is because a reversal of the above calculation for ''s'' results in:
By doing this you state that one measure is 2 seconds long. This leads to a max delay of 2 seconds.
+
  105,840 (''s'') × 25 (''m'') ÷ 22,050 (hertz) ÷ 2 = 60.000 seconds
  
 +
'''The length of the measures in the audio track ''cannot'' be individually adjusted by any means'''&mdash;''s'' applies to '''all''' the measures in the audio file with '''no exceptions'''.
  
Another important result of this is that a track must not contain any quiet at the beginning or end of the file, since that distorts the location of the measures in the file. The game considers the entire file to be the track, it does not check where the actual music starts. So make sure you cut the track so it is a snug fit, begins with music and ends with music.
+
===== Alternate Calculation Method =====
This is however less important if you do not know the number of measures anyway and use the 2 second work-around described above, since an exact fade after a measure cannot be done that way anyway.
+
If defining ''m'' and ''s'' is too time-consuming, the following formulae can be used to still make use of the ''FreeSpace'' engine's dynamic music capabilities, and would result in a maximum of 2 seconds' silence (since each measure would be 2 seconds long):
 +
  ''m'' = audio file length (seconds; up to 3 decimal places) ÷ 2
 +
  ''s'' = 4 × sample rate (hertz)
  
 +
As an example, if we use the above alternate formulae with the ''actual'' audio length of <code>FS2_Amb_A01.wav</code>, we get the following:
 +
  ''m'' = 62.556 seconds ÷ 2 = 31.278
 +
  ''s'' = 4 × 22,050 (hertz) = 88,200
  
====Order of the music tracks:====
+
''m'' would be rounded to the nearest decimal point. Hence, we would input the following as the alternate length for <code>FS2_Amb_A01.wav</code> in <code>music.tbl</code>:
{|-
+
  $Name: FS2_Amb_A01.wav 31.3 88200 ; * Ambience  
| style="width:350px"|'''Ambience'''  
 
| style="width:100px"|''"Normal 1"''
 
|-
 
|'''Allied Arrival during Normal'''
 
|''"Ally arrival 1"''
 
|-
 
|'''Enemy Arrival during Normal'''
 
|''"Enemy arrival 1"''
 
|-
 
|'''Battle 1'''
 
|''"Battle 1"''
 
|-
 
|'''Battle 2'''
 
|''"Battle 2"''
 
|-
 
|'''Battle 3'''
 
|''"Battle 3"''
 
|-
 
|'''Allied Arrival during Battle'''
 
|''"Ally arrival 2"''
 
|-
 
|'''Enemy Arrival during Battle'''
 
|''"Enemy arrival 2"''
 
|-
 
|'''Victory 1 ( goal completed )'''
 
|''"Victory 1"''
 
|-
 
|'''Victory 2  ( all enemies dead, goals completed )'''
 
|''"Victory 2"''
 
|-
 
|'''Goal Failed'''
 
|''"Failure 1"''
 
|-
 
|'''Player dies'''
 
|''"Dead 1"''
 
|-
 
|}
 
{{Table3610|
 
*Following entries have been added by SCP}}
 
{|-
 
| style="width:350px"|'''Ambience 2'''
 
| style="width:100px"|''"Normal 2"''
 
|-
 
|'''Ambience 3'''
 
|''"Normal 3"''
 
|-
 
|}
 
  
 
===Specific Music Tracks===
 
===Specific Music Tracks===
Line 167: Line 181:
 
|}
 
|}
  
==Menu Music Tracks==
+
== Menu Music ==
 
*Menu music tracks are defined with '''filename''' after the track's '''name'''.
 
*Menu music tracks are defined with '''filename''' after the track's '''name'''.
 
*There is a limit of 50 menu music tracks.
 
*There is a limit of 50 menu music tracks.
Line 188: Line 202:
 
*Syntax: '''String''', filename with file extension
 
*Syntax: '''String''', filename with file extension
  
==Sample==
+
== Format Sample ==
*Uses normal soundtrack and menu music tracks from FS2
+
The following is a heavily truncated version of <code>music.tbl</code> located within <code>Root_FS2.vp</code>.
 
+
  ;
   #SoundTrack Start
+
  ; music.tbl
 +
  ;
 +
  ; Specifies which .wav files to use for the different sections of event-driven sound-tracks
 +
  ;
 +
  ; format:  $Name:  filename.wav  num_measures (samples_per_measure)
 +
  ;
 +
   #SoundTrack Start         ; SoundTrack 0
 
   $Soundtrack Name: 1: Genesis
 
   $Soundtrack Name: 1: Genesis
   $Name:   FS2_Amb_A01.wav     25.0     105840
+
   $Name: FS2_Amb_A01.wav 25.0 105840 ; * Ambience
   $Name:   FS2_AArv_A01.wav     1.8     105840
+
   $Name: FS2_AArv_A01.wav 1.8 105840 ; * Allied Arrival during Normal
   $Name:   FS2_Arv_B01.wav     3.8     81415
+
   $Name: FS2_Arv_B01.wav 3.8 81415 ; * Enemy Arrival during Normal
   $Name:   FS2_Btl_A01.wav     25.8     66150
+
   $Name: FS2_Btl_A01.wav 25.8 66150 ; * Battle 1
   $Name:   FS2_Btl_A02.wav     27.8     81415
+
   $Name: FS2_Btl_A02.wav 27.8 81415 ; * Battle 2
   $Name:   FS2_Btl_A03.wav     39.8     81415
+
   $Name: FS2_Btl_A03.wav 39.8 81415 ; * Battle 3
   $Name:   FS2_AArv_A01.wav     1.8     105840
+
   $Name: FS2_AArv_A01.wav 1.8 105840 ; * Allied Arrival during Battle
   $Name:   FS2_Arv_B02.wav     3.8     81415
+
   $Name: FS2_Arv_B02.wav 3.8 81415 ; * Enemy Arrival during Battle
   $Name:   FS2_Vict_A01.wav     2.8     52920
+
   $Name: FS2_Vict_A01.wav 2.8 52920 ; * Victory 1 ( goal completed )
   $Name:   FS2_Vict_A02.wav     30.8     52920
+
   $Name: FS2_Vict_A02.wav 30.8 52920 ; * Victory 2 ( all enemies dead, goals completed )
   $Name:   FS2_Dth_A01.wav     23.8     132300
+
   $Name: FS2_Dth_A01.wav 23.8 132300 ; * Goal Failed
   $Name:   FS2_Dth_A01.wav     23.8     132300
+
   $Name: FS2_Dth_A01.wav 23.8 132300 ; * Player dies
   #SoundTrack End
+
   #SoundTrack End ; End Soundtrack 0
 +
  ;
 +
  #SoundTrack Start     ; SoundTrack 1
 +
  $Soundtrack Name: 2: Exodus
 +
  $Name: FS2_Amb_B01.wav 17.0 132300 ; * Ambience
 +
  $Name: FS2_AArv_A01.wav 1.8 105840 ; * Allied Arrival during Normal
 +
  $Name: FS2_Arv_B01.wav 4.8 81415 ; * Enemy Arrival during Normal
 +
  $Name: FS2_Btl_B01.wav 39.8 132300 ; * Battle 1
 +
  $Name: FS2_Btl_B02.wav 23.8 75600 ; * Battle 2
 +
  $Name: FS2_Btl_B03.wav 31.8 75600 ; * Battle 3
 +
  $Name: FS2_AArv_A01.wav 1.8 105840 ; * Allied Arrival during Battle
 +
  $Name: FS2_Arv_B04.wav 4.8 75600 ; * Enemy Arrival during Battle
 +
  $Name: FS2_Vict_A01.wav 2.8 52920 ; * Victory 1 ( goal completed )
 +
  $Name: FS2_Vict_B02.wav 40.8 88200 ; * Victory 2 ( all enemies dead, goals completed )
 +
  $Name: FS2_Dth_A01.wav 23.8 132300 ; * Goal Failed
 +
  $Name: FS2_Dth_A01.wav 23.8 132300 ; * Player dies
 +
  #SoundTrack End ; End Soundtrack 1
 +
  ;
 
   #Menu Music Start
 
   #Menu Music Start
   $Name:     Brief1
+
   $Name: Brief1
   $Filename: FS2_Brief_01.wav
+
   $Filename: FS2_Brief_01.wav ; briefing music 1
   $Name:     Brief2
+
 
   $Filename: FS2_Brief_02.wav
+
   $Name: Brief2
   $Name:     Brief3
+
   $Filename: FS2_Brief_02.wav ; briefing music 2
   $Filename: FS2_Brief_03.wav
+
 
  $Name:      Brief4
+
   $Name: Brief3
  $Filename:  FS2_Brief_04.wav
+
   $Filename: FS2_Brief_03.wav ; briefing music 3
  $Name:      Brief5
 
  $Filename:  FS2_Brief_05.wav
 
  $Name:      Brief6
 
  $Filename:  FS2_Btl_A01.wav
 
  $Name:      Brief7
 
  $Filename:  FS2_Cinema2.wav
 
  $Name:      Success
 
  $Filename:  FS2_DB_01.wav
 
  $Name:      Average
 
  $Filename:  FS2_DB_02.wav
 
  $Name:      Failure
 
  $Filename:  FS2_DB_03.wav
 
  $Name:      Aquitaine
 
  $Filename:  Aquitaine.wav
 
  $Name:      Psampik
 
  $Filename:  Psampik.wav
 
  $Name:      Cinema
 
  $Filename:  FS2_Cinema2.wav
 
 
   #Menu Music End
 
   #Menu Music End
  
 
[[Category:Tables]]
 
[[Category:Tables]]

Revision as of 07:52, 25 July 2020

Revision information.....

FSO Revision: 5307
Note: Please update the version when the page is updated. If your edit had nothing to do with new code entries then please do not edit the version


music.tbl is a table file used by the FreeSpace game engine to define the music played during the game.

In FSO, this table can be further extended with any modular table with a filename ending with -mus (e.g. AF-mus.tbm, bp-mus.tbm, v_music-mus.tbm).

Description

music.tbl consists of two sections defined as follows:

  1. The soundtracks, which are music files intended to be played during a mission.
  2. The menu music, which are music files intended to be played for other purposes.

Comments (which are not read by the game engine) can be added at the start of a line or after any line containing formatting using a semicolon (;).

-mus.tbm modular tables use the exact same formatting as music.tbl.

Soundtrack

Each individual soundtrack should start with #SoundTrack Start and end with #SoundTrack End.

$Soundtrack Name:

$Soundtrack Name: is immediately followed by the soundtrack order number and the name of the soundtrack.

  • Syntax: Integer: String
    • Example: 1: Genesis

Flags

FS2 Open 3.6.10:

The following flags can be added in additional lines after $Soundtrack Name: in modular tables.

+nocreate

This flag should be added if the soundtrack is intended to completely overwrite an existing soundtrack.

+Cycle: FS1

This cycles the NRML and BTTL tracks the FS1 way, instead of the FS2 way.

+Allied Arrival Overlay: NO

This allows the Allied Arrival track to play on its own, as it did in FS1.

$Name:

For this section, refer to the code for FS2_Amb_A01.wav, as follows:

  $Name:	FS2_Amb_A01.wav				25.0	105840	; * Ambience 

The code above can be explained using the following table:

$Name: (required) Filename Number of measures (m) Samples per measure (s) Comments (optional)
$Name: FS2_Amb_A01.wav 25.0 105840 ; * Ambience

$Name:

The individual music segments in a soundtrack is defined using at least 12 lines, all beginning with $Name:. The FreeSpace engine parses and plays the audio file referenced in each line in the following order:

Order Situation Details
1 Ambience Normal track—plays when nothing is happening or units are out of combat range
2 Allied Arrival during Ambience Plays when a friendly unit arrives while Ambience is playing
3 Enemy Arrival during Ambience Plays when a hostile unit arrives while Ambience is playing
4 Battle 1 Battle track 1—plays when units are in combat range; usually segues into Battle 2
5 Battle 2 Battle track 2—plays when units are in combat range; usually segues into Battle 3
6 Battle 3 Battle track 3—plays when units are in combat range; usually segues into Battle 1
7 Allied Arrival during Battle Plays when a friendly unit arrives while any Battle track is playing
8 Enemy Arrival during Battle Plays when a hostile unit arrives while any Battle track is playing
9 Victory 1 Plays when a goal is completed
10 Victory 2 Plays when all goals are completed and there are absolutely no hostile units present; is only called once
11 Goal Failed Plays when the primary goals of a mission are failed; does not appear to be called in-game
12 Player Dies Plays when the player is killed and goes to the death screen
FS2 Open 3.6.10:
  • The following lines can be added.
Order Situation Details
13 Ambience 2 Normal track—if Ambience 3 is defined, usually segues into it, otherwise segues into Ambience
14 Ambience 3 Normal track—usually segues into Ambience

The order and situation of the 12 lines cannot be changed and are required in order for the engine to parse the audio files in the correct situations. If there is no audio file available for any of the situations (such as Battle 3, for instance), a placeholder line denoting an empty track should still be included, like so:

  ...
  $Name:	FS2_Btl_A02.wav				27.8	81415	; * Battle 2
  $Name:	silence.wav				0.0	0	; * Battle 3
  $Name:	FS2_AArv_A01.wav			1.8	105840	; * Allied Arrival during Battle
  ...

Filename

The filename of the audio file must also include its file extension. FS1 and FS2 only support the playback of Waveform Audio (.wav) files; FSO supports the playback of .wav and OGG vorbis (.ogg) files.

Measures and Samples per Measure

The FreeSpace engine's dynamic music capabilities are defined using the number of measures (m) and samples per measure (s). Using m, the engine parses the audio track by dividing it into individual parts, called measures; if an event happens that would change the music being played, the game will play the current audio track until the end of the current measure, whereupon it segues into the correct audio track via a built-in crossfade. The length of the measures is defined using s, which is the number of samples in a measure.

m is user-defined and can be set to a decimal point for greater fine-tuning.

s is calculated using the following formula:

  s = 2 × sample rate (hertz) × total audio length (seconds; up to 3 decimal places) ÷ m

Depending on the m and s values declared, the game may only play a portion of the actual audio file or, if the values result in it attempting to play the audio file beyond its actual length, playing nothing for a period of time after it finishes playing the actual audio file.

In the case of FS2_Amb_A01.wav, it is defined in music.tbl as an audio track that has 25 m and 105,840 s, so even though the file has an actual audio length of 62.556 seconds, the engine only ever parses the first 60 seconds of the audio file as its total audio length (hence omitting the last 2.556 seconds), split into 25 measures. This is because a reversal of the above calculation for s results in:

  105,840 (s) × 25 (m) ÷ 22,050 (hertz) ÷ 2 = 60.000 seconds

The length of the measures in the audio track cannot be individually adjusted by any meanss applies to all the measures in the audio file with no exceptions.

Alternate Calculation Method

If defining m and s is too time-consuming, the following formulae can be used to still make use of the FreeSpace engine's dynamic music capabilities, and would result in a maximum of 2 seconds' silence (since each measure would be 2 seconds long):

  m = audio file length (seconds; up to 3 decimal places) ÷ 2
  s = 4 × sample rate (hertz)

As an example, if we use the above alternate formulae with the actual audio length of FS2_Amb_A01.wav, we get the following:

  m = 62.556 seconds ÷ 2 = 31.278
  s = 4 × 22,050 (hertz) = 88,200

m would be rounded to the nearest decimal point. Hence, we would input the following as the alternate length for FS2_Amb_A01.wav in music.tbl:

  $Name:	FS2_Amb_A01.wav				31.3	88200	; * Ambience 

Specific Music Tracks

FS2 Open 3.6.10:
  • If table doesn't have retail like $Name: at the beginning of the line then a new method for parsing tables can be used
  • Instead $String: can be used where the string is shortened name of the music track.
  • After the initial entry on the line, rest of the music entry is added after it.
  • Name of the music track, name of the associated music file with file extension, number of measure, number of samples per measure
  • Syntax: $String: String Float Integer
  • Example: $Battle 1: FS2_Btl_G01.ogg 25.8 176400
  • Note that this system still requires a specific order, and a different one from the original.
Ambience "Normal 1"
Ambience 2 "Normal 2"
Ambience 3 "Normal 3"
Allied Arrival during Normal "Ally arrival 1"
Allied Arrival during Battle "Ally arrival 2"
Enemy Arrival during Normal "Enemy arrival 1"
Enemy Arrival during Battle "Enemy arrival 2"
Battle 1 "Battle 1"
Battle 2 "Battle 2"
Battle 3 "Battle 3"
Goal Failed "Failure 1"
Victory 1 ( goal completed ) "Victory 1"
Victory 2 ( all enemies dead, goals completed ) "Victory 2"
Player dies "Dead 1"

Menu Music

  • Menu music tracks are defined with filename after the track's name.
  • There is a limit of 50 menu music tracks.
  • Syntax for all of the Menu Music entries are similar
  • Syntax: $Filename: Filename.xxx
    • Example: $Filename: FS2_Brief_01.wav


$Name:

  • Defines the name of the menu music
  • Syntax: String

+nocreate

FS2 Open 3.6.10:
  • Used with modular tables to set the parser to use the modular table only for modifying an existing entry instead of creating new (possibly incomplete) one.


$Filename:

  • Defines the actual file
  • Syntax: String, filename with file extension

Format Sample

The following is a heavily truncated version of music.tbl located within Root_FS2.vp.

  ;
  ; music.tbl
  ;
  ; Specifies which .wav files to use for the different sections of event-driven sound-tracks
  ;
  ; format:  $Name:  filename.wav  num_measures (samples_per_measure)
  ;
  #SoundTrack Start	         				; SoundTrack 0
  $Soundtrack Name: 1: Genesis
  $Name:	FS2_Amb_A01.wav				25.0	105840	; * Ambience 
  $Name:	FS2_AArv_A01.wav			1.8	105840	; * Allied Arrival during Normal
  $Name:	FS2_Arv_B01.wav				3.8	81415	; * Enemy Arrival during Normal
  $Name:	FS2_Btl_A01.wav				25.8	66150	; * Battle 1
  $Name:	FS2_Btl_A02.wav				27.8	81415	; * Battle 2
  $Name:	FS2_Btl_A03.wav				39.8	81415	; * Battle 3
  $Name:	FS2_AArv_A01.wav			1.8	105840	; * Allied Arrival during Battle
  $Name:	FS2_Arv_B02.wav				3.8	81415	; * Enemy Arrival during Battle
  $Name:	FS2_Vict_A01.wav			2.8	52920	; * Victory 1 ( goal completed )
  $Name:	FS2_Vict_A02.wav			30.8	52920	; * Victory 2	( all enemies dead, goals completed )
  $Name:	FS2_Dth_A01.wav				23.8	132300	; * Goal Failed
  $Name:	FS2_Dth_A01.wav				23.8	132300	; * Player dies
  #SoundTrack End							; End Soundtrack 0
  ;
  #SoundTrack Start	     					; SoundTrack 1
  $Soundtrack Name: 2: Exodus
  $Name:	FS2_Amb_B01.wav				17.0	132300	; * Ambience 
  $Name:	FS2_AArv_A01.wav			1.8	105840	; * Allied Arrival during Normal
  $Name:	FS2_Arv_B01.wav				4.8	81415	; * Enemy Arrival during Normal
  $Name:	FS2_Btl_B01.wav				39.8	132300	; * Battle 1
  $Name:	FS2_Btl_B02.wav				23.8	75600	; * Battle 2
  $Name:	FS2_Btl_B03.wav				31.8	75600	; * Battle 3
  $Name:	FS2_AArv_A01.wav			1.8	105840	; * Allied Arrival during Battle
  $Name:	FS2_Arv_B04.wav				4.8	75600	; * Enemy Arrival during Battle
  $Name:	FS2_Vict_A01.wav			2.8	52920	; * Victory 1 ( goal completed )
  $Name:	FS2_Vict_B02.wav			40.8	88200	; * Victory 2	( all enemies dead, goals completed )
  $Name:	FS2_Dth_A01.wav				23.8	132300	; * Goal Failed
  $Name:	FS2_Dth_A01.wav				23.8	132300	; * Player dies
  #SoundTrack End							; End Soundtrack 1
  ;
  #Menu Music Start
  $Name:		Brief1				
  $Filename:	FS2_Brief_01.wav			; briefing music 1
  
  $Name:		Brief2
  $Filename:	FS2_Brief_02.wav			; briefing music 2
  
  $Name:		Brief3
  $Filename:	FS2_Brief_03.wav			; briefing music 3
  #Menu Music End