custom pitch thing (my chipmunk mod fork)

this one also took ages to make and its because my very dumb skill :((((((((((((((((((((((((9
well it works at least
This commit is contained in:
Chayapak 2023-09-02 20:04:30 +07:00
parent 426f507a14
commit 979f585601
3 changed files with 69 additions and 47 deletions

View file

@ -27,7 +27,10 @@ import java.util.concurrent.TimeUnit;
public class MusicPlayerPlugin extends Bot.Listener { public class MusicPlayerPlugin extends Bot.Listener {
private final Bot bot; private final Bot bot;
public static final String SELECTOR = "@a[tag=!nomusic,tag=!chomens_bot_nomusic]"; public static final String SELECTOR = "@a[tag=!nomusic,tag=!chomens_bot_nomusic,tag=!custompitch]";
public static final String CUSTOM_PITCH_SELECTOR = "@a[tag=!nomusic,tag=!chomens_bot_nomusic,tag=custompitch]";
public static final String BOTH_SELECTOR = "@a[tag=!nomusic,tag=!chomens_bot_nomusic]";
public static final Path SONG_DIR = Path.of("songs"); public static final Path SONG_DIR = Path.of("songs");
static { static {
try { try {
@ -287,47 +290,77 @@ public class MusicPlayerPlugin extends Bot.Listener {
} }
public void handlePlaying () { public void handlePlaying () {
currentSong.advanceTime(); try {
while (currentSong.reachedNextNote()) { currentSong.advanceTime();
final Note note = currentSong.getNextNote(); while (currentSong.reachedNextNote()) {
final Note note = currentSong.getNextNote();
if (notesPerSecond > 1240) continue; if (notesPerSecond > 1240) continue;
float key = note.pitch; float key = note.pitch;
// totally didn't look at the minecraft code and found the note block pitch thingy so i totallydidnotskidded it // totally didn't look at the minecraft code and found the note block pitch thingy so i totallydidnotskidded it
final double floatingPitch = Math.pow(2.0, ((key + (pitch / 10)) - 12) / 12.0); double floatingPitch = Math.pow(2.0, ((key + (pitch / 10)) - 12) / 12.0);
// final double floatingPitch = 0.5 * (Math.pow(2, ((key + (pitch / 10)) / 12))); // final double floatingPitch = 0.5 * (Math.pow(2, ((key + (pitch / 10)) / 12)));
float blockPosition = 0; float blockPosition = 0;
// totallynotskidded from opennbs // totallynotskidded from opennbs
if (currentSong.nbs) { if (currentSong.nbs) {
final int s = (note.stereo + note.panning) / 2; // Stereo values to X coordinates, calc'd from the average of both note and layer pan. final int s = (note.stereo + note.panning) / 2; // Stereo values to X coordinates, calc'd from the average of both note and layer pan.
if (s > 100) blockPosition = (float) (s - 100) / -100; if (s > 100) blockPosition = (float) (s - 100) / -100;
else if (s < 100) blockPosition = (float) ((s - 100) * -1) / 100; else if (s < 100) blockPosition = (float) ((s - 100) * -1) / 100;
} else { } else {
// i wrote this part // i wrote this part
// this uses the average of the pitch and the volume to calculate the stereo // this uses the average of the pitch and the volume to calculate the stereo
final float average = (note.pitch + note.volume) / 2; final float average = (note.pitch + note.volume) / 2;
if (average > 5) blockPosition = (average - 5) / -5; if (average > 5) blockPosition = (average - 5) / -5;
else if (average < 5) blockPosition = ((average - 5) * -1) / 5; else if (average < 5) blockPosition = ((average - 5) * -1) / 5;
}
key += 33;
final boolean isMoreOrLessOctave = key < 33 || key > 57;
if (isMoreOrLessOctave) {
bot.core.run(
"minecraft:execute as " +
CUSTOM_PITCH_SELECTOR +
" at @s run playsound " +
(!instrument.equals("off") ? instrument : note.instrument.sound) + ".pitch." + floatingPitch +
" record @s ^" + blockPosition + " ^ ^ " +
note.volume +
" " +
0
);
}
// these 2 lines are totallynotskidded from https://github.com/OpenNBS/OpenNoteBlockStudio/blob/master/scripts/selection_transpose/selection_transpose.gml
// so huge thanks to them uwu
while (key < 33) key += 12;
while (key > 57) key -= 12;
key -= 33;
floatingPitch = Math.pow(2.0, ((key + (pitch / 10)) - 12) / 12.0);
bot.core.run(
"minecraft:execute as " +
(isMoreOrLessOctave ? SELECTOR : BOTH_SELECTOR) +
" at @s run playsound " +
(!instrument.equals("off") ? instrument : note.instrument.sound) +
" record @s ^" + blockPosition + " ^ ^ " +
note.volume +
" " +
MathUtilities.clamp(floatingPitch, 0, 2)
);
notesPerSecond++;
} }
} catch (Exception e) {
bot.core.run( e.printStackTrace();
"minecraft:execute as " +
SELECTOR +
" at @s run playsound " +
(!instrument.equals("off") ? instrument : note.instrument.sound) +
" record @s ^" + blockPosition + " ^ ^ " +
note.volume +
" " +
MathUtilities.clamp(floatingPitch, 0, 2)
);
notesPerSecond++;
} }
} }
} }

View file

@ -131,18 +131,12 @@ public class MidiConverter implements Converter {
return null; return null;
} }
int pitch = (midiPitch-instrument.offset) + /* lazy -> */ 33; int pitch = midiPitch-instrument.offset;
// these 2 lines are totallynotskidded from https://github.com/OpenNBS/OpenNoteBlockStudio/blob/master/scripts/selection_transpose/selection_transpose.gml
// so huge thanks to them uwu
// will this do anything if it's midi?
while (pitch < 33) pitch += 12;
while (pitch > 57) pitch -= 12;
float volume = (float) velocity / 127.0f; float volume = (float) velocity / 127.0f;
long time = microTime / 1000L; long time = microTime / 1000L;
return new Note(instrument, pitch - 33, volume, time, -1, 100); return new Note(instrument, pitch, volume, time, -1, 100);
} }
private static Note getMidiPercussionNote (int midiPitch, int velocity, long microTime) { private static Note getMidiPercussionNote (int midiPitch, int velocity, long microTime) {

View file

@ -183,11 +183,6 @@ public class NBSConverter implements Converter {
layerVolume = nbsLayers.get(note.layer).volume; layerVolume = nbsLayers.get(note.layer).volume;
} }
// these 2 lines are totallynotskidded from https://github.com/OpenNBS/OpenNoteBlockStudio/blob/master/scripts/selection_transpose/selection_transpose.gml
// so huge thanks to them uwu
while (key < 33) key += 12;
while (key > 57) key -= 12;
int pitch = key-33; int pitch = key-33;
try { try {