🇷🇺 Русский (Russian)
🇷🇺 Русский (Russian)
Внешний вид
🇷🇺 Русский (Russian)
🇷🇺 Русский (Russian)
Внешний вид
This page is written for:
1.21
This page is written for:
1.21
Нужно отформатировать ваш аудиофайл определённым образом. OGG Vorbis - это открытый формат для мультимедийных данных, например аудио, и используется в качестве звуковых файлов Minecraft. Чтобы избежать проблем с тем, как Minecraft обрабатывает дистанцию, вашему аудио нужно иметь только один канал (Mono).
Многие современные программы ЦЗРС (Цифровая звуковая рабочая станция) могут импортировать и экспортировать файлы этого формата. В следующем примере для приведения файла в правильный формат будет использован "Audacity", или любая другая ЦЗРС программа.
В этом примере звук свисток был импортирован в Audacity. Обычно он сохраняется как файл .wav
и имеет два аудио канала (Stereo). Отредактируйте звук по своему вкусу и удалите один из каналов, используя раскрывающийся элемент наверху "track head".
Когда вы экспортируете или рендерите аудиофайл, выберите формат файла OGG. Некоторые ЦЗРС, например REAPER, могут поддерживать несколько форматов слоёв OGG. В этом случае OGG Vorbis должен работать нормально.
Также имейте в виду, что аудиофайлы могут значительно увеличить размер вашего мода. При необходимости сожмите звук, когда редактируйте и экспортируйте файл, чтобы свести размер файла к минимуму.
Добавьте новую директорию resources/assets/<mod id here>/sounds
для звуков в вашем моду, и положите в неё экспортированный аудиофайл metal_whistle.ogg
.
Дальше создайте файл resources/assets/<mod id here>/sounds.json
, если он не существует и добавьте ваш звук в звуковые записи.
{
"metal_whistle": {
"subtitle": "sound.fabric-docs-reference.metal_whistle",
"sounds": [
"fabric-docs-reference:metal_whistle"
]
}
}
Запись подписи предоставляет больше контекста для игрока. Название подписи используется в языковых файлах в директории resources/assets/<mod id here>/lang
и будет показываться, если включена настройка и звук воспроизводиться.
Чтобы добавить собственный звук в мод, зарегистрируете в классе SoundEvent, который имплементирует точку входа ModInitializer
.
Registry.register(Registries.SOUND_EVENT, Identifier.of(MOD_ID, "metal_whistle"),
SoundEvent.of(Identifier.of(MOD_ID, "metal_whistle")));
В зависимости насколько много записей реестра находится, это может превратиться в беспорядок. Чтобы обойти это, мы должны сделать использование нового класса помощника.
Добавьте два новых метода для ранее созданного класса помощника. Первый регистрирует все звуки и используется для инициализации этого класса на первом месте. После этого вы можете добавить в новый статический класс SoundEvent
нужные переменные.
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
}
}
ModInitializer
имплементируют точки входа которые нужны классу, чтобы имплементировать весь реестр с собственными SoundEvents.
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();
}
}
Используйте класс помощник для доступа к собственному SoundEvent. Просмотрите страницу Воспроизводящиеся SoundEvent'ы, чтобы научиться как воспроизводить звуки.