Часть функционала RTXSound | EXP 2.0

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
22 Фев 2023
Сообщения
21
Реакции
0
Выберите загрузчик игры
  1. ForgeOptiFine

Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:

  • бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
  • маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
  • приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
  • обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.

Спасибо!

:catjam:
RTXSound:
Expand Collapse Copy
package fun.anfyence.features.impl.util;

import fun.anfyence.events.Event;
import fun.anfyence.features.api.Category;
import fun.anfyence.features.api.Feature;
import fun.anfyence.features.api.FeatureInfo;
import fun.anfyence.features.settings.impl.BooleanSetting;
import fun.anfyence.features.settings.impl.ModeSetting;
import net.minecraft.client.audio.ISound;
import net.minecraft.util.ResourceLocation;
import net.minecraft.client.audio.Sound;
import net.minecraft.client.audio.SoundEventAccessor;
import net.minecraft.client.audio.SoundHandler;
import net.minecraft.util.SoundCategory;

import javax.annotation.Nullable;

@FeatureInfo(
        name = "RTXSound",
        desc = "Меняет обработку звука, добавляя 3D-эффекты и улучшение качества.",
        category = Category.Util
)
public class RTXSound extends Feature {

    private final ModeSetting performancePriority =
            new ModeSetting("Приоритет качества", "Производительность", "Качество звука");

    private final BooleanSetting betterStereo = new BooleanSetting("Эмуляция 3D стерео", true);
    private final BooleanSetting toneCompense = new BooleanSetting("Тон-компенсация", true);
    protected boolean enabled;
    public RTXSound() {
        addSettings(performancePriority, betterStereo, toneCompense);
        performancePriority.set("Качество звука");
    }

    @Override
    public boolean onEvent(Event event) {
        return false;
    }

    public ISound processSound(ISound original) {
        float volume = original.getVolume();
        float pitch = original.getPitch();

        if (performancePriority.is("Качество звука")) {
            volume *= 1.2f;
        } else {
            volume *= 0.9f;
        }

        float pan = 0;
        if (betterStereo.get() && mc.player != null) {
            // простая имитация стерео: чередуем смещение влево/вправо
            pan = mc.player.ticksExisted % 2 == 0 ? -0.15f : 0.15f;
        }

        if (toneCompense.get()) {
            pitch *= 1.05f;
        }

        return new ProcessedSound(original, volume, pitch, pan);
    }

    public boolean isEnabled() {
        return this.enabled;
    }


    private static class ProcessedSound implements ISound {
        private final ISound original;
        private final float volume, pitch, pan;

        public ProcessedSound(ISound original, float volume, float pitch, float pan) {
            this.original = original;
            this.volume = volume;
            this.pitch = pitch;
            this.pan = pan;
        }

        @Override
        public ResourceLocation getSoundLocation() {
            return original.getSoundLocation();
        }

        @Nullable
        @Override
        public SoundEventAccessor createAccessor(SoundHandler handler) {
            return original.createAccessor(handler);
        }

        @Override
        public Sound getSound() {
            return original.getSound();
        }

        @Override
        public SoundCategory getCategory() {
            return original.getCategory();
        }

        @Override
        public boolean canRepeat() {
            return original.canRepeat();
        }

        @Override
        public boolean isGlobal() {
            return original.isGlobal();
        }

        @Override
        public int getRepeatDelay() {
            return original.getRepeatDelay();
        }

        @Override
        public float getVolume() {
            return volume;
        }

        @Override
        public float getPitch() {
            return pitch;
        }

        @Override
        public double getX() {
            return original.getX() + pan;
        }

        @Override
        public double getY() {
            return original.getY();
        }

        @Override
        public double getZ() {
            return original.getZ();
        }

        @Override
        public AttenuationType getAttenuationType() {
            return original.getAttenuationType();
        }
    }
}
MixinSoundEngine:
Expand Collapse Copy
package fun.anfyence.features.Mixin;

import fun.anfyence.features.api.FeatureManager;
import fun.anfyence.features.impl.util.RTXSound;
import net.minecraft.client.audio.ISound;
import net.minecraft.client.audio.SoundEngine;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(SoundEngine.class)
public class MixinSoundEngine {
    @Inject(method = "play", at = @At("HEAD"), cancellable = true)
    private void injectPlay(ISound sound, CallbackInfo ci) {
        RTXSound rtx = FeatureManager.get(RTXSound.class);
        if (rtx != null && rtx.isEnabled()) {
            ISound processed = rtx.processSound(sound);
            ((SoundEngine)(Object) this).play(processed);
            ci.cancel();
        }
    }
}
я хз нахуя вам миксин, но держите на верника
 
сама функция может и хорошая ,но название:summyrose:
 
