AutoHotKey и Сонар

  • Автор темы Автор темы Vovchik
  • Дата начала Дата начала
С треками как раз нет проблем, для Track Envelopes можно назначить keybind шорткаты. А для миди клипов только один энвелоп предусмотрен - Velocity. Честно говоря, я даже не знаю, зачем он нужен и никогда не пользуюсь.

Ты вот другую вещь скажи. Нельзя ли сделать калькулятор, который бы оперировал числами в виде HH:MM:SS:FF, то есть SMPTE - часы, минуты, секунды, кадры. Сейчас объясню, зачем мне это надо. Иногда, а вернее довольно часто, мне приходится менять темп в определенной части проекта. Задача усложняется тем, что темп непостоянный - где-то замедление ,ускорение небольшое, возврат к основному темпу - и просто так указать новый темп нельзя. Единственный путь - это применить Fit To Time. Вот тут и начинается мегагемор. Спрашивается, что именно я должен ввести в поле New Thru, если мне надо поменять темп, скажем, со 120 на 125? Для начала выясняем соотношение новый/старый темп, в данном случае это 1.042. Теперь надо то число, что стоит в поле New Thru - допустим, 00:01:45:12 - разделить на 1.042. Как это можно посчитать?
 
Vovchik
Не уверен, но может это поможет...

Я бы написал такую программулину на бейсике... Но давно прошли те времена. В современных языках не силен. Хотя могу попробывать написать на PHP, но куда его вставить? Разве через интернет эксплоуэр открывать :smile:
 
Originally posted by bant

Не уверен, но может это поможет...
Не совсем то. Я имел в виду вот это (только что нашел):
http://www.highend3d.com/downloads/tools/t...ulators/91.html
Процесс вычисления нового темпа выглядит так:
Выделяю часть проекта, нахожу соотношение Новый/Старый темп. Допустим, в начале выделенного участка темп 100, далее отклонения; я хочу изменить начальный темп на 110 и пропорционально сохранить отклонения. Делим 110 на 100 - получаем пропорцию (Ratio) 1.1.
Запускаю Fit To Time, узнаю длину выделенного участка: Thru - From = Selection Length. Делю Selection Length / Ratio = NewSelLength (будущая длина выделенного участка с новыми темпами). Складываю NewSelLength + From = New Thru.
И всё равно новый темп получается не точно, плюс-минус несколько сотых.
Вот если бы можно было все эти вычисления свести в одну формулу.
Типа:

New Thru = From + ((Thru - From) / (New Tempo / Old Tempo))

Здесь Tempo выражено в обычных числах, а From и Thru - в SMPTE.
 
Думаю, вот так разрядность сетки (в PianoRoll) можно просто пошагово уменьшать и увеличивать:

#x::
{
Send, +n
WinWait, Snap To Grid,
IfWinNotActive, Snap To Grid, , WinActivate, Snap To Grid,
WinWaitActive, Snap To Grid,
Send, {TAB}{DOWN}{ENTER}
}
return

#z::
{
Send, +n
WinWait, Snap To Grid,
IfWinNotActive, Snap To Grid, , WinActivate, Snap To Grid,
WinWaitActive, Snap To Grid,
Send, {TAB}{UP}{ENTER}
}
return
 
Да, действительно это удобно. За исключением одного недостатка: нельзя нигде видеть, каково текущее разрешение сетки. По идее, для этого существует кнопка Show/Hide Grids; там же можно выбрать Follow Snap Settings. Но беда в том, что после смены Snap-разрешения сетка остается в предыдущем разрешении, и обновить ее можно только если ткнуть в эту маленькую стрелку рядом с кнопкой Show/Hide Grids.
 
