Example #1
0
    bool AudioWorld::playMusicTheme(const std::string& name)
    {
#ifdef RE_USE_SOUND
        if (m_MusicVM->getDATFile().hasSymbolName(Utils::uppered(name)))
        {
            size_t i = m_MusicVM->getDATFile().getSymbolIndexByName(Utils::uppered(name));
            Daedalus::GameState::MusicThemeHandle h = m_MusicVM->getGameState().createMusicTheme();
            Daedalus::GEngineClasses::C_MusicTheme& mt = m_MusicVM->getGameState().getMusicTheme(h);
            m_MusicVM->initializeInstance(ZMemory::toBigHandle(h), i, Daedalus::IC_MusicTheme);

            return playSegment(mt.file, getTiming(mt.transSubType));
        }
#endif
        return false;
    }
Example #2
0
void WaveformView::mousePressEvent(QMouseEvent *event)
{
	int32	mouseY = event->y();
	real	f = (real)event->x() / (real)fFrameWidth;
	int32	frame = PG_FLOOR(f), frameDist;

	fScrubFrame = -1;
	fCurFrame = -1;
	fOldFrame = frame;
	fDragging = false;
	fDraggingEnd = -1;
	fSelectedPhrase = fParentPhrase = NULL;
	fSelectedWord = fParentWord = NULL;
	fSelectedPhoneme = NULL;

	if (fDoc && fDoc->GetAudioPlayer())
	{
		fDragging = true;

		if (fDoc->fCurrentVoice)
		{ // test to see if the user clicked on a phrase, word, or phoneme
			// first, find the phrase that was clicked on
			for (int32 i = 0; i < fDoc->fCurrentVoice->fPhrases.size(); i++)
			{
				if (frame >= fDoc->fCurrentVoice->fPhrases[i]->fStartFrame && frame <= fDoc->fCurrentVoice->fPhrases[i]->fEndFrame)
				{
					fSelectedPhrase = fDoc->fCurrentVoice->fPhrases[i];
					break;
				}
			}
			// next, find the word that was clicked on
			if (fSelectedPhrase)
			{
				for (int32 i = 0; i < fSelectedPhrase->fWords.size(); i++)
				{
					if (frame >= fSelectedPhrase->fWords[i]->fStartFrame && frame <= fSelectedPhrase->fWords[i]->fEndFrame)
					{
						fSelectedWord = fSelectedPhrase->fWords[i];
						break;
					}
				}
			}
			// finally, find the phoneme that was clicked on
			if (fSelectedWord)
			{
				for (int32 i = 0; i < fSelectedWord->fPhonemes.size(); i++)
				{
					if (frame == fSelectedWord->fPhonemes[i]->fFrame)
					{
						fSelectedPhoneme = fSelectedWord->fPhonemes[i];
						break;
					}
				}
			}

            if (fDoc->fRepeat)
            {
                if (mouseY >= fSelectedPhrase->fTop && mouseY <= fSelectedPhrase->fBottom)  // we clicked on a phrase
                {
                    fDoc->fRepeatPhrase = fSelectedPhrase;
                    fDoc->fRepeatWord = NULL;
                }
                if (fSelectedWord && mouseY >= fSelectedWord->fTop && mouseY <= fSelectedWord->fBottom)
                {
                    fDoc->fRepeatWord = fSelectedWord;
                    fDoc->fRepeatPhrase = NULL;
                }
            }

			fParentPhrase = fSelectedPhrase;
			fParentWord = fSelectedWord;

			// now, test if the click was within the vertical range of one of these objects
			if (fSelectedPhrase && mouseY >= fSelectedPhrase->fTop && mouseY <= fSelectedPhrase->fBottom)
			{
				fSelectedWord = NULL;
				fSelectedPhoneme = NULL;
				fDraggingEnd = 0; // beginning of phrase
				frameDist = frame - fSelectedPhrase->fStartFrame;
				if ((fSelectedPhrase->fEndFrame - frame) < frameDist)
				{
					fDraggingEnd = 1; // end of phrase
					frameDist = fSelectedPhrase->fEndFrame - frame;
				}
				if ((fSelectedPhrase->fEndFrame - fSelectedPhrase->fStartFrame > 1) &&
						(PG_FABS((fSelectedPhrase->fEndFrame + fSelectedPhrase->fStartFrame) / 2 - frame) < frameDist))
				{
					fDraggingEnd = 2; // middle of phrase
				}
			}
			else if (fSelectedWord && mouseY >= fSelectedWord->fTop && mouseY <= fSelectedWord->fBottom)
			{
				fSelectedPhrase = NULL;
				fSelectedPhoneme = NULL;
				fDraggingEnd = 0; // beginning of word
				frameDist = frame - fSelectedWord->fStartFrame;
				if ((fSelectedWord->fEndFrame - frame) < frameDist)
				{
					fDraggingEnd = 1; // end of word
					frameDist = fSelectedWord->fEndFrame - frame;
				}
				if ((fSelectedWord->fEndFrame - fSelectedWord->fStartFrame > 1) &&
						(PG_FABS((fSelectedWord->fEndFrame + fSelectedWord->fStartFrame) / 2 - frame) < frameDist))
				{
					fDraggingEnd = 2; // middle of phrase
				}
			}
			else if (fSelectedPhoneme && mouseY >= fSelectedPhoneme->fTop && mouseY <= fSelectedPhoneme->fBottom)
			{
				fSelectedPhrase = NULL;
				fSelectedWord = NULL;
				fDraggingEnd = 0;
			}
			else
			{
				fSelectedPhrase = fParentPhrase = NULL;
				fSelectedWord = fParentWord = NULL;
				fSelectedPhoneme = NULL;
			}

			if (fSelectedPhrase == NULL && fSelectedWord == NULL && fSelectedPhoneme == NULL)
			{
				mouseMoveEvent(event);
			}
			if (event->button() == Qt::RightButton && fSelectedWord)
			{
				fDragging = false;
			}
			else if (fDoubleClick)
			{
                playSegment(fSelectedPhrase, fSelectedWord, fSelectedPhoneme, fScrubFrame);

				fDragging = false;
				fDraggingEnd = -1;
				fSelectedPhrase = NULL;
				fSelectedWord = NULL;
				fSelectedPhoneme = NULL;
			}
		}
	}
}