Announcing incoming new features for Sound Pack Developers

Hello!
I’d like to announce that I’ve made a PR that will enable Sound Pack Developers to add a large number of new sound effects to their packs. Full list is in the PR itself and it can be found HERE.

Few important features:

  • ton of new sound hooks, meaning the game will actually try to play them from sound packs, instead of just describing them verbaly,
  • updated documentation, so no need to search the code for relevant sfx hooks,
  • all activity sfx (for ex. cutting a tree with an axe) will last as long as the activity itself, looped if needed,
  • vehicles can have internal and external engine sounds that are modulated in-game, based on speed, distance, and engine noise, along with many supporting sfx like gear change, engine start/stops, horns, chimes, etc. as described in the documentation.

There are some ways to still improve it, but this is already huge, so it might be done in other PRs.
Main future ideas are:

  • multi-channel support for external engine sfx (simultaneously hear multiple working vehicles),
  • separate music playlists for car stereo, mp3 players,
  • new sfx hooks for requested events/actions/etc.

I sincerely wish the best of luck for sound pack developers for making quality content sfx for the game. And also good luck in getting those sweet sweet free licensed sounds.

12 Likes

One more thing I forgot in the main post: the obstacle sound can be now set for every type of terrain separately, so you can finally differentiate between pushing through a bush and pushing through a long grass, tall grass, etc.

1 Like

Maybe i did not see it, but what about sound for individual creatures?
Right now all creatures in the game sound like a generic zombie, and there is no way around it.
It would be so awesome to have different sounds for different creatures.

6 Likes

That is a very good point. I’ll be glad to do a PR just for that, but first I need this Pr to be merged, because its already bloated beyond oblivion. I’m putting this on my TODO list.

3 Likes

Thank you for your work, can’t wait to see what other people do with it. Will it be possible to play different sound tracks for different locations (e.g. urban, labs, forests, temples, etc.)?

While the idea itself is great it might be hard to implement. To my knowledge there are no specific zones used outside the temporary process of map generation to hook onto. I will discuss this idea with devs that are more familiar with mapgen and try to find a solution if it exists.

1 Like

I’m not very familiar with the game’s code outside of json but I imagined it to use a hook based on the map tiles. For example, the map tiles used to display labs and research facilities on the map would have an appropriately themed playlist associated with them that would play as long as the player is considered to be within those map tiles. No invisible zones involved, just check the tile the player is in against a list or several lists defined in the jsons. If the player isn’t in a tile with specific music associated with it, just use a default.
Thank you for your work again, and thank you for giving consideration to my suggestion.

Hi, long time lurker, first time poster.

I’d like to do sound design, I think it would be a nice challenge. I read the PR linked in the OP, but still have some questions:

  • What format should the sound files be? What bit and sample rates should we use? What final file size do you recommend, since there are going to be a lot of files?
  • What LUFS levels should we target? Do we use same level music is mastered?
  • Do I understand this example correctly: smash_success smash_glass_contents|(table) means sound of smashing glass on the table? And what do furniture and terrain mean in this example: open_door default|(furniture)|(terrain)?

I’ll follow up if I have some more questions. Thank you for patience, but I am an audio engineer, so it takes some time to wrap my mind around the language devs use :).

Yes, that’s is the most simple approach, and and easiest for implementation. This will be certainly be on my TODO list for the follow-up PR after this 9ne gets merged. There is a middle way for it too - original author of sfx code grouped some terrain together for footsteps sfx management. Overlap tiles can be grouped in similar ways, so if no specific sound is defined for particular terrain, game looks for the sound for the whole group, and when that fails too it goes for the default as a last resort. Doable and I will check it out while making new PRs on the field.

Wolfrider, give me a day and I will get back to you with detailed answers. I’m on a mobile and I need to do some cross references on my workstation to be able to give you precise info. I will also use this opportunity to clear out the documentation so that the answers will be also included there for future use. Please keep in touch in this thread.

this would help me test soundpacks though…

nice one… looking forward to it.

As promised, I’ll answer your questions wolfraider:

Q: What format should the sound files be?
A: Exempt from SDL_mixer (API used to manage audio devices and play music) documentation:
SDL_mixer supports playing music and sound samples from the following formats:

  • WAVE/RIFF (.wav)
  • AIFF (.aiff)
  • VOC (.voc)
  • MOD (.mod .xm .s3m .669 .it .med and more) requiring libmikmod on system
  • MIDI (.mid) using timidity or native midi hardware
  • OggVorbis (.ogg) requiring ogg/vorbis libraries on system
  • MP3 (.mp3) requiring SMPEG or MAD library on system
  • FLAC (.flac) requiring the FLAC library on system - also any command-line player, which is not mixed by SDL_mixer…