<div class='quotetop'>QUOTE(\"Vovchik\")</div>
и обновить ее можно только если ткнуть в эту маленькую стрелку рядом с кнопкой Show/Hide Grids.[/b]
Так можно
MouseGetPos - запоминаем где был указатель
MouseMove - перемещаем его на стрелку
MouseClick - нажимаем на нее
MouseMove возвращаем указатель обратно.
 
MouseGetPos, x, y
MouseMove, х координата стрелки, у координата стрелки
MouseClick, left
MouseMove, х, у

Координаты стрелки с помощью AutoIt3 Window Spy
 
  • Like
Реакции: Versia Nova
Хорошо, коодинаты стрелки получим, а если всё окно Piano Roll сдвинуть? Координаты ведь нужны будут другие.
 
Originally posted by Vovchik
Да, действительно это удобно. За исключением одного недостатка: нельзя нигде видеть, каково текущее разрешение сетки. По идее, для этого существует кнопка Show/Hide Grids; там же можно выбрать Follow Snap Settings. Но беда в том, что после смены Snap-разрешения сетка остается в предыдущем разрешении, и обновить ее можно только если ткнуть в эту маленькую стрелку рядом с кнопкой Show/Hide Grids.

Да, это существенный недостаток. Вот если только попытаться добавить в этот же скрипт работу с Show/Hide Grids... Сейчас буду пробовать.
 
<div class='quotetop'>QUOTE(\"Vovchik\")</div>
Координаты ведь нужны будут другие.[/b]
Нужно относительные координаты вводить . Window Spy показывает абсолютные координаты под курсором и относительно к верхнему левому углу активного окна ,в данном случае Piano Roll.
 
Originally posted by Vovchik
сетка остается в предыдущем разрешении, и обновить ее можно только если ткнуть в эту маленькую стрелку рядом с кнопкой Show/Hide Grids.

Попробуем вот так:

#x::
{
Send, +n
WinWait, Snap To Grid,
IfWinNotActive, Snap To Grid, , WinActivate, Snap To Grid,
WinWaitActive, Snap To Grid,
Send, {TAB}{DOWN}{ENTER}
MouseClick, Left, 599, 144
Send, {DOWN 10}{ENTER}
MouseClick, Left, 599, 144
Send, {DOWN 10}{ENTER}
}
return

#z::
{
Send, +n
WinWait, Snap To Grid,
IfWinNotActive, Snap To Grid, , WinActivate, Snap To Grid,
WinWaitActive, Snap To Grid,
Send, {TAB}{UP}{ENTER}
MouseClick, Left, 599, 144
Send, {DOWN 10}{ENTER}
MouseClick, Left, 599, 144
Send, {DOWN 10}{ENTER}
}
return

Только вот координаты MouseClick, видимо, придётся выставлять индивидуально, т.к. у стрелки нет своего текста.
 
Так я и не могу понять, как мне отследить координаты MouseClick внутри активного окна, а не относительно всего экрана.
 
Originally posted by Vovchik
Так я и не могу понять, как мне отследить координаты MouseClick внутри активного окна, а не относительно всего экрана.

Window Spy показывает отдельно Mouse Position для всего экрана и для активного окна.
 
Originally posted by bant
:lol: Это у меня был какойто глюк с версией...
Все поправил... :smile:  

Пробуем. Этот патч для Sonar 6.0.1 !!!

Какая-то непонятка... Когда я пропатчил, первый раз всё сработало замечачельно. Теперь же происходит вот что:

делаю правый клик на клипе - жму P, справа появляется

Create Track Envelope
Create Clip Envelope

Всё нормально, жму С, появляется

Gain
Pan

Жму G - и ничего, жму P - тоже ничего. То есть на подчеркнутую С в слове Clip реагирует, а на подчеркнутые G и P - нет.

Очень странно.
 
<div class='quotetop'>QUOTE(\"muszuck\")</div>
Window Spy показывает отдельно Mouse Position для всего экрана и для активного окна[/b]
Тьфу ты, а я пытался высмотреть координаты в AutoScriptWriter. Теперь понял.
 
Что-то концы с концами у меня не сходятся.
Window Spy не считает Piano Roll за активное окно и показывает координаты курсора по отношению ко всему окну Сонара. Активным окном, с точки зрения Window Spy, Piano Roll становится только в том случае ,если его переключить в режим Enable Floating. Вот тогда да, можно видеть координаты курсора для той маленькой стрелки внутри окна Piano Roll.
НО!
В режиме Enable Floating становится недоступным Follow Snap!
 
Так и должно быть. Ставь координаты In Active Window .Я пытаюсь скачать сонар и за выходных чуть поправлю ваш скрипт.
 
Vovchik


fps=29.97 ; фраймов в секунду ,может быть 23.976 , 24 , 25 , 29.97 ,30
;Тестовая строка в формате HH:MM:SS:FF
TestString = 05:44:33:11
;Тоже самое но уже разложенное
h=5
m=44
s=33
f=11

; Округление до меньшего целого, например 3.99 округлится до 3.
Floor(In_Val)
{
local Ret_Val
Transform, Ret_Val, Floor, %In_Val%
return Ret_Val  
}
;
;Функция преобразования SMPTE в количество фрэймов

smpte2frames(h,m,s,f,fps)
{
return h*3600*fps+m*60*fps+s*fps+f
}
;
;Преобразование количество фрэймов в SMPTE строку в формате HH:MM:SS:FF
FormatSMPTE(frames,fps)
{
Sec_in_SMPTE:=Floor(frames/fps)
Frames_in_SMPTE:=Round(frames-Sec_in_SMPTE*fps)
time = 20060707  ; Дата,любая :)
time += %Sec_in_SMPTE%, seconds
FormatTime, mmss, %time%,hh:mm:ss
return mmss \":\" Frames_in_SMPTE
}
; Преобразование  строки в виде HH:MM:SS:FF в массив где num=1 это часы num=2 - минуты и т.д.
smptestr2time(smptestr,num)
{
StringSplit, time_array, smptestr,:,%A_Space%
return time_array%num%
}


;)Проверяем:
sframes:=Round(smpte2frames(h,m,s,f,fps))
stime:=FormatSMPTE(sframes,fps)
strsec:=1*smptestr2time(TestString,1)
MsgBox,Кличество фрэмов в %stime%  равняется %sframes%

MsgBox,Часов в %stime%  равно %strsec%  : )
Идея переводить и считать во фрэймах и выводить в SMPTE.
Осталось ввести формулу и GUI,поэтому вопрос как должно быть :
два поля для SMPTE , два для темпа и одно для результата в SMPTE?
 
