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()); }); });