From fd4b8b662a97c9408cefeb10d7a14d75ee3bb6d2 Mon Sep 17 00:00:00 2001 From: Matesaktesak <46134697+Matesaktesak@users.noreply.github.com> Date: Sat, 26 Jan 2019 17:34:50 +0100 Subject: [PATCH] Midi support for Premiere This script is connecting my Launch control XL (or any other midi controller) to Premiere! (I made it as an attempt to create "poor man's palette gear") - It lags A LOT! Try it (I use it every day) but it isn't a very pleasant experience... Please don't mind the emoji variable names :-) --- LaunchControlXLPremiere.ahk | 634 ++++++++++++++++++++++++++++++++++++ 1 file changed, 634 insertions(+) create mode 100644 LaunchControlXLPremiere.ahk diff --git a/LaunchControlXLPremiere.ahk b/LaunchControlXLPremiere.ahk new file mode 100644 index 0000000..3b6bf03 --- /dev/null +++ b/LaunchControlXLPremiere.ahk @@ -0,0 +1,634 @@ +#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. +;#Warn ; Enable warnings to assist with detecting common errors. +#SingleInstance force +SendMode Input ; Recommended for new scripts due to its superior speed and reliability. +SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. +Gui, +LastFound + +Menu, Tray, Icon , midi.ico + +CoordMode, Mouse, Screen +CoordMode, Pixel, Screen + +#include Midi.ahk + +midi := new Midi() +midi.OpenMidiIn(0) +Return + +MidiControlChange31: ;Temparature + ChangeLumetriScale(3, midi.MidiIn().Value, -100, 100, -5) + Sleep, 10 +Return + +MidiControlChange41: ;Temperature Reset + ChangeLumetriValue(290,0) +Return + +MidiControlChange32: ;Tint + ChangeLumetriScale(4, midi.MidiIn().Value, -100, 100, -3.9) + Sleep, 10 +Return + +MidiControlChange42: ;Tint Reset + ChangeLumetriValue(315,0) +Return + +MidiControlChange33: ;Exposure + ChangeLumetriScale(5, midi.MidiIn().Value, -5, 5, -0.3) + Sleep, 10 +Return + +MidiControlChange43: ;Exposure Reset + ChangeLumetriValue(370,0) +Return + +MidiControlChange34: ;Highlights + ChangeLumetriScale(7, midi.MidiIn().Value, -100, 100, -5.5) + Sleep, 10 +Return + +MidiControlChange44: ;Highlights Reset + ChangeLumetriValue(425, 0) +Return + +MidiControlChange35: ;Shadows + ChangeLumetriScale(450, midi.MidiIn().Value, -100, 100, -5.5) + Sleep, 10 +Return + +MidiControlChange45: ;Shadows Reset + ChangeLumetriValue(450,0) +Return + +MidiControlChange36: ;Whites + ChangeLumetriScale(475, midi.MidiIn().Value, -100, 100, -5.5) + Sleep, 10 +Return + +MidiControlChange46: ;Whites Reset + ChangeLumetriValue(475,0) +Return + +MidiControlChange37: ;Blacks + ChangeLumetriScale(500, midi.MidiIn().Value, -100, 100, -5.5) + Sleep, 10 +Return + +MidiControlChange47: ;Blacks Reset + ChangeLumetriValue(500,0) +Return + +MidiControlChange38: ;Saturation + ChangeLumetriScale(580, midi.MidiIn().Value, 0, 200, -5.5) + Sleep, 10 +Return + +MidiControlChange48: ;Saturation Reset + ChangeLumetriValue(580,100) +Return + +MidiControlChange5: ;Sharpness + ChangeLumetriScale(584836722, midi.MidiIn().Value, -100, 100, -5.5) + Sleep, 10 +Return + +bypass := 0 +MidiControlChange61: ;Bypass + if(bypass = 0){ + Send ^+!F9 + Send ^+!{B down} + bypass = 1 + } else { + bypass = 0 + Send ^+!F9 + Send ^+!{B up} + } +Return + +;----------------------------- CLIP POS ----------------------------------- + +MidiControlChange1: ;X position + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + MouseGetPos, x1, y1 + PixelGetColor, color, 690, 1050 + if(color == 0x1D1D1D) { + MouseClick, L, 690, 1050, 1, 0 + } + PixelGetColor, kolor, 500, 1050 + if not(kolor == 0x232323){ + Send ^+!{F10} + Sleep 10 + Send ^!+{F5} + Send {Tab} + Sleep, 10 + + Send % Map(midi.MidiIn().Value, 0, 127, -960, 2880) + + Sleep, 20 + Send {Enter} + MouseMove, %x1%, %y1%, 0 + } + } +Return + +prevXFine := 0 + +MidiControlChange11: ;X position Fine-tune + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + MouseGetPos, x1, y1 + PixelGetColor, color, 690, 1050 + if(color == 0x1D1D1D) { + MouseClick, L, 690, 1050, 1, 0 + } + PixelGetColor, kolor, 500, 1050 + if not(kolor == 0x232323){ + Send ^!+{F10} + Sleep, 10 + Send ^!+{F5} + Send {Tab} + + ControlGetText, text, Edit1 + text := StrReplace(text, ",", ".") + Send % text + Map(midi.MidiIn().Value,0,127,-20,20) - prevXFine + Sleep, 20 + + Send {Enter} + MouseMove, %x1%, %y1%, 0 + + prevXFine := Map(midi.MidiIn().Value,0,127,-20,20) + } + } +Return + +MidiControlChange51: ;X position Reset + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + MouseGetPos, x1, y1 + PixelGetColor, color, 690, 1050 + if(color == 0x1D1D1D) { + MouseClick, L, 690, 1050, 1, 0 + } + PixelGetColor, kolor, 500, 1050 + if not(kolor == 0x232323){ + Send ^+!{F10} + Sleep 10 + Send ^!+{F5} + Send {Tab} + Sleep, 10 + + Send 960 + + Sleep, 20 + Send {Enter} + MouseMove, %x1%, %y1%, 0 + } + } +Return + +MidiControlChange2: ;Y position + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + MouseGetPos, x1, y1 + PixelGetColor, color, 690, 1050 + if(color == 0x1D1D1D) { + MouseClick, L, 690, 1050, 1, 0 + } + PixelGetColor, kolor, 500, 1050 + if not(kolor == 0x232323){ + Send ^+!{F10} + Sleep 10 + Send ^!+{F5} + Send {Tab 2} + Sleep, 10 + + Send % Map(midi.MidiIn().Value, 0, 127, -540, 1620) + + Sleep, 20 + Send {Enter} + MouseMove, %x1%, %y1%, 0 + } + } +Return + +prevYFine := 0 + +MidiControlChange12: ;Y position Fine-tune + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + MouseGetPos, x1, y1 + PixelGetColor, color, 690, 1050 + if(color == 0x1D1D1D) { + MouseClick, L, 690, 1050, 1, 0 + } + PixelGetColor, kolor, 500, 1050 + if not(kolor == 0x232323){ + Send ^!+{F10} + Sleep, 10 + Send ^!+{F5} + Send {Tab 2} + + Sleep 20 + + ControlGetText, text, Edit1 + text := StrReplace(text, ",", ".") + Sleep 5 + Send % text + Map(midi.MidiIn().Value,0,127,-20,20) - prevYFine + Sleep, 20 + + Send {Enter} + MouseMove, %x1%, %y1%, 0 + + prevYFine := Map(midi.MidiIn().Value,0,127,-20,20) + } + } +Return + + +MidiControlChange52: ;Y position Reset + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + MouseGetPos, x1, y1 + PixelGetColor, color, 690, 1050 + if(color == 0x1D1D1D) { + MouseClick, L, 690, 1050, 1, 0 + } + PixelGetColor, kolor, 500, 1050 + if not(kolor == 0x232323){ + Send ^+!{F10} + Sleep 10 + Send ^!+{F5} + Send {Tab 2} + Sleep, 10 + + Send 540 + + Sleep, 20 + Send {Enter} + MouseMove, %x1%, %y1%, 0 + } + } +Return + +MidiControlChange4: ;Scale + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + MouseGetPos, x1, y1 + PixelGetColor, color, 690, 1050 + if(color == 0x1D1D1D) { + MouseClick, L, 690, 1050, 1, 0 + } + PixelGetColor, kolor, 500, 1050 + if not(kolor == 0x232323){ + Send ^+!{F10} + Sleep 10 + Send ^!+{F5} + Send {Tab 3} + Sleep, 10 + + Send % Map(midi.MidiIn().Value, 0, 127, 0, 350) + + Sleep, 20 + Send {Enter} + MouseMove, %x1%, %y1%, 0 + } + } +Return + +MidiControlChange54: ;Scale Reset + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + MouseGetPos, x1, y1 + PixelGetColor, color, 690, 1050 + if(color == 0x1D1D1D) { + MouseClick, L, 690, 1050, 1, 0 + } + PixelGetColor, kolor, 500, 1050 + if not(kolor == 0x232323){ + Send ^+!{F10} + Sleep 10 + Send ^!+{F5} + Send {Tab 3} + Sleep, 10 + + Send 100 + + Sleep, 20 + Send {Enter} + MouseMove, %x1%, %y1%, 0 + } + } +Return + +MidiControlChange3: ;Rotation + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + MouseGetPos, x1, y1 + PixelGetColor, color, 690, 1050 + if(color == 0x1D1D1D) { + MouseClick, L, 690, 1050, 1, 0 + } + PixelGetColor, kolor, 500, 1050 + if not(kolor == 0x232323){ + Send ^+!{F10} + Sleep 10 + Send ^!+{F5} + Send {Tab 5} + Sleep, 10 + + Send % Map(midi.MidiIn().Value, 0, 127, -190, 190) + + Sleep, 5 + Send {Enter} + MouseMove, %x1%, %y1%, 0 + } + } +Return + +rotationFine := 0 + +MidiControlChange13: ;Rotation Fine-tune + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + MouseGetPos, x1, y1 + PixelGetColor, color, 690, 1050 + if(color == 0x1D1D1D) { + MouseClick, L, 690, 1050, 1, 0 + } + PixelGetColor, kolor, 500, 1050 + if not(kolor == 0x232323){ + Send ^!+{F10} + Sleep, 10 + Send ^!+{F5} + Send {Tab 5} + + Sleep 90 + + ControlGetText, text, Edit1 + text := StrReplace(text, ",", ".") + Sleep 20 + Send % text + Map(midi.MidiIn().Value,0,127,-20,20) - rotationFine + Sleep, 5 + + Send {Enter} + MouseMove, %x1%, %y1%, 0 + + rotationFine := Map(midi.MidiIn().Value,0,127,-20,20) + } + } +Return + + +MidiControlChange53: ;Rotation Reset + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + MouseGetPos, x1, y1 + PixelGetColor, color, 690, 1050 + if(color == 0x1D1D1D) { + MouseClick, L, 690, 1050, 1, 0 + } + PixelGetColor, kolor, 500, 1050 + if not(kolor == 0x232323){ + Send ^+!{F10} + Sleep 10 + Send ^!+{F5} + Send {Tab 5} + Sleep, 10 + + Send 0 + + Sleep, 20 + Send {Enter} + MouseMove, %x1%, %y1%, 0 + } + } +Return + +MidiControlChange14: ;Opacity + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + MouseGetPos, x1, y1 + PixelGetColor, color, 690, 1050 + if(color == 0x1D1D1D) { + MouseClick, L, 690, 1050, 1, 0 + } + PixelGetColor, kolor, 500, 1050 + if not(kolor == 0x232323){ + Send ^+!{F10} + Sleep 10 + Send ^!+{F5} + Send +{Tab 3} + Sleep, 10 + + Send % Map(midi.MidiIn().Value, 0, 127, 0, 105) + + Sleep, 5 + Send {Enter} + MouseMove, %x1%, %y1%, 0 + } + } +Return + +MidiControlChange55: ;Opacity Reset + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + MouseGetPos, x1, y1 + PixelGetColor, color, 690, 1050 + if(color == 0x1D1D1D) { + MouseClick, L, 690, 1050, 1, 0 + } + PixelGetColor, kolor, 500, 1050 + if not(kolor == 0x232323){ + Send ^+!{F10} + Sleep 10 + Send ^!+{F5} + Send +{Tab 3} + Sleep, 10 + + Send 100 + + Sleep, 20 + Send {Enter} + MouseMove, %x1%, %y1%, 0 + } + } +Return + +;----------------------------- Audio -------------------------------------- + +MidiControlChange6: + ChangeAudioTrackVolume(midi.MidiIn().value, 1) + Sleep 10 +Return + +MidiControlChange7: + ChangeAudioTrackVolume(midi.MidiIn().value, 2) + Sleep 10 +Return + +MidiControlChange8: + ChangeAudioTrackVolume(midi.MidiIn().value, 3) + Sleep 10 +Return + +;----------------------------- Functions ---------------------------------- +global huvavavax1 = 0 +global huvavavay1 = 0 +global prevTime := %A_Now% + 20 +global prevTrack = 1 +ChangeAudioTrackVolume(volue, track){ + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + SetTimer, EEEndung, Delete + ;MsgBox, %A_Now% = %prevTime% + if(prevTime = "" OR (%A_Now% - prevTime) > 1000 or not prevTrack == track){ + Blockinput, MouseMove + MouseGetPos, huvavavax1, huvavavay1 + PixelGetColor, culor, 3645, 813 + if(culor == 0x1D1D1D) { + MouseClick, L, 3645, 813, 1, 0 + ;MsgBox, 1 + } + PixelGetColor, culor, 3190, 822 + if(kulor == 0x1D1D1D) { + MouseClick, L, 3190, 822, 1, 0 + ;MsgBox, 2 + } + PixelGetColor, kolor, 3220 + (track-1) * 96, 800 + if not(kolor == 0x212121){ + Send ^+!{F10} + Sleep 5 + Send ^!+{F6} + Sleep 5 + MouseMove, 3200 + (track-1) * 96, 787, 0 + Sleep 7 + } + } + MouseClick, L + Sleep, 5 + Send % MapLog(volue) + Sleep, 5 + + Send ^+!{F4} + SetTimer, EEEndung, On, 1000 + prevTime = %A_Now% + prevTrack = track + } +} + +EEEndung: + SetTimer, EEEndung, Delete + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + MouseMove, %huvavavax1%, %huvavavay1%, 0 + Blockinput, MouseMoveOff + prevTime = + ;MsgBox, y + } +return + +ChangeLumetriScale(yLometraka, valu, lim1, lim2, ofset){ + if(yLometraka == 584836722){ ; Sharpnes + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + MouseGetPos, x1, y1 + CoordMode, pixel + + ImageSearch, 😄, ☺️, 2156, 178, 2226, 206, C:\Users\matya\Desktop\PremiereAHK\LumetriCreative.png ; if the "Creative" is open - don't mind the emoji varieble names.. :-) + if (ErrorLevel == 0) { + goto WhateverPoint ; skip opening it... + Sleep, 10 + } + + ImageSearch, 😄, ☺️, 2260, 252, 2288, 281, C:\Users\matya\Desktop\PremiereAHK\kapatko.png ; if the "basic correction" is not open - don't mind the emoji varieble names.. :-) + if ErrorLevel { + MouseClick, L, 2200, 150, 1, 0 ; open the basic correction (MouseClick, button, x, y, count, speed) + Sleep, 20 + } + + MouseClick, L, 2200, 615, 1, 0 ; open the creative tab (MouseClick, button, x, y, count, speed) + + WhateverPoint: + + Send ^+!{F10} + Sleep 10 + Send ^!+{F9} + Send {Tab 4} + Sleep 20 + + Send % Map(valu, 0, 127, lim1, lim2) - ofset + + Sleep, 5 + Send {Enter} + MouseMove, %x1%, %y1%, 0 + } + + goto Ebudung + } + + if(yLometraka < 426){ ; it it doesn't make sense to use tabs but it is better to use mouse + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + MouseGetPos, x1, y1 + CoordMode, pixel + + ImageSearch, 😄, ☺️, 2260, 252, 2288, 281, C:\Users\matya\Desktop\PremiereAHK\kapatko.png ; if the "basic correction" is not open - don't mind the emoji varieble names.. :-) + if ErrorLevel { + MouseClick, L, 2200, 150, 1, 0 ; open the basic correction (MouseClick, button, x, y, count, speed) + Sleep, 10 + } + + Send ^+!{F10} + Sleep 10 + Send ^!+{F9} + Send {Tab %yLometraka%} + Sleep % yLometraka * 10 + + Send % Map(valu, 0, 127, lim1, lim2) - ofset + + Sleep, 5 + Send {Enter} + MouseMove, %x1%, %y1%, 0 + } + }else{ + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + MouseGetPos, x1Trol, y1Lol + + PixelGetColor, opn, 2196, 289 + if(opn !== "0180FD") { + MouseMove, 2100, 150, 0 + MouseClick, L + } + MouseMove, 2506, yLometraka, 0 + MouseClick, L + Sleep, 10 + Send % Map(valu, 0, 127, lim1, lim2) - ofset + Sleep, 20 + MouseMove, 47, 0, 0, R + MouseClick, L + MouseMove, %x1Trol%, %y1Lol%, 0 + Sleep, 40 + } + } + Ebudung: +} + +ChangeLumetriValue(yBubla, value){ + If WinActive("ahk_exe Adobe Premiere Pro.exe"){ + MouseGetPos, x1bubla, y1bubla + PixelGetColor, open, 2196, 289 + if(open !== "0180FD") { + MouseMove, 2100, 150, 0 + MouseClick, L + } + MouseMove, 2506, yBubla, 0 + MouseClick, L + Sleep, 10 + Send % value + Sleep, 20 + MouseMove, 47, 0, 0, R + MouseClick, L + MouseMove, %x1bubla%, %y1bubla%, 0 + Sleep, 40 + } +} + +Map(x, x1, x2, y1, y2){ + percent := (x2 - x1) / 100 + percent := (x - x1) / percent + result := (y2 - y1) / 100 * percent + y1 + result := floor(result * 100) / 100 + return %result% +} + +MapLog(inputi){ + if(inputi <= 64) output := 1.41 * inputi - 100 ; linear function for the lower end (lower sensitivity) + if(inputi > 64) output := 0.26 * inputi - 26.8 ; linear mapping funcion for the top half values (high sensitivity) + tooltip, %inputi% + return %output% +}