Я думаю, можно сделать четыре поля:

-------------------------------------
Source Tempo | Destination Tempo

Current THRU | NEW THRU
------------------------------------

Желательна возможность Copy/Paste в поля.
 
Да, еще вдогонку мааааленькое соображение. Слово OLD применимо к возрасту. По-русски можно сказать "старик, старый человек" = "old man" и "молодой" = "young". Можно так же сказать "старый темп" = "бывший" и "новый темп". По-английски нельзя сказать "old tempo" - темп ведь не сможет состариться, как человек. В данном случае более уместными будут пары "source - destination" или "current - new".
 
Vovchic
Посмотреть вложение 6249
А в личку отправил сам скрипт. Поправишь сам.Там я назначил на вычисление Win F.
Копируем по Control C в сонаре например в формате hh:mm:ss:ff запускаем
эту прогу правим темп и нажимаем Calc и в буфере обмена появится результат.
 
Большое спасибо! Отлично работают и ексешник и скрипт. Вот что значит профессионал!:beer:

Видимо, из-за того, что SMPTE всё-таки имеет довольно грубое разрешение, новый темп получается плюс-минус несколько сотых. Но это ерунда. Что поделать, ведь Fit To Time не позволяет вводить данные в более точных единицах, например, в миллисекундах.
 
A для Сонара 6.2 скрипт никто не нарисовал еще, а? А то что то глючит старый! А оч удобно было :(
Спасибо!
 
Что за глюки?

А вообще-то вполне возможно. Ведь скрипт отслеживает реальные пути по меню, а в разных версиях они могут отличаться. Больше того, если меню отредактированы, в скрипте это тоже должно быть отражено.
 
<div class='quotetop'>Цитата(Vovchik @ Feb 11 2007, 04:43 PM) [snapback]407671[/snapback]</div>
Что за глюки?

А вообще-то вполне возможно. Ведь скрипт отслеживает реальные пути по меню, а в разных версиях они могут отличаться. Больше того, если меню отредактированы, в скрипте это тоже должно быть отражено.
[/b]

Я пользуюсь скриптом исключительно для назначениия на клип гейна, с первого клика не назначается, со второго иногда назначается, иногда хоть убей нет, закономерность не вычислил :(
Спасибо!

Да меню хоть и редактировал но сейчас стоит дефолтное.
А у Вас скрипт заработал сразу старый, или все же новый нарисовали?

Если не трудно скиньте работающий под сонар 6.2 скрипт.
Спасибо.
 

Сейчас просматривают