//Transpose notes// #Transpose = "1";//Set Transpose Range VAR_FLAG = 0;// 1 for Notes Start-End in time Sel; 0 for Notes Start Only in time Sel function Transpose_Notes() (Undo_BeginBlock();//Start Undo Time_Sel_Start_PPQ = MIDI_GetPPQPosFromProjTime(ActiveTake, Time_Sel_Start);//Time Sel Start to PPQ Time_Sel_End_PPQ = MIDI_GetPPQPosFromProjTime(ActiveTake, Time_Sel_End);//Time Sel End Start to PPQ FNG_Take = extension_api("FNG_AllocMidiTake", ActiveTake);//Get FNG TAKE FNG_Count_Notes = extension_api("FNG_CountMidiNotes", FNG_Take);//Count_Notes in take //==Select Only Notes In Current Time Selection==// note_index=0; loop(FNG_Count_Notes, FNG_Note_ID = extension_api("FNG_GetMidiNote", FNG_Take, note_index);//GET FNG_Note_ID FNG_Note_Start_PPQ = extension_api("FNG_GetMidiNoteIntProperty", FNG_Note_ID , "POSITION");//note position(PPQ) VAR_FLAG ? FNG_Note_LENGTH_PPQ = extension_api("FNG_GetMidiNoteIntProperty", FNG_Note_ID , "LENGTH");//note lenght(PPQ)-ALSO SEE VAR_FLAG!!! (FNG_Note_Start_PPQ >= Time_Sel_Start_PPQ)&&(FNG_Note_Start_PPQ+FNG_Note_LENGTH_PPQ <= Time_Sel_End_PPQ) ? SEL=1 : SEL=0;//check!!! extension_api("FNG_SetMidiNoteIntProperty", FNG_Note_ID , "SELECTED" , SEL);//Sel-Unsel Notes note_index+=1; ); //==Operation With Selected Notes==// note_index=0; loop(FNG_Count_Notes, FNG_Note_ID = extension_api("FNG_GetMidiNote", FNG_Take, note_index);//GET Note_ID FNG_Note_Sel = extension_api("FNG_GetMidiNoteIntProperty", FNG_Note_ID , "SELECTED");//note prop //IF Note Selected-Apply Transpose FNG_Note_Sel ? (Curr_Pitch = extension_api("FNG_GetMidiNoteIntProperty", FNG_Note_ID , "PITCH");//note prop New_Pitch = Curr_Pitch + Transpose;New_Pitch<0?New_Pitch=0;New_Pitch>127?New_Pitch=127;//New_Pitch extension_api("FNG_SetMidiNoteIntProperty", FNG_Note_ID , "PITCH" , New_Pitch); Suc_Operation+=1; );//note prop note_index+=1; ); extension_api("FNG_FreeMidiTake", FNG_Take); #Undo_Text = "~Transposed " ;//Undo_Text strcat(#Undo_Text,sprintf(#str, "%d", Suc_Operation));//Compare Strings strcat(#Undo_Text,"-Notes: ");//Compare Strings strcat(#Undo_Text,sprintf(#str, "%d", Transpose));//Compare Strings Undo_EndBlock(#Undo_Text, -1);//End Und ); //=======================================================================================================// MediaItem = GetSelectedMediaItem(0, 0);//Get selected media item ActiveTake = GetActiveTake(MediaItem);//Get ActiveTake GetSet_LoopTimeRange(0,0, Time_Sel_Start, Time_Sel_End,0); //Get Current Time Sel Item_Start_Time = GetMediaItemInfo_Value(MediaItem, "D_POSITION"); Item_End_Time = Item_Start_Time+GetMediaItemInfo_Value(MediaItem, "D_LENGTH"); //OUT OF RANGE VERIFICATION - if the item is outside the time_selection,time_selection will be changed// (Item_Start_Time>=Time_Sel_Start && Item_Start_Time>=Time_Sel_End)|| (Item_End_Time<=Time_Sel_Start && Item_End_Time<=Time_Sel_End) ? (Time_Sel_Start = Item_Start_Time;Time_Sel_End = Item_End_Time; GetSet_LoopTimeRange(1,0, Time_Sel_Start, Time_Sel_End,0););//Set New Time Sel //=======================================================================================================// TakeIsMIDI(ActiveTake) ? //If ActiveTake is MIDI (GetUserInputs("Change Pitch", 1 , "Set Value", #Transpose) ? //If UserInput "OK" then (match("%i", #Transpose, Transpose);Transpose_Notes(););//Extract Velocity and Execuate Function ); UpdateArrange(); /*===Example for extension_api("FNG_GetMidiNoteIntProperty", FNG_Note_ID,prop) prop = "PITCH","CHANNEL","VELOCITY","POSITION","LENGTH","SELECTED"========== */