Wiki 9Minecraft Wiki 9Minecraft

Sound Definitions Reference (sound_definitions.json)

Complete reference for registering and configuring custom audio in Minecraft Bedrock resource packs.

5Sections
2Code examples
4Known errors

The sound_definitions.json file registers short identifier strings for your audio files so that the rest of the game can play them. You reach for this file whenever you add custom entity vocalizations, block footsteps, item use sounds, or ambient tracks, or when you want to override vanilla sound events with your own variations. Every sound played via commands, animations, or behaviour files must first be defined here.

File Location and Structure

In a Bedrock resource pack, sound definitions live at the exact path RP/sounds/sound_definitions.json. Unlike entity or block files, this is a single master registry for the entire resource pack rather than one file per sound. If multiple resource packs are active in a world, the game merges their sound_definitions.json files from bottom to top of the pack stack, overwriting matching sound event keys.

Modern packs use format_version "1.14.0" or "1.20.20" at the root level. Inside the root object, all sound events sit inside the "sound_definitions" dictionary. Older vanilla files sometimes omit the "sound_definitions" wrapper and place sound event keys directly at the root alongside the format version, but you should always use the wrapper in new packs to avoid parser conflicts.

Actual audio files sit inside the RP/sounds/ folder or its subfolders. Bedrock supports Ogg Vorbis (.ogg) and uncompressed WAV (.wav) files, with Mono .ogg strongly preferred for 3D positional audio. When referencing these files in JSON, you always omit the file extension.

RP/sounds/sound_definitions.json
{
  "format_version": "1.14.0",
  "sound_definitions": {
    "mob.custom_goblin.idle": {
      "category": "neutral",
      "max_distance": 16.0,
      "min_distance": 2.0,
      "sounds": [
        "sounds/mob/goblin/idle1",
        {
          "name": "sounds/mob/goblin/idle2",
          "volume": 0.85,
          "pitch": 1.1,
          "weight": 2,
          "stream": false,
          "is3D": true
        }
      ]
    }
  }
}

Event-Level Properties

Each key inside "sound_definitions" is a sound event identifier, such as "mob.custom_goblin.idle" or "custom.magic.spell_cast". These identifiers do not take a namespace colon; instead, they use dot-separated paths by convention. This exact string is what you pass to the /playsound command, animation sound effects, or RP/sounds.json.

The properties directly inside a sound event object apply to every audio file listed inside that event's "sounds" array. They control how the sound is categorized in the player's audio settings and how far away the sound can be heard in the 3D world.

FieldWhat it doesNotes
categoryAssigns the sound to a volume slider in the game's Audio Settings menu.String. Defaults to "neutral" if omitted. Also affects certain culling priorities.
min_distanceThe distance in blocks from the source where the sound begins to attenuate (lose volume).Float. Inside this radius, the sound plays at its full configured volume.
max_distanceThe maximum distance in blocks at which the sound can be heard at all.Float. Beyond this radius, the sound is culled and will not play for the client.
__use_legacy_max_distanceForces the engine to use older distance attenuation math seen in early Bedrock versions.String ("true" or "false"). Rarely needed in custom packs; included mostly in vanilla files for parity.
soundsA list of audio file references that this event can randomly choose from when triggered.Array of strings or objects. Required. If empty, the event plays silence.

Sound Entry Properties

The "sounds" array holds the actual paths to your audio files. If you do not need to tweak the playback settings for a specific file, you can write the entry as a plain string, such as "sounds/mob/goblin/idle1". The path is always relative to the root of the resource pack, not the RP/sounds/ folder.

When you need fine control over volume, pitch, selection chance, or memory handling for an individual audio variation, you write the entry as an object instead of a string. When multiple entries are listed in the "sounds" array, the engine picks one at random each time the event is triggered, weighted by the "weight" property.

