double GetMidiSourceLengthPPQ (MediaItem_Take* take, bool accountPlayrateIfIgnoringProjTempo, bool* isMidiSource /*=NULL*/) { bool isMidi = false; double length = 0; if (take && IsMidi(take)) { MediaItem* item = GetMediaItemTake_Item(take); double itemStart = GetMediaItemInfo_Value(item, "D_POSITION"); double takeOffset = GetMediaItemTakeInfo_Value(take, "D_STARTOFFS"); double sourceLength = GetMediaItemTake_Source(take)->GetLength(); double startPPQ = MIDI_GetPPQPosFromProjTime(take, itemStart - takeOffset); double endPPQ = MIDI_GetPPQPosFromProjTime(take, itemStart - takeOffset + sourceLength); isMidi = true; length = endPPQ - startPPQ; if (accountPlayrateIfIgnoringProjTempo) { bool ignoreProjTempo; if (GetMidiTakeTempoInfo(take, &ignoreProjTempo, NULL, NULL, NULL) && ignoreProjTempo) length /= GetMediaItemTakeInfo_Value(take, "D_PLAYRATE"); } } WritePtr(isMidiSource, isMidi); return length; }
bool SNM_GetSourceType(MediaItem_Take* _tk, WDL_FastString* _type) { if (_tk && _type) if (PCM_source* source = GetMediaItemTake_Source(_tk)) { _type->Set(source->GetType()); return true; } return false; }
bool IsOpenInInlineEditor (MediaItem_Take* take) { bool inProject = false; if (GetActiveTake(GetMediaItemTake_Item(take)) == take && IsMidi(take, &inProject) && inProject) { if (PCM_source* source = GetMediaItemTake_Source(take)) { if (source->Extended(PCM_SOURCE_EXT_INLINEEDITOR, 0, 0, 0) > 0) return true; } } return false; }
bool IsMidi (MediaItem_Take* take, bool* inProject /*= NULL*/) { if (PCM_source* source = GetMediaItemTake_Source(take)) { const char* type = source->GetType(); if (!strcmp(type, "MIDI") || !strcmp(type, "MIDIPOOL")) { if (inProject) { const char* fileName = source->GetFileName(); *inProject = (fileName && !strcmp(fileName, "")); } return true; } } WritePtr(inProject, false); return false; }