Tutorials/Sound directory

This tutorial will help you locate the sound directory, where the sounds for are stored.

Sound directory (after 1.7.2)
The sound file for versions after 1.7.2 is located in the indexes directory:

1.8 macOS:

1.11 macOS:

The sound files in version 1.7.2 (specifically 13w42a) and above are scattered and hashed into different folders, which are located in:


 * Windows:
 * macOS:
 * Linux:

Locating specific sound files
Find the folder indexes, which is found under the same assets folder as objects, where the sound files are indexed and logged in the sounds.json file. Select the version you want and open the sounds.json file with a program that supports it, such as Notepad. Programs such as Notepad++ are recommended to help make the file more readable. Once opened, you may find something that looks like this:

"sounds/music/menu/menu1.ogg": { "hash": "c157c56846f0e50620f808fecd9d069423dd6c41", "size": 1744657 },

From this, we can determine that  is hashed (or labeled) as. Perform a search in the directory objects under assets and you should find a file with the same exact string; this is the file "menu1.ogg", one of the pieces of music that plays on the menu screen. The first two letters of the file name ("c1") will match the folder that the file is in as well; knowing this can help locate specific files faster.

After locating the file, you can test it to make sure it is the right one by playing it with a media player that is able to play .ogg sound files. If the media player you have cannot play the file, try renaming it with ".ogg" at the end. If this fails too, then it either means the media player you use does not have proper .ogg extension to play the sound, or the file you found is not a sound file.

Note: If you accidentally edit or remove the file from the original directory, the launcher will automatically re-download it again the next time you launch the game. (You must be connected to the Internet when you launch the game. If not, then the sound directory will not be reset and could potentially lead to errors.)

Extracting Minecraft Sounds using Python
import json, os, platform, shutil

''' 	Copies audio files from indescript hashed folders to named sorted folders. You may need to change version number or output path. '''

OUTPUT_PATH = os.path.normpath(os.path.expandvars(os.path.expanduser(r"~/Desktop/MC_Sounds/")))
 * 1) Change this if you want to put the sound files somewhere else

print(platform.system) if platform.system == "Windows": MC_ASSETS = os.path.expandvars(r"%APPDATA%/.minecraft/assets") else: MC_ASSETS = os.path.expanduser(r"~/.minecraft/assets")
 * 1) This section should work on any system as well

MC_VERSION = "1.15"
 * 1) Change this if a new version is released to find the index file properly

MC_OBJECT_INDEX = f"{MC_ASSETS}/indexes/{MC_VERSION}.json" MC_OBJECTS_PATH = f"{MC_ASSETS}/objects" MC_SOUNDS = r"minecraft/sounds/"
 * 1) These are unlikely to change

with open(MC_OBJECT_INDEX, "r") as read_file: # Parse the JSON file into a dictionary data = json.load(read_file)

# Find each line with MC_SOUNDS prefix, remove the prefix and keep the rest of the path and the hash sounds = {k[len(MC_SOUNDS):] : v["hash"] for (k,v) in data["objects"].items if k.startswith(MC_SOUNDS)}

for fpath, fhash in sounds.items: # Ensure the paths are good to go for Windows with properly escaped backslashes in the string src_fpath = os.path.normpath(f"{MC_OBJECTS_PATH}/{fhash[:2]}/{fhash}") dest_fpath = os.path.normpath(f"{OUTPUT_PATH}/sounds/{fpath}") print(f"copying {src_fpath} --> {dest_fpath}")

# Make any directories needed to put the output file into as Python expects os.makedirs(os.path.dirname(dest_fpath), exist_ok=True)

# Copy the file shutil.copyfile(src_fpath, dest_fpath)

