А можно перехитрить / обойти это недоразумение прописав в том же скрипте предварительную разбивку тейка на несколько айтемов поменьше, и затем их обратную склейку после выполнения основной функции: то есть копирования нот?
Нет, это будет еще дольше, потому как ладно разрезать - это быстро, а вот что бы склеить, надо сделать следующее, просканировать все айтемы, запомнить всю их информацию, удалить их, создать новый большой айтем и запихнуть в него все инфу.
@Antibio, Обновил. С горем пополам. Функцию позаимствовал у
@@Michael, (думаю
@@Michael не будет против)
Багов быть там не может, так как там сырая инфа без постобработкки рипером.
Не не может, а не должно быть, но они есть.
В рипере как я понимаю миди редактор изначально написан через ж..., там даже все стандартные экшены работают с багами.
Вот наложи ноты одна на другую примерно так
(это три ноты) и попробуй любую из них скопировать, не важно как, хоть стандартным экшеном (ctrl+c), хоть скриптом сделанным из S/GetAllEvts, результат будет один и тот же, нота скопируется, а остальные (не эти три, а во всем проекте, где есть такое наложение) сломаются, про S/GetNote вообще молчу - что они вытворяют, ладно экшены / скрипты, наложи их так и закрой - открой миди редактор и ты обнаружишь что они сломаны, т.е у них длина изменится.
По поводу MIDI_ S/GetAllEvts ты ее всю распаковал в таблицу (ParseRAWMIDI) и там вроде все стало понятно, да и в принципе ей можно уже пользоваться, думаю там больше нет никакой информации и для всех целей ее будет достаточно.
А вот с запаковкой вообще ничего не понял, почему в первом pack четыре параметра, т.е. три, как и описано в S/GetAllEvts, а во втором pack 6 параметров и почему ключи разные(i4Bs4), как их подбирать вообще?
Код:
local str_per_msg = string.pack("i4Bs4", new_ppq-last_ppq, data[i].flags, data[i].msg1);
local str_per_msg = string.pack("i4Bi4BBB", new_ppq-last_ppq, data[i].flags, 3, data[i].msg1:byte(1), newPitch, data[i].msg1:byte(3));
Откуда ты берешь вот эти цифры
:byte(1)>>4 == 0x9 ?
Есть ли где нибудь какая нибудь инфа по этому поводу как хранятся миди в рипере и как вообще этим пользоваться, что бы об этом почитать?