FieldWhat it doesNotes
namePath to the audio file starting from the resource pack root, without the .ogg or .wav extension.String. Required when using the object syntax (e.g., "sounds/blocks/crunch").
volumeMultiplier for the base loudness of this specific audio file.Float. Defaults to 1.0. Values above 1.0 generally do not increase loudness on 3D sounds, though they may affect attenuation slightly.
pitchPlayback speed and frequency multiplier for this specific audio file.Float. Defaults to 1.0. A value of 0.5 plays at half speed and an octave lower; 2.0 plays at double speed.
weightRelative chance that this specific file is chosen from the "sounds" array.Integer. Defaults to 1. A sound with weight 3 is three times as likely to play as a sound with weight 1.
streamStreams the audio directly from disk rather than loading the entire file into RAM.Boolean. Defaults to false. Set to true for music tracks, long ambient loops, or dialogue over 5 seconds long.
is3DDetermines whether the sound pans and attenuates based on 3D world position.Boolean. Defaults to true for most categories. Set to false for UI clicks or global stingers that should sound identical everywhere.
load_on_low_memoryForces the game to keep this sound loaded even on devices running out of audio memory.Boolean. Deprecated in newer versions (1.20+), where the engine warns if this field is still present.

Valid Sound Categories

The "category" field links your sound event to the sliders in the player's Audio Settings screen and controls certain engine behaviours like default 3D panning and voice limits. Choosing the right category ensures players can turn down ambient noise or hostile mobs without muting your custom items.

Category StringSettings SliderTypical Use Case
ambient Environment / AmbientCave eerie noises, wind, water loops, and biome atmosphere.
blockBlocksBlock breaking, placing, stepping, chest opening, and custom machine noises.
bottleBlocksFilling or emptying glass bottles and cauldrons.
bucketBlocksEmptying or filling water, lava, and powder snow buckets.
hostileHostile CreaturesIdle, hurt, death, and attack sounds for monsters.
musicMusicBackground music tracks. Usually paired with "stream": true and "is3D": false.
neutralFriendly CreaturesPassive and neutral mobs like cows, villagers, and golems.
playerPlayersPlayer hurt grunts, eating, drinking, and custom weapon swings.
recordJukebox / Note BlocksCustom music discs and note block instruments.
uiMain / UIButton clicks, achievement notifications, and non-positional interface cues.
weatherWeatherRain loops and thunderclaps.

Connecting Definitions to the Game

Registering an event in RP/sounds/sound_definitions.json only creates the identifier and configures its files; it does not tell the game when to play it. To trigger your sound automatically on entity actions (such as step, hurt, or death) or block interactions, you reference the identifier inside RP/sounds.json, which sits in the root of your resource pack.

You can also trigger any defined sound event directly from a client entity file (by mapping a short name in the entity's "sound_effects" description block and calling it in an animation or animation controller), from a behaviour pack animation, via the Script API using Player.playSound() or Dimension.playSound(), or directly in-game with the /playsound command.

RP/entity/custom_goblin.entity.json
{
  "format_version": "1.10.0",
  "minecraft:client_entity": {
    "description": {
      "identifier": "my_pack:custom_goblin",
      "sound_effects": {
        "laugh": "mob.custom_goblin.idle"
      }
    }
  }
}

Which versions this applies to

Applies to all modern Bedrock versions (format_version 1.14.0 and 1.20.20). No experimental toggles are required.

When it does not work

What you seeWhyThe fix
Sound plays loudly across the entire world and does not pan left or right as you turn your camera.The audio file was exported in Stereo (2 channels) instead of Mono (1 channel). Bedrock's 3D audio engine cannot pan or distance-attenuate stereo files, so it plays them flatly in the player's head regardless of the "is3D" or "max_distance" settings.Open the .ogg or .wav file in an audio editor like Audacity, mix the stereo tracks down to Mono, and re-export.
The sound never plays when triggered, with no error in chat, even though the file exists in the pack.You either included the file extension (e.g., "sounds/mob/goblin/idle1.ogg") or omitted the leading "sounds/" folder in the "name" path.Ensure the path starts with "sounds/" relative to the resource pack root and remove the .ogg or .wav extension from the string.
Content Log shows: [ Sound ] load_on_low_memory is deprecated and will be ignored.You copied a template from an older vanilla file that includes "load_on_low_memory": true inside a sound entry object.Remove the "load_on_low_memory" key from all sound entries in your sound_definitions.json.
Long custom music or ambient tracks cut off abruptly or fail to play after a few seconds.The audio buffer limit was exceeded because the game tried to load a large audio file completely into memory.Convert the sound entry from a plain string to an object and add "stream": true so the game streams the audio from disk.

Reference, straight from the game files

Read out of the game itself, so the ids match the version you are building for.