Q: What bit and sample rates should we use?
A: First another exempt of SDL_mixer documentation: “It supports 8 channels of 16 bit stereo audio, plus a single channel of music, mixed by the popular MikMod MOD, Timidity MIDI and SMPEG MP3 libraries.”
Also:

  • frequency has been set at 44100 Hz;
  • format has been set as AUDIO_S16LSB = Signed 16-bit samples, in little-endian byte order;
  • channels has been set to 2 = stereo;
  • chunks size was set to 2048 bytes;

For anything else you’d have to check the SDL_mixer documentation

Q: What final file size do you recommend, since there are going to be a lot of files?
A: There is no recommendation for that, bigger the files bigger the soundpack itself. However many sfx are either short sounds or short looped sounds. Also you can reuse sound files for different sfx ids and variants just pointing them from the JSON file.

Q: What LUFS levels should we target? Do we use same level music is mastered?
A: There are no directions on that field, other that common sense requires at least some general equalizing of the sound levels of the sfx, to avoid situation in which some drastically stand out. Game has volume settings for music, sfx, and ambient sfx (most looped environmental sfx).

Q: Do I understand this example correctly: smash_success smash_glass_contents|(table) means sound of smashing glass on the table? And what do furniture and terrain mean in this example: open_door default|(furniture)|(terrain)?
A: Ensure you have read the whole SOUNDPACKS.md documentation file.

And the answer would be: the pair of “id” and “variant” always work together, so wherever in documentation you see:
smash_success smash_glass_contents you see id followed by a variant exactly as it’s written (static variant) - in this instance sound of breaking glass items being smashed to pieces
smash_success <furniture> you see id followed by a placeholder of a furniture id (dynamic variant)

  • Different variants are separated by “|” to indicate that they all belong to the id that is first in line.
  • Every dynamic id is equal to respective id of the object that can be found in respective json files, for ex. furniture.json

Let me explain on an example exempt from a JSON file where you will be linking sfx ids & variants with respective sound files:

{
    "type": "sound_effect",
    "id" : "smash_success",
    "variant" : "f_bigmirror",
    "volume" : 100,
    "files" : [
        "env/smashes/smash_glass1.ogg",
        "env/smashes/smash_glass2.ogg"
    ]
},
{
    "type": "sound_effect",
    "id" : "smash_fail",
    "variant" : "f_bigmirror",
    "volume" : 100,
    "files" : [
        "env/smashes/hit_glass1.ogg",
        "env/smashes/hit_glass2.ogg",
        "env/smashes/hit_glass3.ogg"
    ]
},
{
    "type": "sound_effect",
    "id" : "smash_fail",
    "variant" : "smash_glass_contents",
    "volume" : 100,
    "files" : [
        "env/smashes/break_glass1.ogg"
    ]
},

Notice how:

  • ids and variants change,
  • variants are defined for the same id
  • many optional files can be linked to a set of id+variant - they will be played at random to add variety

Remember that "variant" : "default", can be defined. It’s useful for dynamic variants - if no sound is defined for specific variant the ‘default’ will be played for a given ‘id’. So if someone adds a new furniture that would not have a specific bash sound at the time of the update, bashing it will not be soundless if default sound is in place.

I’d be happy to answer any more questions that might emerge.

2 Likes

Thanks very much for putting in all the effort for this. Soundpacks are something that could increase the atmosphere of the game that are sadly neglected, and having the framework for a proper, complete soundpack for the game is lovely.

1 Like

Thank you very much for detailed answers. I’ll start making sound assets and we’ll see how it goes from there.

1 Like

Thanks. There is still much to do. It’s quite unfortunate that SDL_mixer is quite a simple tool so it’s hard to work with it in more complicated sfx mixing. I plan to do a poll on what people would want to see (hear) more and then try to see what can be done on that matter. For example a dynamic weather based wind sfx would be nice. There is wind sfx in game but it’s not linked with newly introduced wind part of the weather engine. We’ll see.

1 Like

Quick announcement. My sound hooks PR got merged in recent experimental so sound packs can now be expanded with more sounds. Check the SOUNDPACKS.md documentation file in the game source files. Good luck expanding your soundpacks.

3 Likes

Oh man, this is awesome. I’ve been wanting automobile related sounds for a long time. Now the thought of all the other cool sound effects coming in is exciting. This will be huge for immersion. Thanks a ton for your work!

1 Like

Amazing, my mind just blow up thinking about posibilities. Oh dear, even with the classic soundpack method the vast list of different sounds that the game can use is really big, this just expand my to-do list. Great stuff! thanks for your work.

Your an absolute legend!

Multi channel in future would be awesome as with CO.AG I find sometimes sounds do not play when conducting actions I know possess sounds; such as smashing a utility locker with a makeshift crowbar or firing RM scout rifle at a zombie. Great addition though and looking forward to seeing CO.AG update with changes (hopefully)