Skip to content

Commit dd9fa0b

Browse files
committed
fix drum gen
1 parent a182452 commit dd9fa0b

File tree

1 file changed

+52
-28
lines changed

1 file changed

+52
-28
lines changed

js/activity.js

Lines changed: 52 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4228,13 +4228,36 @@ class Activity {
42284228
}
42294229

42304230
this.transcribeMidi = async function(midi) {
4231+
4232+
const DRUM_MIDI_MAP = {
4233+
38: ["snare drum"],
4234+
36: ["kick drum"],
4235+
41: ["tom tom"],
4236+
43: ["floor tom tom"],
4237+
47: ["cup drum"],
4238+
50: ["darbuka drum"],
4239+
56: ["japanese drum", "cow bell"],
4240+
42: ["hi hat"],
4241+
53: ["ride bell"],
4242+
81: ["triangle bell"],
4243+
69: ["finger cymbals"],
4244+
82: ["chime"],
4245+
52: ["gong"],
4246+
55: ["clang"],
4247+
49: ["crash"],
4248+
39: ["clap"],
4249+
40: ["slap"],
4250+
88: ["raindrop"]
4251+
};
4252+
4253+
42314254
let currentMidi = midi;
42324255
let jsONON = [] ;
42334256
let actionBlockCounter = 0; // Counter for action blocks
42344257
let actionBlockNames = []; // Array to store action block names
42354258
let totalnoteblockCount = 0; // Initialize noteblock counter
42364259
let noteblockCount = 0;
4237-
const MAX_NOTEBLOCKS = 100;
4260+
const MAX_NOTEBLOCKS = 200;
42384261
let shortestNoteDenominator = 0;
42394262
let offset = 100;
42404263
let stopProcessing = false;
@@ -4262,11 +4285,10 @@ class Activity {
42624285
// console.log("tempoBpm is: ", currentMidiTempoBpm);
42634286
// console.log("tempo is : ",currentMidi.header.tempos);
42644287
// console.log("time signatures are: ", currentMidi.header.timeSignatures);
4288+
console.log(currentMidi);
42654289
currentMidi.tracks.forEach((track, trackIndex) => {
42664290
let k = 0;
42674291
if (stopProcessing) return; // Exit if flag is set
4268-
let isPercussionTrack =(track.instrument.percussion && (track.channel===9 || track.channel===10))
4269-
isPercussion.push(isPercussionTrack);
42704292
if (!track.notes.length) return;
42714293
let r = jsONON.length;
42724294
// console.log("notes: ",track.notes);
@@ -4292,6 +4314,7 @@ class Activity {
42924314
);
42934315

42944316
let sched = [];
4317+
isPercussion.push(track.instrument.percussion && (track.channel === 9 || track.channel === 10));
42954318

42964319
track.notes.forEach((note, index) => {
42974320
let name = note.name;
@@ -4300,7 +4323,6 @@ class Activity {
43004323

43014324
if (note.duration === 0) return; // Skip zero-duration notes
43024325

4303-
43044326
let lastNote = sched[sched.length - 1];
43054327

43064328
if (index === 0 && start > 0) {
@@ -4400,9 +4422,10 @@ class Activity {
44004422
[x, "rest2", 0, 0, [prev, null]]
44014423
);
44024424
} else if (precurssionFlag) {
4425+
let drumname = DRUM_MIDI_MAP[track.notes[0].midi][0] || "kick drum";
44034426
ar.push(
44044427
[x, "playdrum", 0, 0, [first ? prev : x-1, x+1, null]],
4405-
[x+1, ["drumname",{"value":"bass drum"}], 0, 0,[x]],
4428+
[x+1, ["drumname",{"value":drumname}], 0, 0,[x]],
44064429
);
44074430
x += 2;
44084431
} else {
@@ -4431,7 +4454,7 @@ class Activity {
44314454
// obj[0]=obj[0]*scalingFactor;
44324455

44334456
// To get the reduced fraction for 4/2 to 2/1
4434-
obj=this.getClosestStandardNoteValue(obj[0]/obj[1]);
4457+
obj = this.getClosestStandardNoteValue(obj[0]/obj[1]);
44354458

44364459
// Since we are going to add action block in the front later
44374460
if (k != 0) val = val + 2;
@@ -4478,13 +4501,14 @@ class Activity {
44784501
let len = jsONON.length;
44794502
let m = 0;
44804503
let actionIndex = 0;
4504+
console.log(instruments);
44814505

44824506
for (let i = 0; i < trackCount; i++) {
4483-
let vspaceIndex=len+m+6;
4484-
let startIndex=len+m;
4485-
let flag=true;
4486-
if(isPercussion[i])
4487-
{
4507+
let vspaceIndex=len+m+6;
4508+
let startIndex=len+m;
4509+
let flag=true;
4510+
4511+
if (isPercussion[i]) {
44884512
jsONON.push(
44894513
[len + m, ["start", { collapsed: false }], 300 + offset, 100, [null, len + m + 14+actionBlockPerTrack[i], null]],
44904514
[len + m +1,"meter",0,0,[len + m +14 + actionBlockPerTrack[i],len + m +2,len + m +3,len + m + 6]],
@@ -4493,26 +4517,26 @@ class Activity {
44934517
[len + m + 4,["number", {value : 1}],0,0,[len+m+3]],
44944518
[len + m + 5,["number", {value : currentMidiTimeSignature[1]}],0,0,[len+m+3]],
44954519
[len + m + 6,"vspace",0,0,[len + m + 1,len + m + 8 + actionBlockPerTrack[i]]],
4496-
[len + m + 7, ["nameddo", { value: "MIDI-conversion" }], 0, 0, [len + m +13 +actionBlockPerTrack[i], len + m + 8]],
4520+
[len + m + 7, "hidden", 0, 0, [len + m +13 +actionBlockPerTrack[i], len + m + 8]],
44974521
);
4498-
flag=false;
4522+
flag = false;
44994523
m+=8;
4524+
} else {
4525+
jsONON.push(
4526+
[len + m, ["start", { collapsed: false }], 300 + offset, 100, [null, len + m+16+actionBlockPerTrack[i], null]],
4527+
[len + m +1,"meter",0,0,[len + m+16+actionBlockPerTrack[i],len + m +2,len + m +3,len + m + 6]],
4528+
[len + m + 2, ["number",{value: currentMidiTimeSignature[0]}],0,0,[len+m+1]],
4529+
[len + m + 3,"divide",0,0,[len + m +1,len + m + 4,len + m + 5]],
4530+
[len + m + 4,["number", {value : 1}],0,0,[len+m+3]],
4531+
[len + m + 5,["number", {value : currentMidiTimeSignature[1]}],0,0,[len+m+3]],
4532+
[len + m + 6,"vspace",0,0,[len + m + 1,len + m + 10 + actionBlockPerTrack[i]]],
4533+
[len + m + 7, "settimbre", 0, 0, [len + m +15 +actionBlockPerTrack[i], len + m + 8, len + m + 10, len + m + 9]],
4534+
[len + m + 8, ["voicename", { value: instruments[i] }], 0, 0, [len + m + 7]],
4535+
[len + m + 9, "hidden", 0, 0, [len + m + 7, null]]
4536+
);
4537+
m += 10;
45004538
}
4501-
else{
4502-
jsONON.push(
4503-
[len + m, ["start", { collapsed: false }], 300 + offset, 100, [null, len + m+16+actionBlockPerTrack[i], null]],
4504-
[len + m +1,"meter",0,0,[len + m+16+actionBlockPerTrack[i],len + m +2,len + m +3,len + m + 6]],
4505-
[len + m + 2, ["number",{value: currentMidiTimeSignature[0]}],0,0,[len+m+1]],
4506-
[len + m + 3,"divide",0,0,[len + m +1,len + m + 4,len + m + 5]],
4507-
[len + m + 4,["number", {value : 1}],0,0,[len+m+3]],
4508-
[len + m + 5,["number", {value : currentMidiTimeSignature[1]}],0,0,[len+m+3]],
4509-
[len + m + 6,"vspace",0,0,[len + m + 1,len + m + 10 + actionBlockPerTrack[i]]],
4510-
[len + m + 7, "settimbre", 0, 0, [len + m +15 +actionBlockPerTrack[i], len + m + 8, len + m + 10, len + m + 9]],
4511-
[len + m + 8, ["voicename", { value: instruments[i] }], 0, 0, [len + m + 7]],
4512-
[len + m + 9, "hidden", 0, 0, [len + m + 7, null]]
4513-
);
4514-
m += 10;
4515-
}
4539+
45164540
for (let j = 0; j < actionBlockPerTrack[i]; j++) {
45174541
jsONON.push(
45184542
[len + m, ["nameddo", { value: actionBlockNames[actionIndex] }], 0, 0, [flag?len+m-3:len + m - 1, len + m + 1]]

0 commit comments

Comments
 (0)