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

Reply via email to