From 34930de946ae8be03bd405a399e8f85053ca1ba1 Mon Sep 17 00:00:00 2001 From: Marcin Date: Mon, 7 Sep 2026 15:20:18 +0200 Subject: [PATCH] fixing channel panning indexing --- .../github/thething/chipamp/mod/Sampler.java | 2 +- .../thething/chipamp/mod/SamplerTest.java | 38 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/chipamp-player/src/main/java/com/github/thething/chipamp/mod/Sampler.java b/chipamp-player/src/main/java/com/github/thething/chipamp/mod/Sampler.java index af000df..0f2ee0b 100644 --- a/chipamp-player/src/main/java/com/github/thething/chipamp/mod/Sampler.java +++ b/chipamp-player/src/main/java/com/github/thething/chipamp/mod/Sampler.java @@ -1192,7 +1192,7 @@ private Index(Config config) { for (int i = 0; i < channelsBySequenceRow.length; i++) { for (int channelIndex = 0; channelIndex < channelsBySequenceRow[i].length; channelIndex++) { - boolean right = (i & 3) == 1 || (i & 3) == 2; // (LRRL) repeating pattern + boolean right = (channelIndex & 3) == 1 || (channelIndex & 3) == 2; // (LRRL) repeating pattern this.channelsBySequenceRow[i][channelIndex] = new Channel(config, right); } } diff --git a/chipamp-player/src/test/java/com/github/thething/chipamp/mod/SamplerTest.java b/chipamp-player/src/test/java/com/github/thething/chipamp/mod/SamplerTest.java index 9d75573..63f89aa 100644 --- a/chipamp-player/src/test/java/com/github/thething/chipamp/mod/SamplerTest.java +++ b/chipamp-player/src/test/java/com/github/thething/chipamp/mod/SamplerTest.java @@ -757,4 +757,42 @@ void shouldBuildIndexWithAllEffects() throws IOException { assertThat(underTest.getContext().speed).isEqualTo(6); assertThat(underTest.getContext().tempo).isEqualTo(116); } + + @Test + void shouldRetainChannelPanningAfterSettingSamplingRate() throws IOException { + Mod mod = modLoader.load("chip/DJ Metune - Axel F.mod"); + underTest.updateMod(mod); + + assertThat(underTest.getLeftPan(0)).isEqualTo(0.36f); + assertThat(underTest.getLeftPan(1)).isEqualTo(0.25f); + assertThat(underTest.getLeftPan(2)).isEqualTo(0.25f); + assertThat(underTest.getLeftPan(3)).isEqualTo(0.36f); + assertThat(underTest.getRightPan(0)).isEqualTo(0.64f); + assertThat(underTest.getRightPan(1)).isEqualTo(0.75f); + assertThat(underTest.getRightPan(2)).isEqualTo(0.75f); + assertThat(underTest.getRightPan(3)).isEqualTo(0.64f); + + underTest.setLeftPan(1.0f); + underTest.setRightPan(1.0f); + + assertThat(underTest.getLeftPan(0)).isEqualTo(1.0f); + assertThat(underTest.getLeftPan(1)).isEqualTo(0.0f); + assertThat(underTest.getLeftPan(2)).isEqualTo(0.0f); + assertThat(underTest.getLeftPan(3)).isEqualTo(1.0f); + assertThat(underTest.getRightPan(0)).isEqualTo(0.0f); + assertThat(underTest.getRightPan(1)).isEqualTo(1.0f); + assertThat(underTest.getRightPan(2)).isEqualTo(1.0f); + assertThat(underTest.getRightPan(3)).isEqualTo(0.0f); + + underTest.setSamplingRate(22_050); + + assertThat(underTest.getLeftPan(0)).isEqualTo(1.0f); + assertThat(underTest.getLeftPan(1)).isEqualTo(0.0f); + assertThat(underTest.getLeftPan(2)).isEqualTo(0.0f); + assertThat(underTest.getLeftPan(3)).isEqualTo(1.0f); + assertThat(underTest.getRightPan(0)).isEqualTo(0.0f); + assertThat(underTest.getRightPan(1)).isEqualTo(1.0f); + assertThat(underTest.getRightPan(2)).isEqualTo(1.0f); + assertThat(underTest.getRightPan(3)).isEqualTo(0.0f); + } }