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 is usually patterned after its path (such as "random.break"). All default sound events are listed in the table below. (To get a different namespace than  the file'll need to be under a different namespace; not defining it here.)
 * : 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 "namespace/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 "namespace/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.
 * : Modify sound reduction rate based on distance. Used by portals, beacons, and conduits.
 * : true/false. True if this sound should be loaded when loading the pack instead of when the sound is played. Used by the underwater ambience. Defaults to "false".
 * : 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.