I've spent the last few days working on something to make groove quantize and my FitToBeatsCommand more usable.
The use case is that you have recorded something live (MIDI keyboard or w/e), and now you want to align it to bars and beats so you can edit it nicely, but you want to keep the tempos, the rubato, etc. FitToBeatsCommand will align the notes to beats, adjusting the timeT times to keep the same performance times and continuously adjusting the tempo to keep it on beat. (Groove quantize finds tempos too but in a way I don't find as easy to use) For that to work, you have to tell RG when the beats are. So you make a segment of one note to each beat. That's a whole job in itself. It used to take maybe 10 to 20 minutes for an 8-measure stretch. New command SelectAddEvenNotesCommand does most of the work. You select two notes that are on the first two beats - they have to be the first two notes in selection, but other than that it doesn't matter what's selected. The command selects an approximately on-beat note for every following beat, adapting to the implied tempo. It will add notes where they are totally missing. It's not perfect, does get off track after a while, but it will typically set up 8 to 10 measures of beat notes for you in one command. Now you've got pieces of beat tracks, but it's hard to paste them together. Standard paste will change the timing, almost no matter what you do. What I find works nicely is to move those selected notes down-staff to the beat segment, while you are editing both segments. The vanilla move_events_down_staff didn't do this well because it uses PasteEventsCommand::NoteOverlay. PasteEventsCommand::MatrixOverlay does the job better. So I made new versions of them (general_move_events_up_staff, general_move_events_down_staff) that let user select the type of pasting to do. And now I can align live performance to beats and bars without spending hours doing it. Some technical stuff: * PasteNotationDialog now handles its own saved settings instead of each of its callers doing so. * slotMoveEventsDownStaff and slotMoveEventsUpStaff merged into slotGeneralMoveEventsToStaff. Two parameters: up/down, whether to use dialog. * New command SelectAddEvenNotesCommand * EventContainer class, just a name for Segment's formerly anonymous std::multimap base class. Tom Breton (Tehom) ------------------------------------------------------------------------------ This SF.net email is sponsored by Windows: Build for Windows Store. http://p.sf.net/sfu/windows-dev2dev _______________________________________________ Rosegarden-devel mailing list Rosegarden-devel@lists.sourceforge.net - use the link below to unsubscribe https://lists.sourceforge.net/lists/listinfo/rosegarden-devel