1
0
Fork 0

add midi player

This commit is contained in:
Sen 2025-08-25 18:07:15 +02:00
parent bbbace7f46
commit f8b07a32b9
Signed by: sen
GPG key ID: 3AC50A6F47D1B722
6 changed files with 608 additions and 935 deletions

View file

@ -14,7 +14,6 @@ import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.file.Files;
import java.text.SimpleDateFormat;
import java.util.ArrayDeque;
import java.util.Date;
@ -47,6 +46,7 @@ import client.gui.GuiConsole;
import client.gui.GuiInfo;
import client.gui.GuiLoading;
import client.gui.GuiMenu;
import client.gui.GuiPlayer;
import client.gui.GuiServer;
import client.gui.Style;
import client.gui.character.GuiChar;
@ -634,25 +634,25 @@ public class Client implements IThreadListener {
private int soundFrameSize = 32;
@Variable(name = "mid_dont_fade", category = CVarCategory.SOUND, display = "Nicht ausklingen")
private boolean midiNoWait = false;
public boolean midiNoWait = false;
@Variable(name = "mid_opl_voices", category = CVarCategory.SOUND, min = 4, max = 192, display = "OPL-Stimmen")
private int midiVoices = 64;
public int midiVoices = 64;
@Variable(name = "mid_keep_notes", category = CVarCategory.SOUND, display = "Stimmen behalten")
private boolean midiKeep = false;
public boolean midiKeep = false;
@Variable(name = "mid_play_unknown", category = CVarCategory.SOUND, display = "Unbekannte Banken")
private boolean midiUnknown = true;
public boolean midiUnknown = true;
// STR(MID_VELO_LOG, "", "Log.+Minimum [m+nlog(x)]")
// STR(MID_VELO_ATTN, "", "Log. Gedämpft [nlog(x)]")
// STR(MID_VELO_LIN, "", "Linear [x]")
// STR(MID_VELO_ONE, "", "Vollklang [1]")
@Variable(name = "mid_velocity_func", category = CVarCategory.SOUND, min = -128, max = 127, display = "Anschlag")
private int midiVelocity = 1;
public int midiVelocity = 1;
@Variable(name = "mid_opl_bank", category = CVarCategory.SOUND, display = "Bank")
private MidiBank midiBank = MidiBank.DMX_DMX;
public MidiBank midiBank = MidiBank.DMX_DMX;
@Variable(name = "mid_debug_events", category = CVarCategory.SOUND, display = "MIDI-Debug", callback = MidiDebugFunction.class)
private boolean midiDebug = false;
public boolean midiDebug = false;
@Variable(name = "mid_visualizer", category = CVarCategory.SOUND, display = "Visualisation")
private boolean midiVisualizer = true;
public boolean midiVisualizer = true;
public static final Client CLIENT = new Client();
@ -1025,6 +1025,7 @@ public class Client implements IThreadListener {
this.world.updateEntities();
}
this.soundManager.update();
GuiPlayer.INSTANCE.updatePlayer();
if (this.world != null)
{
this.tickWorld();
@ -3450,37 +3451,6 @@ public class Client implements IThreadListener {
Log.NETWORK.debug("Variable %s = %s", name, value);
}
}
public void playMidi(File file) {
byte[] data;
try {
data = Files.readAllBytes(file.toPath());
}
catch(Throwable e) {
Log.SOUND.error(e, "Konnte Datei '%s' nicht laden", file);
return;
}
MidiDecoder midi;
try {
midi = new MidiDecoder(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);
return;
}
midi.setDebug(this.midiDebug);
this.audio.alMidi(midi);
}
public void testMidi(int start) {
MidiDecoder midi = new MidiDecoder(this.midiVoices, this.midiBank, this.midiKeep, this.midiUnknown, this.midiVelocity, start);
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;