Problem with MIDI playback on VS1053 using SPI commands on the Arduino UNO

Hello everybody
I have encountered several problems when using Matthias Neeracher's Playing Real Time MIDI through the Sparkfun MP3 Player Shield · GitHub
example of MIDI playback on VS1053 using SPI commands on the Arduino UNO.

Firstly the minimal usable divider is SPI.setClockDivider(SPI_CLOCK_DIV8) (default is DIV16 anyway).

Second problem is more serious and I can only play simple polyphonic drum machine by using delays of 300uS with the following code:

int BassDrum[13]= {1,0,0,0,0,0,1,0,0,0,0,1};
int MuHIConga[13]={1,0,0,1,0,0,0,0,0,0,0,1};
int SideStick[13]={1,0,0,0,0,0,0,0,0,1,0,1};

void loop()

d(); //initialize Bank 0x78
delayMicroseconds(300); if(BassDrum[l]==1){note=35 ;noteOff(0, note, 127); note=35 ;noteOn(0, note, 50);} //BassDrum
delayMicroseconds(300); if(MuHIConga[l]==1){note=62 ;noteOff(0, note, 127); note=62 ;noteOn(0, note, 50);} //MuHIConga
delayMicroseconds(300); if(SideStick[l]==1){note=37 ;noteOff(0, note, 127); note=37 ;noteOn(0, note, 50);} //SideStick

delay(next_sixteenth); l++;

where d() is :
void d(){ talkMIDI(0xB0, 0x07, 80); talkMIDI(0xB0, 0, 0x78); talkMIDI(0xC0, 30/instrument/, 0); }

I would like to add instrumental polyphony here , but the code

void m(int instrument){talkMIDI(0xB0, 0, 0x00); //Default bank GM1
talkMIDI(0xC0, instrument-1, 0); //Set instrument number. 0xC0 is a 1 data byte command }

int Bass[13]= {60,0,0,0,0,0,0,0,0,0,0,0};

void loop() { if(l>11)l=0;
m(33); delay(1); if( Bass[l]!=0)
{ note=Bass[l] ;
noteOn(0, note, 0); noteOn(0, note, 30); delayMicroseconds(300);
noteOn(0, note+7, 0); noteOn(0, note+7, 30); delayMicroseconds(300);
noteOn(0, note+14, 0); noteOn(0, note+14, 30);
delay(next_sixteenth); l++;}

is very unreliable (no reproducible polyphony).

I would appreciate any suggestions - thanks.