@@Michael, и видно, и фокусируется, буквально с первых секунд всё это можно наблюдать в мультике. Плюс я активно юзаю данный скрипт - после "просчёта" точек volume envelope автоматически оказывается в фокусе...
Впрочем, не важно, нет - так нет. На нет и суда нет.
EEL: int MB("msg", "title", int type)
Lua: integer reaper.MB(string msg, string title, integer type)
type 0=OK,1=OKCANCEL,2=ABORTRETRYIGNORE,3=YESNOCANCEL,4=YESNO,5=RETRYCANCEL
ret 1=OK,2=CANCEL,3=ABORT,4=RETRY,5=IGNORE,6=YES,7=NO
Например, для Lua:
reaper.MB('текст', 'заголовок', 0)
@@Michael, а как вывести окошко с текущим значением переменной? Что написать вместо 'текст' - 'print"переменная"'?
[DOUBLEPOST=1449493448,1449493050][/DOUBLEPOST]@EUGEN27771, офигенно))
Я делаю Скрипт, который с текущего проекта снимает необходимые для работы ОСНОВНОГО Скрипта данные и создаёт вспомогательный скрипт (его текст), который потом Основным скриптом при начале работы импортируется в код (через функцию - @Import).
Просто автоматизирую весь процесс настройки Основного Скрипта под конкретный проект с минимальным участием Пользователя.
Делаю это не при старте Основного скрипта по причине того, в частности, что процесс этот длительный (если проект большой) и по сути делать то его нужно ОДИН раз, когда проект готов и используется. Ну и по причине того, что массив создать при старте скрипта не могу в EEL путём считывания данных - таблиц нет в EEL -е. Но честно говоря и по идеологии работы с проектом правильнее считать данные с него Один раз, а потом их каждый раз подгружать при работе в Основной скрипт.
Прошу прощения за длинную прелюдию к пояснению - Зачем?
Так вот, кроме всех прочих данных, мне нужно считать и записать в этот вспомогательный скрипт ID Кастом Экшинов и скриптов - просто чтоб не заниматься этим Пользователю в ручную, залазя в Экшин лист и ковыряя код.
Названия нужных Экшинов, в том числе и Скриптов - мне известны за ранее, а вот какие Command ID в 5-ке присвоит Рипер при Load - я не знаю. Кстати, было-бы хорошор и Load того или иного скрипта в Рипер Экшин делать Скриптом, а не интерфейсом Рипера. И в общем я даже знаю куда это пишется и как (reaper-kb.ini), но не писать же мне самостоятельную программу для записи этих данных в reaper-kb.ini.....
[DOUBLEPOST=1449494208,1449493788][/DOUBLEPOST]
Так (#string - вычисляемая ранее в коде переменная) -
PHP:
sprintf(#Log, "Data: %s", #string); // если переменная не строка, а параметр, то вместо %s писать %d или %i или %f в зависимости от того, что за параметр
ShowConsoleMsg(#Log);
ShowConsoleMsg("\n"); // чтоб меняющееся значение #string писалось каждый раз с новой строки
count_sel_items = reaper.CountSelectedMediaItems(0) -- посчитали айтемы
if count_sel_items > 0 then -- если выделен хотя бы 1 айтем
for n = 0, count_sel_items do
get_sel_item = reaper.GetSelectedMediaItem(0, 2*n+1) -- снимаем выделение с четных айтемов
reaper.SetMediaItemSelected(get_sel_item, 0)
end
end
...cripts\Test\select only odd items from selected ones.lua:5: bad argument #1 to 'SetMediaItemSelected' (MediaItem expected)
Идея была - пробежаться по всем выделенным айтемам и снять выделение с четных, тем самым выделение останется на нечетных
count_sel_items = reaper.CountSelectedMediaItems(0)
if count_sel_items ~= nil then
items_to_select = {}
for n = 1, count_sel_items do
item = reaper.GetSelectedMediaItem(0, n-1)
if item ~= nil then
guid = reaper.BR_GetMediaItemGUID(item)
table.insert(items_to_select, {guid, (n-1) % 2})
end
end
for i = 1, #items_to_select do
item = reaper.BR_GetMediaItemByGUID(0, items_to_select[i][1])
if items_to_select[i][2] == 1 then selected = true else selected = false end
if item ~= nil then reaper.SetMediaItemSelected(item, not selected) end
end
reaper.UpdateArrange()
end
Aleksandr Oleynik, я бы согнал kb.ini в таблицу и посмотрел совпадения имени, из той же ячейки взял id
Я пока этого делать не умею, и в EEL таблиц нет .
А Load скрипта в Рипер сделать скриптом нельзя?
Михаил, а не можете написать такой скрипт на lua - чтоб он по имени скрипта (экшина) его ID писал в отдельный файл текстовый в директории скриптов?
Вообще можно дописать в kb.ini что-то типа
SCR 260 0 RSaa0b95d32702e4280da1ed3c64dd12063f680ee4 "Custom: test.lua" test.lua
Но я не знаю как сгенерировать эту base64, для чего-то же она нужна)
А так можно выводить из kb.ini всё, что там есть, в любой вид
Михаил, нам чайникам бы пару работающих примеров.... И без исключительных возможностей lua, чтоб на eel потом перевести.
Честно - не знаю как дописать, а особенно вписать что либо в существующий файл.
Ну и ни разу не считывал ни чего, кроме как код с другого скрипта через @Import
Aleksandr Oleynik, сформулируй ещё раз конкретно что нужно. Если что-то с экшнами связано, то имей ввиду, что названия родных лежат в самом рипере и их из API не достать
Скорее всего для гарантирования многократной генерации уникального ID, но лучше бы это спросить на оф форуме, как и то, можно ли в kb.ini строки писать без соблюдения порядка груп (там экшины, на которые назначенны внешние MIDI/OSC команды пишутся Рипером всегда в конце).
Не могли бы вы это узнать, чтоб не переживать в дальнейшем, что что-то сломается в работе.
Так то я проверил - вроде работает и ID от балды (даже кол-во знаков не имеет значение) и до запись в конце тоже работает (но всё-так с мелкими проблемками, лучше вписывать в самое начала ini файла).
[DOUBLEPOST=1449573387,1449573091][/DOUBLEPOST]
Aleksandr Oleynik, сформулируй ещё раз конкретно что нужно. Если что-то с экшнами связано, то имей ввиду, что названия родных лежат в самом рипере и их из API не достать
И честно говоря (есть проблемки если в конец дописывать), лучше вписать в конец своей группы, перед первой строкой с "маркером в начале" - KEY, вот так (строка 81) -
А ещё на много ЛУЧШЕ!!!! - вписывать каждый раз в первую строку, сдвигая всё прочее на одну ниже - проверил, это работает без проблем!
2. Считать скриптом из файла reaper-kb.ini - ID кастома по его имени - !_VolTest001.eel
И запустить его на выполнение, этот скрипт.
function Get_ID_By_Name(name)
kb_table = {}
filename = reaper.GetResourcePath()..'/'..'reaper-kb.ini'
file = io.open(filename, "r")
content = file:read("*all")
for line in io.lines(filename) do table.insert(kb_table, line) end
file:close()
for i = 1, #kb_table do
if string.find(kb_table[i], name) ~= nil then
temp_t = {}
for word in string.gmatch(kb_table[i], '.-[%s]') do table.insert(temp_t, word) end
return '_'..string.sub(temp_t[4],0,-2)
end
end
end
command_name = Get_ID_By_Name('!_VolTest001.eel')
reaper.ShowConsoleMsg(command_name)
reaper.Main_OnCommand(reaper.NamedCommandLookup(command_name), 1)