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; }
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; } } } }