:catjam:
RTXSound:
Expand Collapse Copy
package fun.anfyence.features.impl.util;

import fun.anfyence.events.Event;
import fun.anfyence.features.api.Category;
import fun.anfyence.features.api.Feature;
import fun.anfyence.features.api.FeatureInfo;
import fun.anfyence.features.settings.impl.BooleanSetting;
import fun.anfyence.features.settings.impl.ModeSetting;
import net.minecraft.client.audio.ISound;
import net.minecraft.util.ResourceLocation;
import net.minecraft.client.audio.Sound;
import net.minecraft.client.audio.SoundEventAccessor;
import net.minecraft.client.audio.SoundHandler;
import net.minecraft.util.SoundCategory;

import javax.annotation.Nullable;

@FeatureInfo(
        name = "RTXSound",
        desc = "Меняет обработку звука, добавляя 3D-эффекты и улучшение качества.",
        category = Category.Util
)
public class RTXSound extends Feature {

    private final ModeSetting performancePriority =
            new ModeSetting("Приоритет качества", "Производительность", "Качество звука");

    private final BooleanSetting betterStereo = new BooleanSetting("Эмуляция 3D стерео", true);
    private final BooleanSetting toneCompense = new BooleanSetting("Тон-компенсация", true);
    protected boolean enabled;
    public RTXSound() {
        addSettings(performancePriority, betterStereo, toneCompense);
        performancePriority.set("Качество звука");
    }

    @Override
    public boolean onEvent(Event event) {
        return false;
    }

    public ISound processSound(ISound original) {
        float volume = original.getVolume();
        float pitch = original.getPitch();

        if (performancePriority.is("Качество звука")) {
            volume *= 1.2f;
        } else {
            volume *= 0.9f;
        }

        float pan = 0;
        if (betterStereo.get() && mc.player != null) {
            // простая имитация стерео: чередуем смещение влево/вправо
            pan = mc.player.ticksExisted % 2 == 0 ? -0.15f : 0.15f;
        }

        if (toneCompense.get()) {
            pitch *= 1.05f;
        }

        return new ProcessedSound(original, volume, pitch, pan);
    }

    public boolean isEnabled() {
        return this.enabled;
    }


    private static class ProcessedSound implements ISound {
        private final ISound original;
        private final float volume, pitch, pan;

        public ProcessedSound(ISound original, float volume, float pitch, float pan) {
            this.original = original;
            this.volume = volume;
            this.pitch = pitch;
            this.pan = pan;
        }

        @Override
        public ResourceLocation getSoundLocation() {
            return original.getSoundLocation();
        }

        @Nullable
        @Override
        public SoundEventAccessor createAccessor(SoundHandler handler) {
            return original.createAccessor(handler);
        }

        @Override
        public Sound getSound() {
            return original.getSound();
        }

        @Override
        public SoundCategory getCategory() {
            return original.getCategory();
        }

        @Override
        public boolean canRepeat() {
            return original.canRepeat();
        }

        @Override
        public boolean isGlobal() {
            return original.isGlobal();
        }

        @Override
        public int getRepeatDelay() {
            return original.getRepeatDelay();
        }

        @Override
        public float getVolume() {
            return volume;
        }

        @Override
        public float getPitch() {
            return pitch;
        }

        @Override
        public double getX() {
            return original.getX() + pan;
        }

        @Override
        public double getY() {
            return original.getY();
        }

        @Override
        public double getZ() {
            return original.getZ();
        }

        @Override
        public AttenuationType getAttenuationType() {
            return original.getAttenuationType();
        }
    }
}
MixinSoundEngine:
Expand Collapse Copy
package fun.anfyence.features.Mixin;

import fun.anfyence.features.api.FeatureManager;
import fun.anfyence.features.impl.util.RTXSound;
import net.minecraft.client.audio.ISound;
import net.minecraft.client.audio.SoundEngine;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(SoundEngine.class)
public class MixinSoundEngine {
    @Inject(method = "play", at = @At("HEAD"), cancellable = true)
    private void injectPlay(ISound sound, CallbackInfo ci) {
        RTXSound rtx = FeatureManager.get(RTXSound.class);
        if (rtx != null && rtx.isEnabled()) {
            ISound processed = rtx.processSound(sound);
            ((SoundEngine)(Object) this).play(processed);
            ci.cancel();
        }
    }
}
я хз нахуя вам миксин, но держите на верника
мм спастил с Relake
 
а миксины в 2 0 были?, мне просто интересно
 
:catjam:
RTXSound:
Expand Collapse Copy
package fun.anfyence.features.impl.util;

