Age | Commit message (Collapse) | Author |
|
- should fix incorrect midi region length on split.
|
|
|
|
|
|
- add more debugging output detecting regions whose
beat and frame position do not align on a playlist.
this is required as a check as we have never used
frame rounding on constant tempi before 8884a5723dc
|
|
Audiotime
|
|
I'm not entirely sure why it's needed in 'smf_source.cc' but MSVC fails to link the compiled module if I don't #include it ?!?
|
|
Fixes the multiple reader issue #6541 properly without resorting to a
linear search kludge.
All the read state has been pulled out into a MidiCursor which the
caller is required to pass. The playlist keeps cursors for all the
regions it is reading, any number of cursors are allowed at a time.
MidiCursor should probably be made a smarter and more fool-proof
object (and/or possibly merged with some of the other tracker/fixer
stuff) but for now I wanted to keep it simple.
|
|
- quarter note precision is greater than the frame-based
_position. using it as a reference may cause a rounding error
if the region is locked to MusicTime.
- also fixes a _start position bug when trimming midi regions.
- we really need a better api for this kind of thing.
- in combination with the previous two patches, this should fix
various missing first note issues.
|
|
- Evoral::Beats operator!= would prevent an increment
of start_beats by intervals of less than a tick,
so its possible that other subtle problems
existed due to this kind of thing.
|
|
- Property::set() requires that new_val != current for a change
to occur, but Beats::operator!= has tick resolution.
i think this is pretty good evidence that _start/_length_beats
should actually be double rather than Evoral::Beats
(adjusting a region by increments of less than a tick
is desirable).
|
|
trimming.
|
|
|
|
- .
|
|
- provides an upgrade path for sessions affected by a nasty bug
present in some 5.0 - 5.3 MIDI sessions.
If testing from source, it can be run from the session_utils directory
using ./run ardour5-headless-chicken -h
|
|
_length_pulse from MidiRegion.
- _start/length_beats are now quarter notes regardless
of loaded session version.
- also restores note colour update
|
|
seamless looping (if using)
|
|
5.3-41
|
|
|
|
|
|
|
|
- ensures gui updates correctly.
|
|
- don't alter region frame length on tempo change or position change.
- set region _start correctly (see comments) on tempo map change.
- ensure audio-locked region's beat is set on tempo map change
|
|
A spurious space change was included by mistake.
|
|
The trim processor was moved to the front after the internal return was,
so the trim setting was applied before the signal coming from other
tracks/busses sends was mixed in. Change the order so that trim applies
to audio from internal sends as well.
|
|
To export a MIDI region to a file, the code used MidiRegion::clone()
since it takes care of creating a new file-backed source with the wanted
contents. Nevertheless, it had several side-effects:
- it created and registered a new region which is confusing to users
- it only exported notes that were in the region range, but didn't
remove the region start offset from MIDI events, essentially producing
a spurious silence at the beginning of the exported file (this is not
a problem for region cloning because the newly created region is made
aware of the offset and caters for it).
Add a dedicated code path for export, that uses the new offsetting
capabilities of MidiModel::write_section_to().
|
|
|
|
this simplifies lua-bindings and also let's the compiler worry about
constant primitive types.
|
|
- seems to work quite well, but not tested on live recording.
|
|
|
|
trim.
|
|
rounding.
|
|
length regions from drawing tool.
|
|
|
|
tempo dilation
|
|
ctor.
|
|
- for those not in the know, this series provides a way to
remove the temporal distortion introduced when using an
audio frame-based gui for music-locked objects.
In short, the gui uses an audio frame representation to move
objects. It displays the object using frame_at_beat(), quantizing
the time value to audio frames. This is fine until the user selects
that frame but expects it to be interpreted as a beat.
Thus beat_at_frame() would not produce the user-expected beat
(temporal quantization error of up to 0.5 audio samples).
This is one method of mapping audio time to music time accurately.
|
|
- use exact beats to determine frame position.
- see comments in tempo.cc for more.
- this hasn't been done for split yet, but dragging and
trimming are supported.
|
|
|
|
- hopefully this can close bugs such as 6270 & 6793
|
|
- fixes incorrect length on drag-copying and pasting
midi regions.
|
|
- there is still the problem of being unable to drag
a trimmed region to the left when it's source
(not it's position) would end up on a negative beat.
|
|
|
|
- should fix 6793
|
|
|
|
|
|
|
|
This moves MIDI channel filtering into a reusable class and moves filtering to
the source, rather than modifying the buffer afterwards. This is necessary so
that the playlist trackers reflect the emitted notes (and thus are able to stop
them in situations like mute).
As a perk, this is also faster because events are just dropped on read, rather
than pushed into a buffer then later removed (which is very slow).
Really hammering on mute or solo still seems to produce stuck notes
occasionally (perhaps related to multiple-on warnings). I am not yet sure why,
but occasional beats always.
|
|
This avoids stuck notes if active notes are edited, but without stopping all
active notes in the region on any edit as before.
This implementation injects note ons in places that aren't actually note
starts. Depending on how percussive the instrument is, this may not be
desired. In the future, an option for this would be an improvement, but there
are other places where "start notes in the middle" is a reasonable option. I
think that should be handled universally if we're to do it at all, so not
considering it a part of this fix for now.
|
|
|
|
Firing these signals while locked is not a good idea, Sequence/ControlList need
a better design for this that accounts for recording and lockedness.
|