Extracting Minecraft Music On Windows (via Windows Subsystem for Linux)

 * 1) Create a new file (for example from the terminal): vi minecraft-music-extractor.sh
 * 2) Paste the following into the file: (when you run the file, it'll ask you what your Windows username is and Minecraft version, the rest is automatic, and outputs to the desktop)
 * 3) !/bin/bash
 * 4) Description: Minecraft Music Extractor
 * 1) Description: Minecraft Music Extractor

echo -e "Enter your Windows username:" read winusername echo

USER_DIR="/mnt/c/Users/$winusername"

if [ ! $(ls /mnt/c/Users/ | grep $winusername) ]; then echo -e "Unable to run, you entered an invalid user." echo -e "Make sure you entered everything correctly, spelled right with caps and lower case.\n" read -p "Press [Enter] key to continue..." && exit fi
 * 1) Windows Profile doesn't exist = Can't run

MINECRAFT_ASSETS_DIR="$USER_DIR/AppData/Roaming/.minecraft/assets" OUTPUT_DIR="$USER_DIR/Desktop"

echo -e "Enter the Minecraft version you want to extract from:" read version echo

JSON_FILE=$(echo $MINECRAFT_ASSETS_DIR/indexes/$version.json | grep "/")

if [ ! -f $JSON_FILE ]; then echo -e "Unable to extract because that version isn't downloaded or doesn't exist." echo -e "Make sure to open the launcher and download the version you need to create a pack for.\n" read -p "Press [Enter] key to continue..." && exit fi
 * 1) Version doesn't exist = Can't run


 * 1) for ENTRY in `cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);' | grep music | awk -F\' '{print $2 "," $6}'`
 * 2) cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);'
 * 3) cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);' | grep music

for ENTRY in `cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);' | grep sounds | awk -F\' '{print $2 "," $6}'` do echo "Processing $ENTRY..." echo $ENTRY | cut -d, -f1 FILENAME=`echo $ENTRY | cut -d, -f1` FILEHASH=`echo $ENTRY | cut -d, -f2`

#Locate the file in the assets directory structure FULLPATH_HASHFILE=`find "$MINECRAFT_ASSETS_DIR" -name $FILEHASH`

#Copy the file

mkdir -p $OUTPUT_DIR/`echo $FILENAME | sed -E 's/\/[a-z0-9_]+\..+//'` cp "$FULLPATH_HASHFILE" "$OUTPUT_DIR/$FILENAME"

done


 * 1) Update the variables (e.g. MINECRAFT_ASSETS_DIR) with your correct directory paths
 * 2) If you want all sounds, replace "grep music" with "grep sounds".
 * 3) Run the script from terminal with "bash minecraft-music-extractor.sh".

Extracting Minecraft Music On Linux

 * 1) Create a new file (for example from the terminal): vi minecraft-music-extractor.sh
 * 2) Paste the following into the file: (when you run the file, it'll ask you what Minecraft version, the rest is automatic, and outputs to the desktop)
 * 3) !/bin/bash
 * 4) Description: Minecraft Music Extractor
 * 1) Description: Minecraft Music Extractor

USER_DIR=$(echo ~ | grep "/") MINECRAFT_ASSETS_DIR="$USER_DIR/.minecraft/assets" OUTPUT_DIR="$USER_DIR/Desktop"

echo -e "Enter the Minecraft version you want to extract from:" read version echo

JSON_FILE="$MINECRAFT_ASSETS_DIR/indexes/$version.json"

if [ ! -f $JSON_FILE ]; then echo -e "Unable to extract because that version isn't downloaded or doesn't exist." echo -e "Make sure to open the launcher and download the version you need to create a pack for.\n" read -p "Press [Enter] key to continue..." && exit fi
 * 1) Version doesn't exist = Can't run


 * 1) for ENTRY in `cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);' | grep music | awk -F\' '{print $2 "," $6}'`
 * 2) cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);'
 * 3) cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);' | grep music

