static void MidiTakePreviewTimer () { if (g_itemPreviewPlaying) { #ifdef _WIN32 EnterCriticalSection(&g_ItemPreview.cs); #else pthread_mutex_lock(&g_ItemPreview.mutex); #endif // Have we reached the end? if (g_ItemPreview.curpos >= g_ItemPreview.src->GetLength()) { #ifdef _WIN32 LeaveCriticalSection(&g_ItemPreview.cs); #else pthread_mutex_unlock(&g_ItemPreview.mutex); #endif MidiTakePreview(0, NULL, NULL, 0, 0, 0, false); plugin_register("-timer",(void*)MidiTakePreviewTimer); } else { #ifdef _WIN32 LeaveCriticalSection(&g_ItemPreview.cs); #else pthread_mutex_unlock(&g_ItemPreview.mutex); #endif } } else { plugin_register("-timer",(void*)MidiTakePreviewTimer); } }
static void MidiTakePreviewTimer () { bool stopPreview = true; if (g_itemPreviewPlaying) { #ifdef _WIN32 EnterCriticalSection(&g_ItemPreview.cs); #else pthread_mutex_lock(&g_ItemPreview.mutex); #endif // Have we reached the end? stopPreview = (g_ItemPreview.curpos >= g_ItemPreview.src->GetLength()); #ifdef _WIN32 LeaveCriticalSection(&g_ItemPreview.cs); #else pthread_mutex_unlock(&g_ItemPreview.mutex); #endif } if (stopPreview) MidiTakePreview(0, NULL, NULL, 0, 0, 0, false); }
void ME_PreviewActiveTake (COMMAND_T* ct, int val, int valhw, int relmode, HWND hwnd) { if (MediaItem_Take* take = MIDIEditor_GetTake(MIDIEditor_GetActive())) { MediaItem* item = GetMediaItemTake_Item(take); vector<int> options = GetDigits((int)ct->user); int toggle = options[0]; int type = options[1]; int selNotes = options[2]; int pause = options[3]; MediaTrack* track = GetMediaItem_Track(item); double volume = GetMediaItemInfo_Value(item, "D_VOL"); double start = 0; double measure = (type == 3) ? 1 : 0; bool pausePlay = (pause == 2) ? true : false; if (type == 2) { double mousePosition = ME_PositionAtMouseCursor(true, true); if (mousePosition != -1) start = mousePosition - GetMediaItemInfo_Value(item, "D_POSITION"); else return; } vector<int> muteState; if (selNotes == 2 && !AreAllNotesUnselected(take)) muteState = MuteSelectedNotes(take); MidiTakePreview(toggle, take, track, volume, start, measure, pausePlay); if (muteState.size() > 0) SetMutedNotes(take, muteState); } }
/****************************************************************************** * Commands * ******************************************************************************/ void ME_StopMidiTakePreview (COMMAND_T* ct, int val, int valhw, int relmode, HWND hwnd) { MidiTakePreview(0, NULL, NULL, 0, 0, 0, false); }
void MidiTakePreviewPlayState (bool play, bool rec) { if (g_itemPreviewPlaying && (!play || rec || (g_itemPreviewPaused && play))) MidiTakePreview(0, NULL, NULL, 0, 0, 0, false); }
void ME_PreviewActiveTake (COMMAND_T* ct, int val, int valhw, int relmode, HWND hwnd) { HWND midiEditor = MIDIEditor_GetActive(); if (MediaItem_Take* take = MIDIEditor_GetTake(midiEditor)) { MediaItem* item = GetMediaItemTake_Item(take); vector<int> options = GetDigits((int)ct->user); int toggle = options[0]; int type = options[1]; int selNotes = options[2]; int pause = options[3]; MediaTrack* track = GetMediaItem_Track(item); double volume = GetMediaItemInfo_Value(item, "D_VOL"); double start = 0; double measure = (type == 3) ? 1 : 0; bool pausePlay = (pause == 2) ? true : false; if (type == 2) { double mousePosition = ME_PositionAtMouseCursor(true, true); if (mousePosition != -1) { if (GetToggleCommandState2(SectionFromUniqueID(SECTION_MIDI_EDITOR), 40470) > 0) // Timebase: Beats(source) start = mousePosition - MIDI_GetProjTimeFromPPQPos(take, 0); else start = mousePosition - GetMediaItemInfo_Value(item, "D_POSITION"); } else return; } vector<int> muteState; if (selNotes == 2) { if (!AreAllNotesUnselected(take)) { muteState = MuteUnselectedNotes(take); if (type != 2) { BR_MidiEditor editor(midiEditor); double time; MIDI_GetNote(take, FindFirstSelectedNote(take, &editor), NULL, NULL, &time, NULL, NULL, NULL, NULL); start = MIDI_GetProjTimeFromPPQPos(take, time) - GetMediaItemInfo_Value(item, "D_POSITION"); if (start < 0) start = 0; } } else if (type != 2) { BR_MidiEditor editor(midiEditor); int id = FindFirstNote(take, &editor); if (id != -1) { double time; MIDI_GetNote(take, id, NULL, NULL, &time, NULL, NULL, NULL, NULL); start = MIDI_GetProjTimeFromPPQPos(take, time) - GetMediaItemInfo_Value(item, "D_POSITION"); if (start < 0) start = 0; } } } MidiTakePreview(toggle, take, track, volume, start, measure, pausePlay); if (muteState.size() > 0) SetMutedNotes(take, muteState); } }