var recording = [];
MPP.client.on('n', msg => {
recording.push(msg);
});
recording.forEach(msg => {
setTimeout(()=>{
msg.n.forEach(n => {MPP.press(n.n, n.v)});
}, msg.t - recording[0].t)
});
var recording = [];MPP.client.on("n", function(msg) { var t = msg.t - MPP.client.serverTimeOffset + 1000 - Date.now(); msg.n.forEach((note, i) => { var ms = t + (note.d || 0); if (ms < 0) ms = 0; else if (ms > 10000) return; if (note.s) { recording.push({tp:"r", ky:note.n, ts:Date.now()+ms}); // key releases } else { var vel = typeof note.v !== "undefined" ? parseFloat(note.v) : 0.5; if (vel < 0) vel = 0; else if (vel > 1) vel = 1; recording.push({tp:"p", ky:note.n, ts:Date.now()+ms, vl:vel}); // key presses } });});
;2337,ds4,0.859;2337,b2,0.859;2456,ds4;
//record
var recording = ";";
var startTime = Date.now();
MPP.client.on("n", msg => {
var t = msg.t - MPP.client.serverTimeOffset + 1000 - Date.now();
msg.n.forEach((note, i) => {
var ms = t + (note.d || 0);
if (ms < 0) ms = 0; else if (ms > 10000) return;
if (note.s) {
recording += `${Date.now()+ms-startTime},${note.n};`; // key releases
} else {
var vel = note.v ? parseFloat(note.v) : 0.5;
if (vel < 0) vel = 0; else if (vel > 1) vel = 1;
recording += `${Date.now()+ms-startTime},${note.n},${vel};`; // key presses
}
});
});
// playback
var timers = [];
recording.split(';').slice(1,-1).forEach(note => {
var keys = note.split(',');
timers.push(setTimeout(()=>{
if (keys[2]) MPP.press(keys[1], Number(keys[2]));
else MPP.release(keys[1]);
}, keys[0]));
});
// Basic note recorder for use in web console, made by Lamp
// To use, paste into console, then control with the following functions (type into console)
// record(), stopRecord(), playRecording(), stopPlayingRecording(), saveRecording("name"), loadRecording("name"), and resetRecording()
var recording = ";";
var isRecording = false;
var startTime;
var timers = [];
MPP.client.on("n", msg => {
if (!isRecording) return;
var t = msg.t - MPP.client.serverTimeOffset + 1000 - Date.now();
msg.n.forEach((note, i) => {
var ms = t + (note.d || 0);
if (ms < 0) ms = 0; else if (ms > 10000) return;
if (note.s) {
recording += `${Date.now()+ms-startTime},${note.n};`; // key releases
} else {
var vel = note.v ? parseFloat(note.v) : 0.5;
if (vel < 0) vel = 0; else if (vel > 1) vel = 1;
recording += `${Date.now()+ms-startTime},${note.n},${vel};`; // key presses
}
});
});
function record() {
startTime = Date.now();
isRecording = true;
}
function stopRecord() {
isRecording = false;
}
function playRecording() {
recording.split(';').slice(1,-1).forEach(note => {
var keys = note.split(',');
timers.push(setTimeout(()=>{
if (keys[2]) MPP.press(keys[1], Number(keys[2]));
else MPP.release(keys[1]);
}, keys[0]));
});
}
function stopPlayingRecording() {
timers.forEach(timer => {clearTimeout(timer)});
timers = [];
}
function saveRecording(name) {
localStorage[name] = recording;
}
function loadRecording(name) {
recording = localStorage[name];
}
function resetRecording() {
recording = ";";
}
how to fix bug if its dont records yourself notes???
// record
var recording = new Array();
MPP.piano._play = MPP.piano.play;
MPP.piano._stop = MPP.piano.stop;
MPP.piano.play = function (note, vol, participant, delay_ms) {
recording.push([note, vol, Date.now() + delay_ms]);
MPP.piano._play(note, vol, participant, delay_ms);
};
MPP.piano.stop = function (note, participant, delay_ms) {
recording.push([note, null, Date.now() + delay_ms]);
MPP.piano._stop(note, participant, delay_ms);
};
// playback
for (let note of recording) {
setTimeout(()=>{
if (note[1]) MPP.press(note[0], note[1]);
else MPP.release(note[0]);
}, note[2] - recording[0][2]);
}
(function playback(i = 0){
var note = recording[i];
if (note[1]) MPP.press(note[0], note[1]);
else MPP.release(note[0]);
setTimeout(playback, note[2] - recording[i-1][2], i);
})()