MP3 Shield Won't Play Music in an if Statement!

Hey everyone, when my ultrasonic sensor senses a distance between 40 and 50, I want it to play a certain mp3 file, but the serial monitor just freezes, and I don't hear any sound. Please help!

// Volume Variables
int potPin = 2;
int volumeRaw = 0;
int volumeVar = 0;

// Sensor Variables
int echoPin = 4; // Echo Pin
int trigPin = 5; // Trigger Pin
int maximumDistance = 100; // Maximum range needed
int minimumDistance = 3; // Minimum range needed
long duration, distance; // Duration used to calculate distance

  This is an example for the Adafruit VS1053 Codec Breakout

  Designed specifically to work with the Adafruit VS1053 Codec Breakout 

  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution

// include SPI, MP3 and SD libraries
#include <SPI.h>
#include <Adafruit_VS1053.h>
#include <SD.h>

// These are the pins used for the breakout example
#define BREAKOUT_RESET  9      // VS1053 reset pin (output)
#define BREAKOUT_CS     10     // VS1053 chip select pin (output)
#define BREAKOUT_DCS    8      // VS1053 Data/command select pin (output)
// These are the pins used for the music maker shield
#define SHIELD_RESET  -1      // VS1053 reset pin (unused!)
#define SHIELD_CS     7      // VS1053 chip select pin (output)
#define SHIELD_DCS    6      // VS1053 Data/command select pin (output)

// These are common pins between breakout and shield
#define CARDCS 4     // Card chip select pin
// DREQ should be an Int pin, see
#define DREQ 3       // VS1053 Data request, ideally an Interrupt pin

Adafruit_VS1053_FilePlayer musicPlayer = 
  // create breakout-example object!
  // create shield-example object!


void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  Serial.println("Adafruit VS1053 Library Test");

  // initialise the music player
  if (! musicPlayer.begin()) { // initialise the music player
     Serial.println(F("Couldn't find VS1053, do you have the right pins defined?"));
     while (1);
  Serial.println(F("VS1053 found"));

  musicPlayer.sineTest(0x44, 500);    // Make a tone to indicate VS1053 is working
  if (!SD.begin(CARDCS)) {
    Serial.println(F("SD failed, or not present"));
    while (1);  // don't do anything more
  Serial.println("SD OK!");
  // list files
  printDirectory("/"), 0);
  // Set volume for left, right channels. lower numbers == louder volume!

  /***** Two interrupt options! *******/ 
  // This option uses timer0, this means timer1 & t2 are not required
  // (so you can use 'em for Servos, etc) BUT millis() can lose time
  // since we're hitchhiking on top of the millis() tracker
  // This option uses a pin interrupt. No timers required! But DREQ
  // must be on an interrupt pin. For Uno/Duemilanove/Diecimilla
  // that's Digital #2 or #3
  // See for other pins
  // *** This method is preferred
  if (! musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT))
    Serial.println(F("DREQ pin is not an interrupt pin"));

void loop() {  

         /* The following trigPin/echoPin cycle is used to determine the
         distance of the nearest object by bouncing soundwaves off of it. */ 
         digitalWrite(trigPin, LOW); 

         digitalWrite(trigPin, HIGH);
         digitalWrite(trigPin, LOW);
         duration = pulseIn(echoPin, HIGH);
         // some code to find duration of pulse...
         if (duration == 0) {
         //Calculate the distance (in cm) based on the speed of sound.
         distance = duration/58.2;
         if (distance >= maximumDistance){
         /* Send a negative number to computer and Turn LED ON 
         to indicate "out of range" */
         Serial.println("Get closer!");
         else if (distance <= minimumDistance){
         /* Send a negative number to computer and Turn LED ON 
         to indicate "out of range" */
         Serial.println("Too close!");
             /* Send the distance to the computer using Serial protocol, and
             turn LED OFF to indicate successful reading. */
         //Delay 50ms before next reading.
       if(distance > 40 && distance < 50){
            // Start playing a file, then we can do stuff while waiting for it to finish
            if (! musicPlayer.startPlayingFile("track001.mp3")) {
              Serial.println("Could not open file track001.mp3");
              while (1);
            Serial.println(F("Started playing"));
      // Volume Knob Setup
        volumeRaw = analogRead(potPin);
        volumeVar = volumeRaw/30;
        //  Set volume for left, right channels. lower numbers == louder volume!

/// File listing helper
void printDirectory(File dir, int numTabs) {
   while(true) {
     File entry =  dir.openNextFile();
     if (! entry) {
       // no more files
     for (uint8_t i=0; i<numTabs; i++) {
     if (entry.isDirectory()) {
       printDirectory(entry, numTabs+1);
     } else {
       // files have sizes, directories do not
       Serial.println(entry.size(), DEC);

Without the ultrasonic sensor connected, triggered, or read, can you play music?

Yes, I can. The volume knob also works when the sensor isn't connected.