import fun.anfyence.events.Event;
import fun.anfyence.features.api.Category;
import fun.anfyence.features.api.Feature;
import fun.anfyence.features.api.FeatureInfo;
import fun.anfyence.features.settings.impl.BooleanSetting;
import fun.anfyence.features.settings.impl.ModeSetting;
import net.minecraft.client.audio.ISound;
import net.minecraft.util.ResourceLocation;
import net.minecraft.client.audio.Sound;
import net.minecraft.client.audio.SoundEventAccessor;
import net.minecraft.client.audio.SoundHandler;
import net.minecraft.util.SoundCategory;

import javax.annotation.Nullable;

@FeatureInfo(
        name = "RTXSound",
        desc = "Меняет обработку звука, добавляя 3D-эффекты и улучшение качества.",
        category = Category.Util
)
public class RTXSound extends Feature {

    private final ModeSetting performancePriority =
            new ModeSetting("Приоритет качества", "Производительность", "Качество звука");

    private final BooleanSetting betterStereo = new BooleanSetting("Эмуляция 3D стерео", true);
    private final BooleanSetting toneCompense = new BooleanSetting("Тон-компенсация", true);
    protected boolean enabled;
    public RTXSound() {
        addSettings(performancePriority, betterStereo, toneCompense);
        performancePriority.set("Качество звука");
    }

    @Override
    public boolean onEvent(Event event) {
        return false;
    }

    public ISound processSound(ISound original) {
        float volume = original.getVolume();
        float pitch = original.getPitch();

        if (performancePriority.is("Качество звука")) {
            volume *= 1.2f;
        } else {
            volume *= 0.9f;
        }

        float pan = 0;
        if (betterStereo.get() && mc.player != null) {
            // простая имитация стерео: чередуем смещение влево/вправо
            pan = mc.player.ticksExisted % 2 == 0 ? -0.15f : 0.15f;
        }

        if (toneCompense.get()) {
            pitch *= 1.05f;
        }

        return new ProcessedSound(original, volume, pitch, pan);
    }

    public boolean isEnabled() {
        return this.enabled;
    }


    private static class ProcessedSound implements ISound {
        private final ISound original;
        private final float volume, pitch, pan;

        public ProcessedSound(ISound original, float volume, float pitch, float pan) {
            this.original = original;
            this.volume = volume;
            this.pitch = pitch;
            this.pan = pan;
        }

        @Override
        public ResourceLocation getSoundLocation() {
            return original.getSoundLocation();
        }

        @Nullable
        @Override
        public SoundEventAccessor createAccessor(SoundHandler handler) {
            return original.createAccessor(handler);
        }

        @Override
        public Sound getSound() {
            return original.getSound();
        }

        @Override
        public SoundCategory getCategory() {
            return original.getCategory();
        }

        @Override
        public boolean canRepeat() {
            return original.canRepeat();
        }

        @Override
        public boolean isGlobal() {
            return original.isGlobal();
        }

        @Override
        public int getRepeatDelay() {
            return original.getRepeatDelay();
        }

        @Override
        public float getVolume() {
            return volume;
        }

        @Override
        public float getPitch() {
            return pitch;
        }

        @Override
        public double getX() {
            return original.getX() + pan;
        }

        @Override
        public double getY() {
            return original.getY();
        }

        @Override
        public double getZ() {
            return original.getZ();
        }

        @Override
        public AttenuationType getAttenuationType() {
            return original.getAttenuationType();
        }
    }
}
MixinSoundEngine:
Expand Collapse Copy
package fun.anfyence.features.Mixin;

import fun.anfyence.features.api.FeatureManager;
import fun.anfyence.features.impl.util.RTXSound;
import net.minecraft.client.audio.ISound;
import net.minecraft.client.audio.SoundEngine;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(SoundEngine.class)
public class MixinSoundEngine {
    @Inject(method = "play", at = @At("HEAD"), cancellable = true)
    private void injectPlay(ISound sound, CallbackInfo ci) {
        RTXSound rtx = FeatureManager.get(RTXSound.class);
        if (rtx != null && rtx.isEnabled()) {
            ISound processed = rtx.processSound(sound);
            ((SoundEngine)(Object) this).play(processed);
            ci.cancel();
        }
    }
}
я хз нахуя вам миксин, но держите на верника
мне интересно когда миксины появились на экспе
 
как саунд может быть rtx?
 
При чем тут имитация стерео? Кубач итак выводит звуки в стерео с паннингом для примитивного "3д эффекта", понимаю если-б ты это еще как на ютубе обозвал бы 8D Audio, но RTX Sound... сильно, ппц конечно
Для полноты картины нужно было трек Павла воли "барвиха" включить где он орал бы то в одно ухо, то в другое - где какое ухо :kappa:

А если серьёзно, с OpenAL работать больно, захочется звука получше - попробуй сделать HRTF, где одним миксином уже вряд-ли обойдешься
 

Похожие темы

Назад
Сверху Снизу