helio-fm / helio-sequencer

One music sequencer for all major platforms, desktop and mobile
https://helio.fm
GNU General Public License v3.0
3.04k stars 115 forks source link

Project versions problem. (Android/Win) v3.11 #272

Closed Ivan-Spoda closed 10 months ago

Ivan-Spoda commented 11 months ago

[EN] I've noticed that the "Versions" tab of the project doesn't work as it should, I guess it should record every action that changes the project, whatever it is, changing the volume of notes, their position, duration; automation points, adding/removing midi tracks. But she does not write it all down, and if you want to cancel - create the project again. By the way, why can't you remove the limit for saving actions? [RU] Я заметил, что вкладка проекта "Версии" работает не так, как должна, я полагаю она должна записывать каждое действие которое изменяет проект, что бы это ни было, изменение громкости нот, их положение, длительность; точки автоматизации, добавление/удаление миди треков. Но она не записывает это всё, и если хочешь отменить - создавай проект заново. Кстати почему нельзя убрать лимит сохранения действий?

peterrudenko commented 11 months ago

Про версии не понял вопроса, страница с версиями и должна работать примерно так, как вы пишете. Там справа - дерево сохраненных версий, рамкой выделена версия, на основе которой вы что-то делаете. Слева - все изменения относительно нее, их можно частично или полностью отменить или закоммитить как новую версию. Т.е. похоже на то, как работают популярные VCS, но попроще.

Кстати почему нельзя убрать лимит сохранения действий?

Если речь про те undo/redo действия, которые запоминаются между перезапусками приложения, то там максимум - 10 последних действий, лимит взят с потолка, могу увеличить. Но чем больше сохраняем действий, тем больше может весить файл проекта, поэтому нужен какой-то компромисс. Может быть, лучше будет вообще вынести этот лимит в конфиг?

Ivan-Spoda commented 11 months ago

Про версии не понял вопроса, страница с версиями и должна работать примерно так, как вы пишете. Там справа - дерево сохраненных версий, рамкой выделена версия, на основе которой вы что-то делаете. Слева - все изменения относительно нее, их можно частично или полностью отменить или закоммитить как новую версию. Т.е. похоже на то, как работают популярные VCS, но попроще.

Кстати почему нельзя убрать лимит сохранения действий?

Если речь про те undo/redo действия, которые запоминаются между перезапусками приложения, то там максимум - 10 последних действий, лимит взят с потолка, могу увеличить. Но чем больше сохраняем действий, тем больше может весить файл проекта, поэтому нужен какой-то компромисс. Может быть, лучше будет вообще вынести этот лимит в конфиг?

Про версии я писал, что они иногда могут не показывать действия, которые были в проекте, и к тому же переход к более поздним версиям иногда не работает, вот смотрите, у меня привычка почти в каждом проекте создавать ветвь версии "init", то есть первоначальная версия проекта, без изменений. Когда заканчиваю проект создаю ветвь версии "finished", но пре переходе с ветви "finished" на ветвь "init" Midi дорожки, автоматизация, положение нот, громкость, всё всё всё остается из финальной версии проекта.

Теперь про Undo/redo, да думаю нужно сделать чтобы лимит на кол-во действий был в конфиге. Чтобы это можно было в настройках менять. Но на счёт сохранения действий в проекте - не знаю, вроде бы это отличная вещь, типо я не думаю что для этого стоит жалеть места, да и проект с сохраненными действиями не факт что глобально вырастет в размере, не то что бы я ПК боярин, и у меня много места, просто это намного важнее, чем переделывать проект заново... По крайней мере для меня, а как думаете вы?

peterrudenko commented 11 months ago

Про версии я писал, что они иногда могут не показывать действия, которые были в проекте

Он должен отслеживать вообще все изменения, если что-то пропускает, это явно баг. Если найдете конкретный пример, пишите плиз.

Когда заканчиваю проект создаю ветвь версии "finished", но пре переходе с ветви "finished" на ветвь "init" Midi дорожки, автоматизация, положение нот, громкость, всё всё всё остается из финальной версии проекта.

Переключение на версию сейчас ведет себя примерно как 'reset --soft' в гите, и не трогает те изменения, про которые версия не знает. То есть, в вашем случае после переключения на версию init надо еще и вручную отменить все изменения из левой части. Это задумывалось как более гибкий подход, чем а-ля 'reset --hard', но подозреваю, что он не очень интуитивный и неудобный. Уже думал над тем, чтобы это поменять, в ближайшее время выкачу фикс.

Про undo - увеличил лимит до 32 сохраненных действий на мобилках и до 16 на десктопе. На десктопе это не такая большая проблема, потому что в рамках одного запуска вообще нет лимита на отмену действий. А на мобилках жизненный цикл приложения не такой определенный, система может убить его когда захочет, пока оно в фоне, и приходится больше полагаться на сохраненные данные.

Если не будет хватать, можно поменять параметр maxSavedUndoActions в основном конфиге. Правда, на мобилках до него можно добраться только под джейлбрейком. Надо будет с этим разобраться или вынести параметр на страницу настроек.

L0w1y commented 3 weeks ago

Могу предложить использовать сжатие LZSS, с фреймом на 128 kb, для лучшей работы на мобильных устройствах, и более сбалансированного хранения

L0w1y commented 3 weeks ago

чем больше сохраняем действий, тем больше может весить файл проекта, поэтому нужен какой-то компромисс.