for ENTRY in `cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);' | grep sounds | awk -F\' '{print $2 "," $6}'` do echo "Processing $ENTRY..." echo $ENTRY | cut -d, -f1 FILENAME=`echo $ENTRY | cut -d, -f1` FILEHASH=`echo $ENTRY | cut -d, -f2`

#Locate the file in the assets directory structure FULLPATH_HASHFILE=`find "$MINECRAFT_ASSETS_DIR" -name $FILEHASH`

#Copy the file

mkdir -p $OUTPUT_DIR/`echo $FILENAME | sed -E 's/\/[a-z0-9_]+\..+//'` cp "$FULLPATH_HASHFILE" "$OUTPUT_DIR/$FILENAME"

done


 * 1) If you want all sounds, replace "grep music" with "grep sounds".
 * 2) You may need to run `chmod u+x minecraft-music-extractor.sh` if the script isn't executing.
 * 3) Run the script from terminal with "./minecraft-music-extractor.sh".

Extracting Minecraft Music On Mac

 * 1) Create a new file (for example from the terminal): vi minecraft-music-extractor.sh
 * 2) Paste the following into the file:
 * 3) !/bin/sh
 * 4) Description: Minecraft Music Extractor
 * 1) Description: Minecraft Music Extractor

MINECRAFT_ASSETS_DIR="/Users/YOURUSERNAMEHERE/Library/Application Support/minecraft/assets" OUTPUT_DIR="/Users/YOURUSERNAMEHERE/Desktop" JSON_FILE="/Users/YOURUSERNAMEHERE/Library/Application Support/minecraft/assets/indexes/YOURJSON.json"


 * 1) for ENTRY in `cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);' | grep music | awk -F\' '{print $2 "," $6}'`
 * 2) cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);'
 * 3) cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);' | grep music

for ENTRY in `cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);' | grep sounds | awk -F\' '{print $2 "," $6}'` do echo "Processing $ENTRY..." echo $ENTRY | cut -d, -f1 FILENAME=`echo $ENTRY | cut -d, -f1` FILEHASH=`echo $ENTRY | cut -d, -f2`

#Locate the file in the assets directory structure FULLPATH_HASHFILE=`find "$MINECRAFT_ASSETS_DIR" -name $FILEHASH`

#Copy the file

mkdir -p $OUTPUT_DIR/`echo $FILENAME | sed -E 's/\/[a-z0-9_]+\..+//'` cp "$FULLPATH_HASHFILE" "$OUTPUT_DIR/$FILENAME"

done
 * 1) Update the variables (e.g. MINECRAFT_ASSETS_DIR) with your correct directory paths
 * 2) If you want all sounds, replace "grep music" with "grep sounds".
 * 3) Run the script from terminal with "bash minecraft-music-extractor.sh".

Old sound directory (pre-1.7)
If you play the game before 1.7.2, the sound directory is located as follows:


 * Windows:  or
 * macOS:
 * Linux:

If you have played both the old and new versions, then both the old and new directories will exist in the game files. The old directory is only used for pre-1.7 versions.

Legacy sub-folders
In, there are 13 sub folders:


 * : Ambiance and rain/thunder
 * : Sounds of the player taking damage
 * : Breaking blocks
 * : Fire sounds
 * : Fireworks sound effects
 * : Sounds made by liquids such as water and lava
 * : Sounds created by moving minecarts
 * : Mob sounds
 * : Background music by C418
 * : Various sound effects from eating to explosions
 * : Music on the record discs found
 * : Footsteps
 * : Pistons

Warning
If you edit, add, or remove sounds directly in the sound directory, executing the launcher and then launching Minecraft while connected to the Internet will automatically re-download and revert any changes you've made to the sound directory, deleting your work. This applies for both the new and old sound directories. Disconnecting from the Internet before launching the game will not revert the files, but this is not recommended. The best method to safely store custom sounds is to create your own resource pack.

Video tutorials
Minecraft Tutorial: Locate the Minecraft Sound Directory and Convert Audio Files (Old sound directory only)