to clarify, this is one that was looping in setup; I have a feeling the 2nd SD.begin is not needed.
void setup() {
MIDI.begin(MIDI_CHANNEL_OMNI);
// Serial.begin(57600);
pinMode(MIDI_ENABLE, OUTPUT); // sets the digital pin as output
digitalWrite(MIDI_ENABLE, HIGH);
// MIDI.turnThruOff();
// MIDI.setHandleClock ( HandleClock );
//MIDIfile & SD card setups
// Initialise SD
if (!SD.begin(chipSelect, SPI_HALF_SPEED))SD.initErrorHalt();
// Serial.println("begin success");
SD.begin(chipSelect, SPI_HALF_SPEED);
// Initialise MIDIFile
SMF.begin(&SD);
SMF.setMidiHandler(midiCallback);
// SMF.setSysexHandler(sysexCallback);
//MIDI.setHandleNoteOn(HandleNoteOn);
MIDI.sendProgramChange(P,10);
}