Accepted Audio Formats
Bedrock's audio subsystem recognizes three file extensions inside the RP/sounds/ directory: .ogg, .wav, and .fsb. When you register a sound in RP/sounds/sound_definitions.json, you omit the file extension from the path, and the game automatically resolves the matching file at runtime. If two files share the same path with different extensions, the engine's resolution order is not guaranteed, so keep only one format per sound asset.
In production add-ons, Ogg Vorbis (.ogg) is the standard format for both short sound effects and long music tracks. Uncompressed Waveform Audio (.wav) is useful during rapid prototyping because it exports quickly from digital audio workstations, but it bloats pack download sizes and RAM usage. FMOD Sound Bank (.fsb) files are present in the vanilla game resources for legacy reasons; while the engine still decodes them, creators should avoid generating new .fsb files because Ogg Vorbis offers the same runtime behavior with a much simpler toolchain.
| Format | Codec | Recommended Use | Notes |
|---|---|---|---|
| .ogg | Ogg Vorbis | All production sounds and music | Best balance of small file size and decoding performance. Must be Vorbis, not Opus. |
| .wav | Linear PCM (16-bit) | Local testing and short clips | Uncompressed. Large files will exhaust sound memory pools quickly. |
| .fsb | FMOD Sound Bank | None (Legacy) | Used by older vanilla assets. Not needed for custom resource packs. |
Encoding Specifications: Sample Rate and Bit Depth
Even when a file has a valid .ogg or .wav extension, the internal stream must use an encoding profile that Bedrock's FMOD configuration can parse. For .ogg files, the audio stream must be encoded with the Vorbis codec. Ogg containers holding Opus or FLAC streams are not supported and will fail to play without throwing a content log error.
For .wav files, export using standard uncompressed 16-bit signed integer PCM. Floating-point WAV files (32-bit float), 24-bit PCM, and ADPCM-compressed WAV files frequently produce burst static or complete silence across different target devices, particularly on mobile and console platforms.
Stick to a sample rate of 44100 Hz or 48000 Hz for standard assets. For low-frequency ambient rumbles or simple retro sound effects, you can drop the sample rate to 22050 Hz to reduce the file footprint. Avoid sample rates above 48000 Hz; they provide no audible benefit inside the game engine and increase both memory consumption and CPU resampling overhead.
Mono vs. Stereo and 3D Positional Audio
The channel layout of your audio file directly controls how Bedrock spatializes the sound in the 3D world. Any sound that is meant to originate from a specific coordinate—such as an entity attack, a custom block interaction, or a localized ambient emitter—must be exported as a single-channel (mono) file. The engine takes that mono signal and pans it across the player's left and right speakers while applying distance attenuation.
If you feed a two-channel (stereo) file into a positional sound event, FMOD will not spatialize it properly. In most cases, a stereo file plays at full volume in both ears regardless of how far the player walks from the source, making it sound as if the audio is inside the player's head. Reserve stereo files strictly for non-positional audio: background music tracks, boss arena themes, and 2D user interface clicks.
| Channel Layout | 3D Attenuation | Typical Categories | What Happens if Misused |
|---|---|---|---|
| Mono (1 channel) | Yes (panned and distance-scaled) | neutral, hostile, block, player, weather | Works anywhere, including UI, though lacks stereo width for music. |
| Stereo (2 channels) | No (plays flat across channels) | music, ui | Plays at constant volume globally or ignores directional panning in the world. |
Memory vs. Streaming in sound_definitions.json
How you encode a file ties directly into how you declare it in RP/sounds/sound_definitions.json. By default, Bedrock decodes sound files into memory when they are needed so they can be triggered with zero latency and played concurrently in multiple places. This works well for short mono .ogg files under a few seconds long, but a four-minute stereo music track decoded into raw PCM in memory will consume tens of megabytes of RAM and risk crashing low-memory devices.
For long audio files—typically music tracks, custom music discs, or long ambient loops exceeding five to ten seconds—you must enable streaming by setting "stream": true on the sound entry. Streaming reads the compressed .ogg file from disk in small chunks as it plays. For mobile compatibility, pair "stream": true with "load_on_low_memory": true if the sound is essential, or omit it so low-RAM devices can safely skip loading heavy background audio. Note that file paths in this JSON omit the .ogg or .wav extension.
{
"format_version": "1.20.20",
"sound_definitions": {
"mob.custom_golem.step": {
"category": "neutral",
"max_distance": 16.0,
"sounds": [
"sounds/mob/custom_golem/step1",
"sounds/mob/custom_golem/step2"
]
},
"music.custom_dungeon.ambient_loop": {
"category": "music",
"sounds": [
{
"name": "sounds/music/dungeon_loop",
"stream": true,
"volume": 0.8,
"load_on_low_memory": true
}
]
}
}
}Stripping Metadata and Exporting Clean Files
When exporting .ogg or .wav files from audio editors like Audacity, Reaper, or FL Studio, always strip embedded metadata tags and album artwork. ID3 tags, Vorbis comments containing large binary cover art, or proprietary DAW project chunks at the head of a file can corrupt the header offset that Bedrock's audio loader expects. When this happens, the file fails to play silently.
If an audio file refuses to play despite having the right path and definition, re-export it through a clean conversion pass with metadata cleared, 16-bit PCM (for WAV) or quality level 4 to 6 Vorbis (for OGG), and verify the channel count before testing again in-game.
Which versions this applies to
Applies to all modern Minecraft Bedrock versions (format_version 1.14.0 through 1.20.20 and later). No experimental toggles are required.
When it does not work
| What you see | Why | The fix |
|---|---|---|
| A custom entity or block sound is heard at full volume everywhere in the world, ignoring distance and direction. | The audio file was exported in stereo (2 channels) instead of mono (1 channel), preventing the sound engine from applying 3D positional panning and distance attenuation. | Mix the audio track down to a single mono channel in your audio editor and re-export the .ogg or .wav file. |
| The sound does not play at all when triggered via /playsound, with no error or [Sound][warning] Unable to find sound in the Content Log. | Either the file extension (.ogg or .wav) was accidentally included in the "name" path inside sound_definitions.json, or the .ogg file is an renamed .mp3 / Opus-encoded file. | Remove the .ogg or .wav extension from the path string in RP/sounds/sound_definitions.json, and ensure the file is genuinely encoded using the Ogg Vorbis codec. |
| Custom music tracks cut off abruptly, fail to start on mobile devices, or cause other game sounds to drop out. | A long stereo audio file is being loaded completely into the in-memory sound pool because "stream": true was omitted from its sound definition. | Convert the sound entry in RP/sounds/sound_definitions.json from a plain string to an object and add "stream": true. |
| A .wav sound plays as loud white noise or a sharp pop instead of the recorded audio. | The .wav file was exported as 32-bit float or 24-bit PCM, which the Bedrock audio loader does not consistently decode across platforms. | Re-export the file as a 16-bit signed PCM WAV, or convert it to an Ogg Vorbis (.ogg) file. |
Reference, straight from the game files
Read out of the game itself, so the ids match the version you are building for.
