Intro
Tools you'll need
- Audacity [portable] or any related fork of it like Tenacity
- NFS Wizard [NFSAddons] [portable]
- My set of BNKs with fixed loop start points [NFS3] [NFSHS]
The BNK files structure
NFS3 and NFSHS use sound bank files (.BNK) for car sounds; NFSHS has also the CARENG.CTB and CARENG.LTB files, which are presumed to tell the game which sample of (S)CARENG.BNK use at what rpm since each car has a different set. NFS3 on the other hand has a simpler, standardized structure recycled from NFS2 (the only difference is that NFS3 CAR.BNKs might come with compressed samples, but NFS2 .BNKs can be used as-is).
NFS3 car sound structure
File | Description | Samples |
Notes |
---|---|---|---|
car.bnk |
Player car sound bank |
|
|
ocar.bnk |
Opponent car sound bank |
|
|
ocard.bnk |
Opponent car sound bank (for Dolby sound, perhaps?) |
same as ocar.bnk |
same as ocar.bnk |
scar.bnk |
Player 2 in split-screen bank |
same as car.bnk |
same as car.bnk but all samples are mono |
NFSHS car sound structure (CLK-GTR sounds files)
File | Description | Samples |
Notes |
---|---|---|---|
careng.bnk |
Player car sound bank |
|
|
ocareng.bnk |
Opponent car sound bank |
|
|
scareng.bnk |
Player 2 in split-screen bank |
same as careng.bnk |
same as careng.bnk but all samples are mono |
careng.ltb careng.ctb |
presumably lookup tables for the (s)careng.bnk files |
|
|
Sample requirements
- 22050 Hz sample rate
- Can be mono or stereo
- Stereo samples should be pitched down 50% compared to mono
- Max length of samples vary per game but rule of thumb is to not exceed 1.2 seconds (NFSHS maximum) for mono samples, stereo samples are around half of that.
In general terms, working with mono samples is easier than with stereo samples because of the latter two points.
Why it was a massive PITA to get decent sound loops... until now
Each looped sample has 2 addresses of 4 bytes each, one starts with 86 and the other with 87: these correspond to the loop points. The part we're interested is this one:
"What the hell is a wave sample?", you might ask. Well, a wave sample is the basic unit of sound which varies with the sound frequency: in a 1 second-long 22050 Hz sound there are 22050 samples, for example. Which means 22 wave samples is equivalent to 0.001 seconds... which is about the amount the NFS3 samples get "shifted" around. (NFSHS sounds get shifted by 28 wave samples).
Step 1: Sourcing your samples
- You'll need to get a sound sample that's clean as possible. That means no echoing, no distortions, no foreign sounds like wind/road noise, etc.
- It needs to be as steady as possible for at least 0.5-0.6 seconds; relatively minor pitch changes (such as accelerating/decelerating down a road) can be corrected with the Sliding Stretch tool.
- If you can, get both acceleration and deceleration sounds. Otherwise just the acceleration sounds might suffice.
Regardless, you can get your sounds by either recording them from another videogame (using OBS, Xbox Game Bar or Audacity's built-in loopback recorder) or by ripping it from some online video. In case you want to record it from another videogame, here's an excerpt adapted from Zpectre's first tutorial linked above:
If you are using an analog device (like a gamepad or steering wheel), you first need to assign the throttle command to the Y axis. When the game asks you which key/button/command you want to use for the throttle, move the stick forward (I guess you all know how to do it) or press the right trigger. If you have a wheel, just use the pedals. After you customize your controls, start a race using manual transmission. When you are in control of the car, leave it at neutral gear. Now start pushing the throttle slowly until you reach an RPM value that is 1000-2000 RPM lower than the max RPM for the car (this gives better sounds). When you reach the value you want, keep the tachometer at it, then begin to record your sound. Make a 5-10 seconds long video, then stop recording.Also it's worth adding:
The second method is suitable for keyboard users and for some games which make distinction between engine and exhaust samples (like NFSU2 and NFSMW). You need to find a track with a section where the car will keep accelerating for some seconds, but won't increase RPM any further (for example, the small ramp before the first tollbooths in NFSMW's City Perimeter track). Start a race with the car you want on the track you think will be best to record sounds on, preferably with manual transmission (so you have more control over the RPM ranges). Before you reach the part of the track where the RPM will remain constant, start to record, then end it after you get the sound you wanted.
- As long as it's possible try to turn down all sounds that aren't the engine sound. In some cases you might have to mod the source game to achieve that.
- Try to avoid recording supercharger/turbocharger sounds because they won't sound good on idle/lower revs. Again, try to turn them down/remove them. However, for NFSHS, you can also record one sound with supercharger/turbo and one without them for use with high/low rpms, respectively.
- Avoid driving through tunnels and overpasses, the resulting echo effect can affect quality.
- To use Audacity's loopback recorder, set the Host to Windows WASAPI, Recording Channels to "1 (Mono)", Project Sample Rate to 22050 Hz and Playback/Recording Device to your speakers or headphones (whichever is plugged) in Audio Settings. Then you can hit the Record button in the toolbar to start recording.
- The resulting sounds might not be 100% accurate to the source sound, that's due NFS3/HS relatively primitive sound engine.
If you're going to source sounds from internet videos, then you might have to do some legwork to get a decent one because many are not quite optimal. Flyby and dyno videos might give you a better chance but they might require additional editing that won't be covered in this tutorial.
Step 2: Preparing your base sounds
- Volume and Compression > Amplify
- Default values are usually fine but you can check the Allow clipping checkbox and set the Amplification value 1-2 dBs higher than the default
- Volume and Compression > Limiter
- Set Type to Soft Clip and Apply Make-up Gain to Yes
- If you're working with a unsteady sound (like one from an accelerating/decelerating car) you can use Pitch and Tempo > Sliding stretch before using the Amplify and Limiter effects
- Usually a value of (-)1 to (-)5 percent on one end does even out the sound.
- Also if you want to make an interior engine sound out of your sound you can use EQ and Filters > Bass and Treble for that before using the Amplify and Limiter effects.
- Usually a 15%-20% treble value does the job
- NFS3: -30 to -35 percent change
- NFSHS: -15 to -25 percent change
When you're done, select your whole track, press Z to set the selection to zero points (the black line that's in the middle of the wave, this is important since that would avoid -most- instances of clicking), press Ctrl+T to trim the track and go to Tracks > Align Tracks > Start to zero to get rid of the empty space it might make. You might also want to delete any remaining sound after the 0.75 second mark by selecting it and pressing Ctrl+K.
Save your base sound as an Audacity project because you will need to get back to it, especially if you're making a NFSHS sound
Step 3: Making the engine sounds
Also make sure the waves "match" as possible in order to not get your sound muted at the middle after the next step, you might want to zoom in with Ctrl+mouse wheel to check.
Next select the overlapping parts of the tracks like this...
...then go to Effects > Fading > Crossfade tracks, set Fade TYPE to Constant Power and click OK.
- Go back to the beginning of this step, select one bit of the beginning (mind the zero points), delete it with Ctrl+K and do the whole process again.
-OR- - Use the Special > Invert effect on the reversed track.
- Select your track and go to Effects > Pitch and Tempo > Change speed and pitch. Apply the following percent changes for the following:
- -20 for the mid-rpm sound
- -40 for the low-rpm sound
- -60 for the idle sound
- (If needed) Press Z to set selection to zero points, trim it with Ctrl+T and align tracks to zero
- Select any remaining sound past the 0.75 second mark and delete it with Ctrl+K
Then proceed as usual.