Sounds.json

sounds.json 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 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.
 * : The category this sound event belongs to. Valid category names are "ambient", "weather", "player", "neutral", "hostile", "block", "record", "music", and "master". 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". In versions prior to 1.7.6-pre1, this String is ignored due to a bug.
 * : 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 instead of backslashes.
 * 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. Inversely, putting in 0.5, assuming no other weights are put on other sounds, will behave similarly to putting in all other names but this one twice.
 * : 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".
 * : 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 sounds.json can be found here. Dinnerbone's 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, 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.