Skip to content

Creare Suoni Personalizzati

Preparare il file audio

I tuoi file audio devono essere formattati in un modo specifico. OGG Vorbis è un formato container aperto per dati multimediali, tra cui audio, e viene usato per i file audio di Minecraft. Per evitare problemi nel modo in cui Minecraft gestisce le distanze, il tuo audio deve essere solo su un singolo canale (Mono).

Molti software DAW (Digital Audio Workstation) odierni riescono a importare ed esportare utilizzando questo formato. Nell'esempio seguente il software open-source gratuito "Audacity" sarà usato per portare i file audio al formato corretto, tuttavia qualunque altro DAW sarà più che sufficiente.

file audio non preparato in Audacity

In questo esempio, il suono di un fischio viene importato in Audacity. Attualmente questo è salvato come file .wav e ha due canali audio (Stereo). Modifica il suono come preferisci e assicurati di cancellare uno dei canali utilizzando il menu a tendina in cima alla "testina".

separare traccia Stereo

eliminare uno dei canali

Quando devi esportare o renderizzare un file audio, assicurati di scegliere il formato del file OGG. Alcuni DAW, come REAPER, potrebbero supportare formati audio OGG a più strati. In questo caso OGG Vorbis dovrebbe funzionare senza problemi.

esportazione come file OGG

Inoltre tieni a mente che un file audio può aumentare drasticamente le dimensioni del file della tua mod. Se necessario, comprimi l'audio quando stai modificando ed esportando il file, per mantenere le sue dimensioni al minimo.

Caricare il File Audio

Aggiungi un nuovo percorso resources/assets/<mod id here>/sounds per i suoni della tua mod, e trasferisci qui il file audio esportato metal_whistle.ogg.

Se non esiste ancora, crea il file resources/assets/<mod id here>/sounds.json e aggiungici i tuoi suoni.

json
{
    "metal_whistle": {
      "subtitle": "sound.fabric-docs-reference.metal_whistle",
      "sounds": [
        "fabric-docs-reference:metal_whistle"
      ]
    }
  }

La voce subtitle fornisce un contesto più approfondito per il giocatore. Il nome del sottotitolo è utilizzato nei file di lingua nel percorso resources/assets/<mod id here>/lang e verrà visualizzato se l'impostazione dei sottotitoli nel gioco è attiva e se questo suono personalizzato viene riprodotto.

Registrare il Suono Personalizzato

Per aggiungere il suono personalizzato alla mod, registra un SoundEvent nella classe che implementa l'entrypoint ModInitializer.

java
Registry.register(Registries.SOUND_EVENT, new Identifier(MOD_ID, "metal_whistle"),
        SoundEvent.of(new Identifier(MOD_ID, "metal_whistle")));

Ripulire il Disordine

A seconda di quante voci ci sono nella Registry, le cose potrebbero presto sfuggire di mano. Per evitare che ciò accada, possiamo fare uso di una nuova classe di supporto.

Aggiungi due nuovi metodi alla classe di supporto appena creata. Uno che registra tutti i suoni, e uno che viene utilizzato per inizializzare questa classe in primo luogo. Dopo di che, puoi comodamente aggiungere nuovi attributi SoundEvent statici personalizzati a seconda delle necessità.

java
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) {
		SoundEvent sound = SoundEvent.of(new Identifier(FabricDocsReferenceSounds.MOD_ID, id));
		return Registry.register(Registries.SOUND_EVENT, new Identifier(FabricDocsReferenceSounds.MOD_ID, id), sound);
	}

	// 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
	}
}

Facendo così, la classe entrypoint che implementa ModInitializer deve solo implementare una riga per registrare tutti i SoundEvent personalizzati.

java
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, new Identifier(MOD_ID, "metal_whistle"),
				SoundEvent.of(new Identifier(MOD_ID, "metal_whistle")));

		// ... the cleaner approach.
		CustomSounds.initialize(); 
		FabricDocsReferenceItems.initialize(); 
	}
}

Usare il SoundEvent Personalizzato

Utilizza la classe di supporto per accedere al SoundEvent personalizzato. Consulta la pagina Riprodurre i SoundEvents per imparare come riprodurre i suoni.