@@ -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