Sounds.json

sounds.json (sound_definitions.json in Bedrock Edition) is a file used by the sound system in resource packs which tells the sound system what sound files to play when a sound event is triggered by one or more in-game events. This file is located in  in resource packs, and the default file is located in   (  on Bedrock Edition), and its hashed name can be found by looking it up in the file.

File structure
This file is stored in JSON format, but is represented here using NBT.
 * The root Object.
 * A sound event. The name of this Object is the name of the sound event, which is usually patterned after its path (such as "random.break"). All default sound events are listed in the table below.
 * (deprecated as of 1.10+): The category this sound event belongs to. Valid category names are "ambient", "weather", "player", "neutral", "hostile", "block", "record", "music", "master" and "voice". This String lets the sound system know what sound events belong to what category, so the volume can be adjusted based on what the sound options are set to for each category.
 * : true/false. Used only in resource packs. True if the sounds listed in sounds should replace the sounds listed in the default sounds.json for this sound event. False if the sounds listed should be added to the list of default sounds. Optional. If undefined, defaults to "false".
 * : Will be translated as the subtitle of the sound if Show Subtitles is enabled ingame. Optional.
 * : The sound files this sound event uses. One of the listed sounds is randomly selected to play when this sound event is triggered. Optional.
 * The path to a sound file from the "sounds" folder. Uses forward slashes.
 * A sound file. This Object is used only when the sound requires additional Strings.
 * : The path to this sound file from the "sounds" folder. Uses forward slashes instead of backslashes. May also be the name of another sound event.
 * : The volume this sound will be played at. Value is a decimal between 0.0 and 1.0. If undefined, defaults to 1.0.
 * : Plays the pitch at the specified value. If undefined, defaults to 1.0, but higher and lower values can be chosen.
 * : The chance that this sound will be selected to play when this sound event is triggered. Defaults to 1. An example: putting 2 in for the value would be like placing in the name twice. Only accepts integers.
 * : true/false. True if this sound should be streamed from its file. It is recommended that this is set to "true" for sounds that have a duration longer than a few seconds to avoid lag. Used for all sounds in the "music" and "record" categories (except Note Block sounds), as (almost) all the sounds that belong to those categories are over a minute long. Optional. If undefined, defaults to "false". Setting this to false allows many more instances of the sound to be ran at the same time while setting it to true only allows 4 instances (of that type) to be ran at the same time.
 * : Two values are available: "sound" and "event"; "sound" plays from the name of the file, while "event" plays from an already defined event. If undefined, defaults to "sound".

An example of a pre-1.10 sounds.json can be found here. Dinnerbone's pre-1.10 specifications can be found here.

Sound events
A sound event is linked to one or more in-game events. Two sound events may share the same sound file, but correspond to different in-game events and/or belong to different sound categories. A few valid sound events aren't included in sounds.json, while others don't have an in-game event associated with them. Any sound event that lacks an in-game event can be played only with. All default sound events, the sounds they use, the category they belong to, the subtitle that plays at that event, and the in-game events they are triggered by are listed in the following table.

Block sound categories
The sound system divides all blocks into categories to determine which sounds play when a block is placed, destroyed, or walked on.

Slime Blocks are not included in the following table because they have unique digging and step sounds.