The volume parameter in sounds.json sets the maximum distance from the player at which sounds can be heard. The distance in blocks is 16 * volume. Many vanilla sounds have volume values < 1, which means that those sounds should play only within a few blocks of the player. However, all sounds with volume < 1 can be heard up to 16 blocks away (unless they also have a max_distance set in sound_definitions.json).
Steps to reproduce
Import
. This world has test setups for piston, dropper, fire extinguishing, and block hitting sounds.
Import
. This pack sets the
volumefor block click sounds to 0.5. This should affect the dropper activation sound.Activate the pack on the world and open the world.
Turn up your device volume.
Stand on each lever and flip it.
Have a second player join the world.
Stand at various distances from the the fire and the netherrack while the other player extinguishes the fire and hits the netherrack.
Expected results
The piston, droppers, and fire extinguishing would be heard only from <= 8 blocks away because they have "volume" : 0.5, and the netherrack hits from <= 3.5 blocks away because it has "volume" : 0.22.
Observed results
All of these sounds can be heard from 16 blocks away.
This bug report is incorrect; the sound engine is working as intended. Volume works in a unique way in Minecraft:
When above 1.0, the volume is fed to the sound engine as a multiplier on attenuation distance. This prevents volumes above 1.0 from destroying eardrums—they still play at 1.0 volume, but can be heard farther away. This can be overwritten entirely by the max_distance property on Bedrock.
When below 1.0, the volume is fed to the sound engine as a scalar on the actual volume of the sound. This is how you can get quiet sounds in the game, like walking on blocks, while still hearing players walk from 16 blocks away. The only way to get an attenuation distance lower than 16 blocks (the default) is to use max_distance.
Here is a post on Twitter from Alexander Torstling, a developer on the game, explaining the system: https://twitter.com/atorstling/status/1747023092428238851
TLDR: The current Bedrock system is correct and works as intended. You must use max_distance to achieve what you want to do, not volume.