tags: jsfx This allocates notes to the first available channel. This will probably fail if more than 15 simultaneous notes are played. ``` desc: JDA Midi Mpe Allocator 1 @init alloc_base = 100; // channel => pitch alloc_chan = 200; // pitch => channel alloc_i = 0; loop(i=0;16,alloc_base[i]=-1;i+=1); function off(offset,nch,p,v) ( alloc_chan[p] = 0; alloc_base[nch] = -1; midisend(offset,0x80|nch,p,v); ); @block while(midirecv(offset,m1,m2,m3)) ( cmd = m1 >> 4; ch = m1 & 0xF; ( cmd == 0x8 || ( cmd == 90 && m3 == 0 ) ) ? ( nch = alloc_chan[m2]; off(offset,nch,m2,( cmd == 0x80 ? v : 0)); ) : ( cmd == 0x9 ) ? ( nch = alloc_chan[m2]; nch > 0 ? ( off(offset,nch,m2,0); ); fch = 0; i=1; while(i<15 && fch == 0) ( ( alloc_base[i] == -1 ) ? ( fch = i; tmx1 = i; ); i += 1; ); alloc_chan[m2] = fch; alloc_base[fch] = m2; midisend(offset,0x90|fch,m2,m3); ) : ( midisend(offset,m1,m2,m3); ) ); ```