Need to exit this loop, to then be ready to start again.

Robin2:
I suggest you slim down the playMP3() function and create another function to check the RFID card and save the name or code to a variable that can be used by the playMP3() function.

I have changed playMP3() to checkCard() as seems a little more appropriate, as this is checking to see if the card is still there. The playMP3 () is now playing the mp3 track to that uid of the tag/card.
But i am getting this

fadeoutMP3
CardRemoved
NewCard 0x0A 0x97 0xF3 0x16 
0002.mp3
0002.mp3
0002.mp3
0002.mp3
0002.mp3
0002.mp3
0002.mp3
0002.mp3
0002.mp3
0002.mp3
0002.mp3
CardRemoved
fadeoutMP3
CardRemoved

which makes me think it is spinning around trying to play but, then play, so quickly it never plays. So i set a delay(3000); at the end of the void playMP3() and it still isn't playing the mp3 track..
But if i uploaded a different sketch to the arduino nano then re-upload this sketch it will play once.

/*
   Initial Author: ryand1011 (https://github.com/ryand1011)

   Reads data written by a program such as "rfid_write_personal_data.ino"

   See: https://github.com/miguelbalboa/rfid/tree/master/examples/rfid_write_personal_data

   Uses MIFARE RFID card using RFID-RC522 reader
   Uses MFRC522 - Library
   -----------------------------------------------------------------------------------------
               MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
               Reader/PCD   Uno/101       Mega      Nano v3    Leonardo/Micro   Pro Micro
   Signal      Pin          Pin           Pin       Pin        Pin              Pin
   -----------------------------------------------------------------------------------------
   RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
   SPI SS      SDA(SS)      10            53        D10        10               10
   SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
   SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
   SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
*/

#include <SPI.h>
#include <MFRC522.h>

#define RST_PIN         9           // Configurable, see typical pin layout above
#define SS_PIN          10          // Configurable, see typical pin layout above

MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance



//mp3 player
#include<SoftwareSerial.h>
int mp3Pin[2] = { 5, 4 };           //Rx/Rx

// For the checksum to the mp3
#define startByte 0x7E
#define endByte 0xEF
#define versionByte 0xFF
#define dataLength 0x06
#define infoReq 0x01

SoftwareSerial mp3(mp3Pin[0], mp3Pin[1]); // Rx, Tx




//*****************************************************************************************//
void setup() {
  Serial.begin(9600);                                           // Initialize serial communications with the PC
  SPI.begin();                                                  // Init SPI bus
  mfrc522.PCD_Init();                                              // Init MFRC522 card


  //Mp3
  mp3.begin(9600);                        // Init mp3
  delay(1000);
  sendMP3Command(0x3F, 0, 0);             // Send request for initialization parameters
  sendMP3Command(0x06, 0, 20);            // Vol set to 30
  sendMP3Command(0x07, 0, 0);             // EQ = pop


}
void PrintHex(uint8_t *data, uint8_t length) // prints 8-bit data in hex with leading zeroes
{
  char tmp[16];
  for (int i = 0; i < length; i++) {
    sprintf(tmp, "0x%.2X", data[i]);
    Serial.print(tmp); Serial.print(" ");
  }
}
uint8_t buf[10] = {};
MFRC522::Uid id;
MFRC522::Uid id2;
bool is_card_present = false;
//*****************************************************************************************//

void cpid(MFRC522::Uid *id) {
  memset(id, 0, sizeof(MFRC522::Uid));
  memcpy(id->uidByte, mfrc522.uid.uidByte, mfrc522.uid.size);
  id->size = mfrc522.uid.size;
  id->sak = mfrc522.uid.sak;
}

bool cmpid(MFRC522::Uid *id1, MFRC522::Uid *id2) {
  return memcmp(id1, id2, sizeof(MFRC522::Uid));
}

void deregister_card() {
  is_card_present = false;
  memset(&id, 0, sizeof(id));
}
uint8_t control = 0x00;


