From 35e81b1b7d4757a4d134dbb184f06ca342b0171a Mon Sep 17 00:00:00 2001 From: GiantLuigi4 <49770992+GiantLuigi4@users.noreply.github.com> Date: Sun, 20 Oct 2024 18:34:29 -0400 Subject: [PATCH] janky and wip audio stuff; getting closer to having it work properly --- libs/mcef-forge-2.1.5-1.20.1.jar | Bin 218763 -> 219366 bytes .../wd/client/audio/WDAudioHandler.java | 2 +- .../wd/client/audio/WDAudioStream.java | 57 ++++++++++++++---- .../client/audio/WDExtendedAudioStream.java | 23 +++++++ .../wd/mixins/audio/AudioChannelMixin.java | 48 +++++++++++++++ .../wd/mixins/audio/AudioStreamMixin.java | 9 +++ src/main/resources/webdisplays.mixins.json | 4 +- 7 files changed, 130 insertions(+), 13 deletions(-) create mode 100644 src/main/java/net/montoyo/wd/client/audio/WDExtendedAudioStream.java create mode 100644 src/main/java/net/montoyo/wd/mixins/audio/AudioChannelMixin.java create mode 100644 src/main/java/net/montoyo/wd/mixins/audio/AudioStreamMixin.java diff --git a/libs/mcef-forge-2.1.5-1.20.1.jar b/libs/mcef-forge-2.1.5-1.20.1.jar index e2bb30f4be007c0d397f258652afeef5ad3e00fa..94acb64d9f9adde2b2bc5a65dfa17f6c5f8441af 100644 GIT binary patch delta 31526 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 delta 30948 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 gZq?l8yKQrXkAv-8I1FjDF8G&sIgPfN4 buffers = new ArrayDeque<>(); - public void setData(long data) { -// DataPointer ptr = data.forCapacity(currentFormat.getChannels() << 3); -// ptr.setAlignment(3); - long baseAddr = data; + public void setData(DataPointer data) { + int cap = fpb; + DataPointer ptr = data + .forCapacity(currentFormat.getChannels() << 3) + .withAlignment(3); + for (int i = 0; i < 1; i++) { - long addr = MemoryUtil.memGetLong(baseAddr + (i << 3)); - int cap = fpb; + DataPointer subPtr = ptr.getData(i) + .withAlignment(2) + .forCapacity(cap << 2); + float[] flts = new float[cap]; - for (int i1 = 0; i1 < cap; i1++) { - flts[i1] = MemoryUtil.memGetFloat(addr + (i1 << 2)); - } + for (int i1 = 0; i1 < cap; i1++) + flts[i1] = subPtr.getFloat(i1); + buffers.add(flts); } } + boolean checking = false; + @Override public ByteBuffer read(int pSize) throws IOException { System.out.println(buffers.size()); + int sz = 2048 * buffers.size(); + if (sz < 2048) sz = 4096; + pSize = sz; ByteBuffer buffer = ByteBuffer.allocateDirect(pSize); if (!buffers.isEmpty()) { final int MAX_16_BIT = 32767; final int MIN_16_BIT = -32768; + int i0 = 0; loopBufs: while (true) { if (!buffers.isEmpty()) { for (float v : buffers.pop()) { if (buffer.position() >= pSize) break loopBufs; -// buffer.putFloat(v); // Scale and clip the float value to the range of a signed 16-bit int float floatSample = v; @@ -93,9 +103,11 @@ public class WDAudioStream implements AudioStream { buffer.put((byte) (intSample & 0xFF)); buffer.put((byte) ((intSample >> 8) & 0xFF)); } + i0++; } else break; } buffer.position(0); + System.out.println("Consumed " + i0 + " buffers"); } return buffer; } @@ -103,4 +115,27 @@ public class WDAudioStream implements AudioStream { @Override public void close() throws IOException { } + + Channel channel; + + @Override + public void attach(Channel channel) { + WDExtendedAudioStream.super.attach(channel); + this.channel = channel; + } + + @Override + public int getPumpCount(int defaultAmount) { + return defaultAmount; + } + + @Override + public int computeSize(AudioFormat format, int streamingBufferSize) { + return 2048; + } + + @Override + public boolean canStop() { + return true; + } } diff --git a/src/main/java/net/montoyo/wd/client/audio/WDExtendedAudioStream.java b/src/main/java/net/montoyo/wd/client/audio/WDExtendedAudioStream.java new file mode 100644 index 0000000..23431fb --- /dev/null +++ b/src/main/java/net/montoyo/wd/client/audio/WDExtendedAudioStream.java @@ -0,0 +1,23 @@ +package net.montoyo.wd.client.audio; + +import com.mojang.blaze3d.audio.Channel; + +import javax.sound.sampled.AudioFormat; + +public interface WDExtendedAudioStream { + default int getPumpCount(int defaultAmount) { + return defaultAmount; + } + + default void attach(Channel channel) { + return; + } + + default int computeSize(AudioFormat format, int streamingBufferSize) { + return streamingBufferSize; + } + + default boolean canStop() { + return true; + } +} diff --git a/src/main/java/net/montoyo/wd/mixins/audio/AudioChannelMixin.java b/src/main/java/net/montoyo/wd/mixins/audio/AudioChannelMixin.java new file mode 100644 index 0000000..572449b --- /dev/null +++ b/src/main/java/net/montoyo/wd/mixins/audio/AudioChannelMixin.java @@ -0,0 +1,48 @@ +package net.montoyo.wd.mixins.audio; + +import com.mojang.blaze3d.audio.Channel; +import net.minecraft.client.sounds.AudioStream; +import net.montoyo.wd.client.audio.WDExtendedAudioStream; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import javax.annotation.Nullable; +import javax.sound.sampled.AudioFormat; + +@Mixin(Channel.class) +public class AudioChannelMixin { + @Shadow + @Nullable + private AudioStream stream; + + @Shadow private int streamingBufferSize; + + @Inject(at = @At("HEAD"), method = "attachBufferStream") + public void postAttach(AudioStream pStream, CallbackInfo ci) { + ((WDExtendedAudioStream) pStream).attach((Channel) (Object) this); + } + + @Inject(at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/audio/Channel;pumpBuffers(I)V", shift = At.Shift.BEFORE), method = "attachBufferStream") + public void postComputeSize(AudioStream pStream, CallbackInfo ci) { + streamingBufferSize = ((WDExtendedAudioStream) pStream).computeSize( + pStream.getFormat(), streamingBufferSize + ); + } + + @ModifyVariable(argsOnly = true, ordinal = 0, at = @At("HEAD"), method = "pumpBuffers") + public int prePump(int defaultAmount) { + return ((WDExtendedAudioStream) stream).getPumpCount(defaultAmount); + } + + @Inject(at = @At("HEAD"), method = "stopped", cancellable = true) + public void preCheckStopped(CallbackInfoReturnable cir) { + if (stream != null) + if (!((WDExtendedAudioStream) stream).canStop()) + cir.setReturnValue(false); + } +} diff --git a/src/main/java/net/montoyo/wd/mixins/audio/AudioStreamMixin.java b/src/main/java/net/montoyo/wd/mixins/audio/AudioStreamMixin.java new file mode 100644 index 0000000..d4ae335 --- /dev/null +++ b/src/main/java/net/montoyo/wd/mixins/audio/AudioStreamMixin.java @@ -0,0 +1,9 @@ +package net.montoyo.wd.mixins.audio; + +import net.minecraft.client.sounds.AudioStream; +import net.montoyo.wd.client.audio.WDExtendedAudioStream; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(AudioStream.class) +public interface AudioStreamMixin extends WDExtendedAudioStream { +} diff --git a/src/main/resources/webdisplays.mixins.json b/src/main/resources/webdisplays.mixins.json index 7f6eb46..9841a75 100644 --- a/src/main/resources/webdisplays.mixins.json +++ b/src/main/resources/webdisplays.mixins.json @@ -8,7 +8,9 @@ ], "client": [ "MouseHandlerMixin", - "OverlayMixin" + "OverlayMixin", + "audio.AudioChannelMixin", + "audio.AudioStreamMixin" ], "injectors": { "defaultRequire": 1