![]() |
VOOZH | about |
This tutorial will help you locate and extract the sound directory, where the sounds and music for Java Edition are stored.
In Bedrock Edition, music and ambience files are not obfuscated and can be found directly at Content\data\resource_packs\vanilla_music\sounds.
The sound file for versions after 1.7.2 is located in the indexes directory:
1.8 macOS: ~/Library/Application Support/minecraft/assets/indexes/1.8.json
1.11 macOS: ~/Library/Application Support/minecraft/assets/indexes/1.11.json
The sound files in version 1.7.2 (specifically 13w42a) and above are scattered and hashed into different folders, which are located in:
%AppData%\.minecraft\assets\objects~/Library/Application Support/minecraft/assets/objects~/.minecraft/assets/objectsFind 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 menu1.ogg is hashed (or labeled) as c157c56846f0e50620f808fecd9d069423dd6c41. 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 a 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.)
This is probably the simplest way to extract the sound files with original effections.
constfs=require('fs-extra') constobjects=require('./indexes/1.19.json').objects for(letfilePathinobjects){ if(!/\/(?:sounds)\//.test(filePath))continue if(!/\/(?:ambient|block|damage|dig|enchant|entity|event|fire|fireworks|item|liquid|minecart|mob|music|note|portal|random|records|step|title|ui)\//.test(filePath))continue letcopyPath=filePath.replace('minecraft/','./') lethash=objects[filePath].hash letobjectPath='./objects/'+hash.substring(0,2)+'/'+hash console.log(objectPath,'->',copyPath) fs.copySync(objectPath,copyPath) }
@echo off npm install fs-extra -y node extract-music.js pause
.minecraft/assets called extract-music.js and paste the first script into it..minecraft/assets called Extract.bat and paste the second script into it.Extract.bat file. It will create a new sounds folder with all the sounds in it.extract-music.js file and on the 3rd line, change 1.19.json to any version you want (you need to have actually played the version at least once).1.19.json or 1.19.2 index naming moves away from Minecraft version numbers. Below are <version>.json file names with the new format. For future versions not listed, you can test for them by making a backup of the "indexes" folder from .minecraft/assets/indexes. Then erase all files inside the "indexes" folder and play your desired Minecraft version. The <version>.json for that Minecraft version should be the only one.
Extract.bat, open the file again and remove line 2 entirely and run Extract.bat again.Make sure the file extensions are .js and .bat and not .txt when you rename it! In other words, remove your old file extension. You may be warned that changing a file name extension could make the file unusable. However, this actually indicates that you have renamed it correctly. It will work if you keep it .txt as example, but it's probably nicer to have it for what it is for.
If you are using Microsoft Windows and can't see file extensions, for Windows 10, you can turn them on by going to the View menu of the file explorer and checking the check box for file name extensions. For Windows beneath Windows 10, you can uncheck "hide extensions."
This method may be by far the most simple and requires no third-party application, but may require admin permission on your computer to pull off. The instructions listed below apply to Windows systems only.
importjson,os,platform,shutil,sys ''' Copies audio files from indescript hashed folders to named sorted folders. You may need to change output path. ''' deflatest_version(directory_ls: list[str]): defis_newer(v_old: str, v_new: str) -> bool: v_old, v_new = v_old.strip(".json"), v_new.strip(".json") if v_new == "pre-1.6": return False if v_old == "pre-1.6": return True # Handle 1.20+ json files if v_new.isdigit(): v_new += '0' if v_old.isdigit(): v_old += '0' return float(v_new) > float(v_old) latest = directory_ls[-1] for f in directory_ls: if is_newer(latest, f): latest = f return latest # This section should work on any system as well print("Your OS is " + platform.system()) if platform.system() == "Windows": MC_ASSETS = os.path.expandvars(r"%APPDATA%/.minecraft/assets") elif platform.system() == "Darwin": # macOS MC_ASSETS = os.path.expanduser(r"~/Library/Application Support/minecraft/assets") else: MC_ASSETS = os.path.expanduser(r"~/.minecraft/assets") # Find the latest json index file MC_VERSION = latest_version(os.listdir(MC_ASSETS+"/indexes/")) print("The latest found index.json file is " + MC_VERSION + "\n") # Change this if you want to put the sound files somewhere else OUTPUT_PATH = os.path.normpath(os.path.expandvars(os.path.expanduser(f"~/Desktop/MC_Sounds/"))) # These are unlikely to change MC_OBJECT_INDEX = f"{MC_ASSETS}/indexes/{MC_VERSION}" MC_OBJECTS_PATH = f"{MC_ASSETS}/objects" MC_SOUNDS = "minecraft/sounds/" 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 files = {k : v["hash"] for (k, v) in data["objects"].items() if k.startswith(MC_SOUNDS)} # # Uncomment to extract all files. # files = {k : v["hash"] for (k, v) in data["objects"].items()} print("File extraction:") for fpath, fhash in files.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}/{fpath}") # Print current extracted file print(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)
#!/bin/bash # # Description: Minecraft Music Extractor echo-e"Enter your Windows username:" readwinusername echo USER_DIR="/mnt/c/Users/$winusername" # Windows Profile doesn't exist = Can't run 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 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:" readversion echo JSON_FILE=$(echo$MINECRAFT_ASSETS_DIR/indexes/$version.json|grep"/") # Version doesn't exist = Can't run 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 # 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}'` # cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);' # cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);' | grep sounds # cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);' | grep records forENTRYin`cat"$JSON_FILE"|python-c'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);'|grepmusic|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
Alternatively, update USER_DIR to be "C:/Users/$winusername", then install Git for Windows, and open minecraft-music-extractor.sh directly. This, like the Python script, doesn't require WSL.
#!/bin/bash # # 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:" readversion echo JSON_FILE="$MINECRAFT_ASSETS_DIR/indexes/$version.json" # Version doesn't exist = Can't run if[!-f$JSON_FILE];then echo-e"Unable to extract because that version isn't downloaded or doesn't exist without orgins." 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 #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}'` #cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);' #cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);' | grep music forENTRYin`cat"$JSON_FILE"|python-c'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);'|grepsounds|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
#!/bin/sh # # 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" #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}'` #cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);' #cat "$JSON_FILE" | python -c 'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);' | grep music forENTRYin`cat"$JSON_FILE"|python-c'import sys,json; from pprint import pprint; data = json.load(sys.stdin); pprint(data);'|grepmusic|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
If you play the game before 1.7.2, the sound directory is located as follows:
%AppData%\.minecraft\assets or %AppData%\.minecraft\assets\virtual\legacy~/Library/Application Support/minecraft/assets~/.minecraft/assetsIf 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.
In .minecraft\assets\virtual\legacy\sounds, there are 13 sub folders:
ambient: Ambiance and rain/thunderdamage: Sounds of the player taking damagedig: Breaking blocksfire: Fire soundsfirework: Fireworks sound effectsliquids: Sounds made by liquids such as water and lavaminecart: Sounds created by moving minecartsmob: Mob soundsmusic: Background music by C418random: Various sound effects from eating to explosionsrecords: Music on the record discs foundstep: Footstepstile: PistonsIf 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.
Minecraft Tutorial: Locate the Minecraft Sound Directory and Convert Audio Files (Old sound directory only)