void loop() {

  MFRC522::MIFARE_Key key;
  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
  }
  MFRC522::StatusCode status;

  //-------------------------------------------

  // Look for new cards
  if ( !mfrc522.PICC_IsNewCardPresent()) {
    fadeOutMP3();
  }
  else {
    if ( !mfrc522.PICC_ReadCardSerial()) {
      // do nothing;
    }
    else {
      checkCard();
    }
  }
  Serial.println("CardRemoved");
  delay(500); //change value if you want to read cards faster

  mfrc522.PICC_HaltA();
  mfrc522.PCD_StopCrypto1();
}
//*****************************************************************************************//a

void checkCard() {

  //PrintHex(id.uidByte, id.size);
  //Serial.println("hello");
  bool result = true;
  uint8_t buf_len = 4;
  cpid(&id);
  Serial.print("NewCard ");
  PrintHex(id.uidByte, id.size);
  Serial.println("");
  while (true) {
    control = 0;
    for (int i = 0; i < 3; i++) {
      if (!mfrc522.PICC_IsNewCardPresent()) {
        if (mfrc522.PICC_ReadCardSerial()) {
          //Serial.print('a');
          control |= 0x16;
        }
        if (mfrc522.PICC_ReadCardSerial()) {
          //Serial.print('b');
          control |= 0x16;
        }
        //Serial.print('c');
        control += 0x1;
      }
      //Serial.print('d');
      control += 0x4;
    }

    //Serial.println(control);
    if (control == 13 || control == 14) {
      //card is still there
      playMP3();
    }
    else {
      break;
    }
  }
}


void playMP3() {
  //Added
  //////////////////////////////////////////////////////////
  String content = "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
    content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  content.toUpperCase();
  if (content.substring(1) == "0A 97 F3 16") //change here the UID of the card/cards that you want to give access
  {
    //Serial.println("hello World");
    Serial.println("0002.mp3");
    //sendMP3Command(0x3, 0, 0002);  // select track 0002.mp3
    sendMP3Command(1,0,0); // play
    //sendMP3Command(0x19, 0, 0);     // Loop track playing
    delay(3000);

    //////////////////////////////////////////////////////////
  }
}

//==========

void fadeOutMP3() {
  // don't know what should go here
  Serial.println("fadeoutMP3");
  delay(500); //change value if you want to read cards faster
  sendMP3Command(0x06, 0, 28); // Reduce vol by 2 and fade out
  delay(30);
  sendMP3Command(0x06, 0, 26);
  delay(30);
  sendMP3Command(0x06, 0, 24);
  delay(30);
  sendMP3Command(0x06, 0, 22);
  delay(30);
  sendMP3Command(0x06, 0, 20);
  delay(30);
  sendMP3Command(0x06, 0, 18);
  delay(30);
  sendMP3Command(0x06, 0, 16);
  delay(30);
  sendMP3Command(0x06, 0, 14);
  delay(30);
  sendMP3Command(0x06, 0, 12);
  delay(30);
  sendMP3Command(0x06, 0, 10);
  delay(30);
  sendMP3Command(0x06, 0, 8);
  delay(30);
  sendMP3Command(0x06, 0, 6);
  delay(30);
  sendMP3Command(0x06, 0, 4);
  delay(30);
  sendMP3Command(0x06, 0, 2);
  delay(30);
  sendMP3Command(0x06, 0, 0);
  sendMP3Command(0x16, 0, 0); // Stop
  delay(500);                 // Change value if you want to read cards faster
}


// -------------------------------------------------------------------------------------
// MP3 COMMAND AND DATA     MP3 COMMAND AND DATA     MP3 COMMAND AND DATA     MP3 COMMAN
// -------------------------------------------------------------------------------------

void sendMP3Command(byte Command, byte Param1, byte Param2) {

  // Calculate the checksum
  unsigned int checkSum = -(versionByte + dataLength + Command + infoReq + Param1 + Param2);

  // Construct the command line
  byte commandBuffer[10] = { startByte, versionByte, dataLength, Command, infoReq, Param1, Param2, highByte(checkSum),
                             lowByte(checkSum), endByte
                           };

  for (int cnt = 0; cnt < 10; cnt++) {
    mp3.write(commandBuffer[cnt]);
  }

  // Delay needed between successive commands
  delay(30);
}