From de325c72b57307bd2001d41fae51483287afed49 Mon Sep 17 00:00:00 2001 From: DaniTheSkunk Date: Sat, 15 Oct 2022 05:05:16 +0000 Subject: [PATCH] started implement SamplePlayer --- com/danitheskunk/skunkworks/TestSound.java | 15 ++++++---- .../skunkworks/audio/AudioEngine.java | 5 ++-- .../skunkworks/audio/nodes/SamplePlayer.java | 29 +++++++++++++++++++ 3 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 com/danitheskunk/skunkworks/audio/nodes/SamplePlayer.java diff --git a/com/danitheskunk/skunkworks/TestSound.java b/com/danitheskunk/skunkworks/TestSound.java index a310c81..6257825 100644 --- a/com/danitheskunk/skunkworks/TestSound.java +++ b/com/danitheskunk/skunkworks/TestSound.java @@ -3,6 +3,7 @@ package com.danitheskunk.skunkworks; import com.danitheskunk.skunkworks.audio.AudioEngine; import com.danitheskunk.skunkworks.audio.nodes.Mixer; import com.danitheskunk.skunkworks.audio.nodes.Node; +import com.danitheskunk.skunkworks.audio.nodes.SamplePlayer; import com.danitheskunk.skunkworks.audio.nodes.Sine; import org.lwjgl.openal.AL; import org.lwjgl.openal.ALC; @@ -25,18 +26,20 @@ public class TestSound { var sin2 = new Sine(engine, 659.25); var sin3 = new Sine(engine, 523.25); engine.setNode(mix); - Node.connect(sin1, 0, mix, 0); - Node.connect(sin3, 0, mix, 1); - Node.connect(sin2, 0, mix, 2); + //Node.connect(sin1, 0, mix, 0); + //Node.connect(sin3, 0, mix, 1); + //Node.connect(sin2, 0, mix, 2); var sample = engine.loadSample("C:\\Users\\dani\\Downloads\\Untitled" + ".wav"); - /* - for(int i = 0; i < 60; ++i) { + var player = new SamplePlayer(engine, sample); + Node.connect(player, 0, mix, 0); + + for(int i = 0; i < 500; ++i) { engine.refill(); Thread.sleep(20); } - + /* for(int i = 0; i < 60; ++i) { engine.refill(); Thread.sleep(20); diff --git a/com/danitheskunk/skunkworks/audio/AudioEngine.java b/com/danitheskunk/skunkworks/audio/AudioEngine.java index 7d72a7f..8eb7614 100644 --- a/com/danitheskunk/skunkworks/audio/AudioEngine.java +++ b/com/danitheskunk/skunkworks/audio/AudioEngine.java @@ -142,10 +142,11 @@ public class AudioEngine { } var sample = new Samplei(bytes.length / 2 / channels, channels == 2); for(int i = 0; i < bytes.length / 2 / channels; ++i) { - var l = bytes[i * 2 * channels] + bytes[i * 2 * channels + 1] << 8; + var l = + bytes[i * 2 * channels] + bytes[i * 2 * channels + 1] * 256; if(channels == 2) { var r = bytes[i * 2 * channels + 2] + - bytes[i * 2 * channels + 3] << 8; + bytes[i * 2 * channels + 3] * 256; sample.setSamplei(i, (short) l, (short) r); } else { sample.setSamplei(i, (short) l); diff --git a/com/danitheskunk/skunkworks/audio/nodes/SamplePlayer.java b/com/danitheskunk/skunkworks/audio/nodes/SamplePlayer.java new file mode 100644 index 0000000..cd3786e --- /dev/null +++ b/com/danitheskunk/skunkworks/audio/nodes/SamplePlayer.java @@ -0,0 +1,29 @@ +package com.danitheskunk.skunkworks.audio.nodes; + +import com.danitheskunk.skunkworks.audio.AudioBuffer; +import com.danitheskunk.skunkworks.audio.AudioEngine; +import com.danitheskunk.skunkworks.audio.ISample; + +public class SamplePlayer extends Node { + private ISample sample; + private int tick; + + public SamplePlayer(AudioEngine engine, ISample sample) { + super(engine, 0, 1); + this.sample = sample; + this.tick = 0; + } + + @Override + public AudioBuffer getBuffer(int slot) { + var bufsize = getEngine().getBufferSize(); + var buf = new AudioBuffer(bufsize); + for(int i = 0; i < bufsize && tick < sample.getLength(); ++i) { + var l = sample.getSampleLeft(tick); + var r = sample.getSampleRight(tick); + buf.setSample(i, l, r); + ++tick; + } + return buf; + } +}