🎺Sound
WIP: This page contains a selection of guides on how to create sound-related mods but is still incomplete.
Feel free to sign up and add your knowledge to the wiki. It doesn't matter if the guide is shitty or if your English is bad, the next person can always improve on your stuff – as long as there is any stuff!
How are sounds stored
Cyberpunk uses Wwise audio system, which uses mostly proprietary ("secret", non-opensource) formats. But thanks to the community we have the tools to dig into them. But first, you have to find the file. Checkout my sound explorer tool that will help you find sounds and their location in the game. Cyberpunk stores sounds primarily in two ways, let's go over them.
WEM files
The game stores voice-overs and most music as a .wem
file, which you can find and extract using WolvenKit, which can also export it to other format (like mp3) using the Export Tool. Alternatively I'd like to recommend VGMStream, which you can use in various ways, but I use it in CLI, it can also decode other formats very well.
Opuspaks and bnks
All of SFX, grunts, and some music are packed together in files ending with .opuspak
. Those paks are mapped by a single .opusinfo
file, both types are very machine-readble and not made for humans. You have to use tools like SoundFX Search and Replace to modify them.
Few sounds, mostly car noises, are so-called *preloaded* in .bnk
files, they're mostly duplicated and can be found elsewhere, but some sounds are only preloaded. VGMStream is able to extract some of them, but not all, because they differ in audio format.
Some sounds do not exist are handled differently. For example generated (noise, sine wave, etc.), or generated by CDPR's custom Wwise plugins which I haven't figured out yet. This might require more research, but you most probably don't need those sounds anyway.
How are SFX handled by the engine
The aforementioned .bnk files are primarily for other purpose that storing audio. They describe how the audio should be played.
The process of playing a sound when something happens goes something like this: The game sends an event to Wwise, those are described in eventmetadata.json
file in the game's archives. Those events are connected to a tree of nodes describe in .bnk
files, this may include random selection of next node, layering, volume modification, switching between the next nodes according to a condition, etc. at the end is a node that points to an audio file (or a plugin) and that sound is played. Or multiple sounds are played at once, according to the previous nodes.
This happens every time V has to grunt, when a weapon shoots, car starts, crashes, or when you enter a building and ominous music starts to play, that went through bnks, too! This does not seem to happen for most voice-overs (apart for exceptions, for example I think the Konpeki Plaza alarm uses CDPR's Voice Broadcast plugin).
How are voice-overs connected to subtitles
Every subtitle in the game has a String ID (which is a really long number) that is universal between languages. What .wem
audio file belongs to which String ID is mapped inside files starting with voiceover
and ending in .json
. Some of them are for holocall voice-overs, some for when the character has a helmet on. Then there is more .json
files in the subtitles
folders that contain the subtitles for each String ID... and by more I mean few thousands. So, again, it is easier to search those using my sound explorer tool.
Guides:
Playing Sounds in-game : BasicsExternal links:
There are a couple of pages about sounds on Roms1383s wiki for his Addicted Mod:
https://cyb3rpsych0s1s.github.io/4ddicted/cheatsheet/sounds.html https://cyb3rpsych0s1s.github.io/4ddicted/travelog/2023-03-31.html
Bioskop's comprehensive guide to vocoding - Google Docs
Last updated