Delay playing Music in Game

I have added music to my Game.

I have a infinite song that is looping all time. When game start, or player is killed, must sound IntroPart. And then enter in first part, and second part loop.

To play Music I use:

/**
 * \brief Play background music
 *
 * \param[in] String with musicFile
 */
void SoundManager::
PlayBackgroundMusic(const char * musicFile)
{
    if (DataModule::get_instance()->getGameSettings()->getIsMusicEnabled())
    {
        // Concatenate extension for each platform
        char musicFileWithExtension[80];
        strcpy(musicFileWithExtension, musicFile);
        strcat(musicFileWithExtension,audioExtension);
        CCLog("musicFile: %s", musicFileWithExtension);
        SimpleAudioEngine::sharedEngine()->playBackgroundMusic(std::string(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(musicFileWithExtension)).c_str(), true);
    }
}

And to Launch son, from my

class GameplayLayer : public cocos2d::CCLayer, public GameplayLayerDelegate

And preload Audio:

SoundManager::
SoundManager()
{
    CCLog("SoundManager Constructor");

    // Temporal Preload Audio
    char musicFileWithExtension[80];
    strcpy(musicFileWithExtension, "MB_NORMAL_0");
    strcat(musicFileWithExtension,audioExtension);
    CCLog("preload musicFile: %s", musicFileWithExtension);
    SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(std::string(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(musicFileWithExtension)).c_str());
    char musicFileWithExtension2[80];
    strcpy(musicFileWithExtension2, "MB_NORMAL_1");
    strcat(musicFileWithExtension2,audioExtension);
    SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(std::string(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(musicFileWithExtension2)).c_str());
    char musicFileWithExtension3[80];
    strcpy(musicFileWithExtension3, "MB_NORMAL_2");
    strcat(musicFileWithExtension3,audioExtension);
    SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(std::string(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(musicFileWithExtension3)).c_str());
}

And to play in the correct Moment:

/**
 * \brief Call to init or resume background music
 *
 * Must be reset putting _isMusicBackgroundInit if want another intro :D
 */
void GameplayLayer::initMainBackgroundMusic()
{
    if (!_isMusicBackgroundInit)
    {
        CCLog("GameplayLayer::initMainBackgroundMusic _isMusicBackgroundInit: %d", _isMusicBackgroundInit);
        // Stop all
        SoundManager::get_instance()->StopAllEffects();
        SoundManager::get_instance()->StopBackgroundMusic();
        //this->stopAction(kMusicIntro);

        // Init music
        CCAction *actionMove1 = CCCallFuncN::create(this, callfuncN_selector(GameplayLayer::MacroClassicIntro));
        CCAction *actionMove2 = CCDelayTime::create(3.63759);   // Duration 3.63759
        CCAction *actionMove3 = CCCallFuncN::create(this, callfuncN_selector(GameplayLayer::updateMainBackgroundMusic));

        // Create Array Actions
        CCArray *myActionsArray = new CCArray(3);

        // Insert Objects
        myActionsArray->insertObject(actionMove1, 0);
        myActionsArray->insertObject(actionMove2, 1);
        myActionsArray->insertObject(actionMove3, 2);

        // Create Sequence
        CCAction *actionMove = CCSequence::create(myActionsArray);

        // Set Tags
        actionMove->setTag(kMusicIntro);

        // Run
        this->runAction(actionMove);

    }
    else
    {
        CCLog("GameplayLayer::initMainBackgroundMusic _isMusicBackgroundInit: %d", _isMusicBackgroundInit);
        SoundManager::get_instance()->ResumeBackgroundMusic();
    }


}
/**
 * \brief Call to updatebackground music
 *
 */
void GameplayLayer::updateMainBackgroundMusic()
{
    if (!_isMusicBackgroundInit)
    {
        // Update music
        CCAction *actionMove1 = CCCallFuncN::create(this, callfuncN_selector(GameplayLayer::MacroClassicMain1));
        CCAction *actionMove2 = CCDelayTime::create(13.4440);   // 13.4440
        CCAction *actionMove3 = CCCallFuncN::create(this, callfuncN_selector(GameplayLayer::MacroClassicMain2));
        CCAction *actionMove4 = CCDelayTime::create(13.6800);   // 13.6800
        CCAction *actionMove5 = CCCallFuncN::create(this, callfuncN_selector(GameplayLayer::updateMainBackgroundMusic));

        // Create Array Actions
        CCArray *myActionsArray = new CCArray(5);

        // Insert Objects
        myActionsArray->insertObject(actionMove1, 0);
        myActionsArray->insertObject(actionMove2, 1);
        myActionsArray->insertObject(actionMove3, 2);
        myActionsArray->insertObject(actionMove4, 3);
        myActionsArray->insertObject(actionMove5, 4);

        // Create Sequence
        CCAction *actionMove = CCSequence::create(myActionsArray);

        // Set Tags
        actionMove->setTag(kMusicIntro);

        // Run
        this->runAction(actionMove);
    }
    else
    {
        CCLog("GameplayLayer::initMainBackgroundMusic _isMusicBackgroundInit: %d", _isMusicBackgroundInit);
        SoundManager::get_instance()->ResumeBackgroundMusic();
    }
}

But I feel a little problem between transition. Preloading don’t work. The duration from audio is correct, i used Audacity to cut and test. If I cut the parts and paste in a single audio file, no problem are found. Exist another way to preload, or concatenate audio files to avoid this problem???