From 432b52ad6a54db44c337625c836af1fb4fcc0304 Mon Sep 17 00:00:00 2001 From: Sen Date: Mon, 25 Aug 2025 00:36:32 +0200 Subject: [PATCH] addd midi test --- client/src/main/java/client/Client.java | 27 ++++++++----------- .../java/client/audio/AudioInterface.java | 21 +++++++++++++++ client/src/main/java/client/gui/GuiMenu.java | 10 +++++++ 3 files changed, 42 insertions(+), 16 deletions(-) diff --git a/client/src/main/java/client/Client.java b/client/src/main/java/client/Client.java index 192394fe..2995eea6 100755 --- a/client/src/main/java/client/Client.java +++ b/client/src/main/java/client/Client.java @@ -3462,22 +3462,7 @@ public class Client implements IThreadListener { } MidiHandle midi; try { - midi = new MidiHandle(data, this.midiNoWait, this.midiVoices, this.midiBank, this.midiKeep, this.midiUnknown, this.midiVelocity) { - private int pos = 0; - - public long process() { - this.bank.progchange(this.chip, (byte)0, (byte)(this.pos < 128 ? this.pos : 0)); - this.bank.progchange(this.chip, (byte)9, (byte)0); - Log.SOUND.info("MIDI-Test #%d", this.pos); - this.bank.noteon(this.chip, this.pos < 128 ? (byte)0 : (byte)9, (byte)(this.pos < 128 ? (byte)36 : (this.pos - 128)), (byte)127); - this.pos++; - if(this.pos == 128) - this.pos = 128 + 35; - else if(this.pos == 128 + 82) - this.pos = 0; - return 1000000000L; - } - }; + midi = new MidiHandle(data, this.midiNoWait, this.midiVoices, this.midiBank, this.midiKeep, this.midiUnknown, this.midiVelocity); } catch(Throwable e) { Log.SOUND.error(e, "Konnte MIDI '%s' nicht laden", file); @@ -3486,6 +3471,16 @@ public class Client implements IThreadListener { midi.setDebug(this.midiDebug); this.audio.alMidi(midi); } + + public void testMidi() { + MidiHandle midi = new MidiHandle(this.midiVoices, this.midiBank, this.midiKeep, this.midiUnknown, this.midiVelocity); + midi.setDebug(this.midiDebug); + this.audio.alMidi(midi); + } + + public void stopMidi() { + this.audio.alMidi(null); + } private void displayTick(int posX, int posY, int posZ) { int range = 16; diff --git a/client/src/main/java/client/audio/AudioInterface.java b/client/src/main/java/client/audio/AudioInterface.java index df5caf42..ca9239e4 100644 --- a/client/src/main/java/client/audio/AudioInterface.java +++ b/client/src/main/java/client/audio/AudioInterface.java @@ -7869,6 +7869,14 @@ public class AudioInterface implements Runnable { this.bank = new BankHandle(this.chip, bank.getData(), keep, useunkn, (byte)velofunc); this.playing = true; } + + public MidiHandle(int voices, MidiBank bank, boolean keep, boolean useunkn, int velofunc) { + this.tracks = null; + this.tpqn = 0; + this.nowait = false; + this.chip = new OPLChip(48000, voices, 0, false, false); + this.bank = new BankHandle(this.chip, bank.getData(), keep, useunkn, (byte)velofunc); + } private void setTempo(int tempo) { this.uspb = tempo; @@ -8122,6 +8130,19 @@ public class AudioInterface implements Runnable { } public long process() { + if(this.tracks == null) { + this.bank.progchange(this.chip, (byte)0, (byte)(this.ticktime < 128 ? this.ticktime : 0)); + this.bank.progchange(this.chip, (byte)9, (byte)0); + Log.SOUND.user("MIDI-Test %s%d", this.ticktime < 128 ? "#" : "P", this.ticktime < 128 ? this.ticktime : this.ticktime - 128); + this.bank.noteon(this.chip, this.ticktime < 128 ? (byte)0 : (byte)9, (byte)(this.ticktime < 128 ? (byte)36 : (this.ticktime - 128)), (byte)127); + this.ticktime++; + if(this.ticktime == 128) + this.ticktime = 128 + 35; + else if(this.ticktime == 128 + 82) + this.ticktime = 0; + return 500000000L; + } + if(!this.playing && (this.nowait || !this.chip.isPlaying())) { return -1L; } diff --git a/client/src/main/java/client/gui/GuiMenu.java b/client/src/main/java/client/gui/GuiMenu.java index 55f59c28..951ba618 100644 --- a/client/src/main/java/client/gui/GuiMenu.java +++ b/client/src/main/java/client/gui/GuiMenu.java @@ -116,6 +116,16 @@ public class GuiMenu extends Gui { }); } }, "MIDI-Player")); + this.add(new ActButton(0, 130, 180, 0, new ButtonCallback() { + public void use(ActButton elem, PressType action) { + GuiMenu.this.gm.testMidi(); + } + }, "MIDI-Bank testen")); + this.add(new ActButton(0, 150, 180, 0, new ButtonCallback() { + public void use(ActButton elem, PressType action) { + GuiMenu.this.gm.stopMidi(); + } + }, "MIDI stoppen")); this.shift(); this.add(new Label(4, 4, 200, 0, Color.VIOLET + Client.VERSION, true)); this.splashLabel = this.add(new Label(0, 100, width, 0, ""));