65 lines
1.8 KiB
JavaScript
65 lines
1.8 KiB
JavaScript
mineflayer = require('mineflayer');
|
|
bot = mineflayer.createBot({
|
|
host: "localhost",
|
|
port: 25565,
|
|
username: "fookat",
|
|
});
|
|
|
|
|
|
|
|
|
|
// list of key pitches Fb1 - Fb2
|
|
pitches = [0.5];
|
|
for (let i = -11; i <= -1; i++)
|
|
pitches.push(Math.pow(2, i/12));
|
|
pitches.push(1);
|
|
for (let i = 1; i <= 11; i++)
|
|
pitches.push(Math.pow(2, i/12));
|
|
pitches.push(2);
|
|
|
|
|
|
|
|
noteHandler = function(noteNumber, velocity) {
|
|
//let cmd = `/playsound minecraft:block.note_block.harp record @a ~ ~ ~ 1 ${(event.noteNumber - 21) / 44}`
|
|
let npos = noteNumber - 21; // note position from 0 to 88
|
|
let opos; // octave start position
|
|
let inst;
|
|
if (npos > (opos = 8) && npos <= 32) {
|
|
inst = "minecraft:block.note_block.bass"
|
|
}
|
|
else if (npos > (opos = 32) && npos <= 56) {
|
|
inst = "minecraft:block.note_block.harp";
|
|
}
|
|
else if (npos > (opos = 56) && npos <= 80) {
|
|
inst = "minecraft:block.note_block.xylophone";
|
|
} else return;
|
|
//console.log(npos - opos - 1);
|
|
let pitch = pitches[npos - opos - 1];
|
|
if (!pitch) return;
|
|
let cmd = `/execute at @a run playsound ${inst} record @p ~ ~ ~ ${velocity / 127 || 1} ${pitch} 1`
|
|
//console.log(cmd);
|
|
bot.chat(cmd);
|
|
}
|
|
|
|
|
|
MidiPlayer = require('midi-player-js');
|
|
Player = new MidiPlayer.Player(function(event){
|
|
if (event.name == "Note off" || (event.name == "Note on" && event.velocity === 0)) {
|
|
|
|
} else if (event.name == "Note on") {
|
|
noteHandler(event.noteNumber, event.velocity);
|
|
} else if (event.name == "Set Tempo") {
|
|
Player.setTempo(event.data);
|
|
}
|
|
});
|
|
Player.sampleRate = 0;
|
|
Player.loadFile('./Note_sweep.mid');
|
|
bot.on('login', () => {
|
|
console.log("login")
|
|
Player.play()
|
|
var JZZ = require('JZZ');
|
|
JZZ().openMidiIn().connect(function(msg){
|
|
if (msg.isNoteOn()) noteHandler(msg.getNote(), msg.getVelocity());
|
|
});
|
|
});
|