🇪🇸 Español (Spanish)
🇪🇸 Español (Spanish)
Appearance
🇪🇸 Español (Spanish)
🇪🇸 Español (Spanish)
Appearance
This page is written for version:
1.20.4
This page is written for version:
1.20.4
Tus archivos de sonido tienen que estar formateados de una manera específica. OGG Vorbis es un formato de contenedor abierto para datos multimedia, como audio, y es usado para los archivos de sonido de Minecraft. Para evitar problemas con la manera en que Minecraft maneja el distanciamiento, tu audio tiene que tener solo un canal (Mono).
Muchos software de DAWs (Estaciones de Trabajo de Audio Digitales) modernos pueden importar y exportar usando este formato de archivo. En el siguiente ejemplo el software gratuito y de fuente abierta "Audacity" será usado para traer el archivo de sonido al formato correcto, aunque cualquier otro DAW debería ser suficiente también.
En este ejemplo, un sonido de un silbido es importado a Audacity. Actualmente está guardado como un archivo ".wav" y tiene dos canales de audio (Stereo). Edita el sonido a tu gusto y asegúrate de eliminar uno de los canales usando el menú desplegable encima del "track head" (cabeza de pista).
Al exportar o renderizar el archivo de audio, asegúrate de elegir el formato de archivo OGG. Algunos DAWs, como REAPER, pueden soportar múltiples capas de audio de OGG. En este caso, OGG Vorbis debería funcionar bien.
También ten en cuenta que los archivos de audio pueden aumentar el tamaño de tu mod drásticamente. Si es necesario, comprime el audio cuando lo edites y exportes el archivo para mantener el tamaño de tu producto final a un mínimo.
Agrega un nuevo folder resources/assets/<mod id here>/sounds
para los sonidos en tu mod, y pon el archivo de audio exportado metal_whistle.ogg
ahí.
Continúa creando el archivo resources/assets/<mod id here>/sounds.json
si no existe todavía y agrega tu sonido a las entradas de sonido.
{
"metal_whistle": {
"subtitle": "sound.fabric-docs-reference.metal_whistle",
"sounds": ["fabric-docs-reference:metal_whistle"]
}
}
La entrada de subtítulo provee más contexto para el jugador. El nombre del subtítulo es usado en los archivos de lenguaje en el folder de resources/assets/<mod id here>/lang
y serán mostrados si la opción de subtítulos en el juego es activada y el sonido personalizado está siendo reproducido.
Para agregar el sonido personalizado al mod, registra un SoundEvent (Evento de Sonido) en la clase que implemente la interfaz ModInitializer
.
Registry.register(Registries.SOUND_EVENT, new Identifier(MOD_ID, "metal_whistle"),
SoundEvent.of(new Identifier(MOD_ID, "metal_whistle")));
Dependiendo de cuantas entradas de Registro hayan, las cosas pueden enredarse rápidamente. Para evitar eso, podemos hacer uso de una nueva clase ayudante.
Agrega dos nuevos métodos a la nueva clase ayudante creada. Uno, que registre todos los sonidos y uno que es usado para inicializar esta clase en primer lugar. Después de eso, puedes agregar nuevos miembros estáticos de SoundEvent
cómodamente como sea necesario.
public class CustomSounds {
private CustomSounds() {
// private empty constructor to avoid accidental instantiation
}
// ITEM_METAL_WHISTLE is the name of the custom sound event
// and is called in the mod to use the custom sound
public static final SoundEvent ITEM_METAL_WHISTLE = registerSound("metal_whistle");
// actual registration of all the custom SoundEvents
private static SoundEvent registerSound(String id) {
Identifier identifier = Identifier.of(FabricDocsReferenceSounds.MOD_ID, id);
return Registry.register(Registries.SOUND_EVENT, identifier, SoundEvent.of(identifier));
}
// This static method starts class initialization, which then initializes
// the static class variables (e.g. ITEM_METAL_WHISTLE).
public static void initialize() {
FabricDocsReferenceSounds.LOGGER.info("Registering " + FabricDocsReferenceSounds.MOD_ID + " Sounds");
// Technically this method can stay empty, but some developers like to notify
// the console, that certain parts of the mod have been successfully initialized
}
}
De esta manera, la clase implementadora de ModInitializer
solo tiene que implementar una línea para registrar todos los SoundEvents personalizados.
public class FabricDocsReferenceSounds implements ModInitializer {
public static final String MOD_ID = FabricDocsReference.MOD_ID;
public static final Logger LOGGER = FabricDocsReference.LOGGER;
@Override
public void onInitialize() {
// This is the basic registering. Use a new class for registering sounds
// instead, to keep the ModInitializer implementing class clean!
Registry.register(Registries.SOUND_EVENT, Identifier.of(MOD_ID, "metal_whistle"),
SoundEvent.of(Identifier.of(MOD_ID, "metal_whistle")));
// ... the cleaner approach.
// CustomSounds.initialize();
}
}
Use la clase ayudante para acceder el SoundEvent personalizado. Echa un vistazo a la página de Reproducir SoundEvents (Eventos de Sonido) para aprender a reproducir sonidos.