Commit Graph

35339 Commits

Author SHA1 Message Date
Ben Loftis 3a174ff914 add support for 'positive' guard points in ControlList 2022-05-16 07:16:25 -05:00
Ben Loftis c98561e95c when cutting or clearing an automation range, always add boundary points
* these guard points are necessary to retain the automation that existed
 before and after the selected range is removed
2022-05-16 07:16:24 -05:00
Robin Gareus e739191ae2
Display last export channel state 2022-05-16 04:54:18 +02:00
Robin Gareus 5d590a1ca7
List MIDI tracks in the Stem-Export Channel Selector 2022-05-16 04:54:18 +02:00
Robin Gareus 44e273d713
Overhaul export channel state save/load
This allows to properly save/restore Route and Port
channel config states.
2022-05-16 04:54:17 +02:00
Robin Gareus f6e67875f4
Implement MIDI ExportGraph processing 2022-05-16 04:54:17 +02:00
Robin Gareus aa09a445e3
Bootstrap MIDI export writer
This leans on the AudioGrapher API for IdentityVertex.
2022-05-16 04:54:17 +02:00
Robin Gareus 719dda7701
Implement MIDI ExportChannel
Since MIDI Export is limited to Stem-Export, only a port-reader
and ExportProcessor have to be implemented.
2022-05-16 04:54:17 +02:00
Robin Gareus 4c4ab9cf51
Prepare PortExportChannel API for MIDI export 2022-05-16 04:54:17 +02:00
Robin Gareus b11f76d748
Do not select re-imported tracks
Stem-export defaults to use selected tracks. This retains
the selection, so focus remains. Repeat stem export will use
previously exported tracks if the selection is empty, or the
current selection (again).
2022-05-16 04:54:14 +02:00
Paul Davis 7c2cb31b63 temporal: use boost::intrusive ::iterator_to to improve efficiency of ::next/previous_tempo() 2022-05-15 17:49:09 -06:00
Robin Gareus a742228463
Use "Wav (tagged)" as default export profile
Otherwise the first, alphabetically sorted, format is used,
which is currently (Amazon Music, normalize loudness).
2022-05-15 21:48:35 +02:00
Robin Gareus 8a927cc522
Only list tracks with audio-ports when exporting audio files 2022-05-15 21:48:28 +02:00
Robin Gareus d513d8b876
Do not allow dir-separators in session-template names
See also: 576f10b6f1
2022-05-15 19:53:12 +02:00
Robin Gareus a522a98118
Add API to query fixed delay line's delay time 2022-05-15 19:32:46 +02:00
Robin Gareus ae0aa50b6f
Fix MIDI delay-line (amend 25098ed)
Events in the delay-buffer must be shifted back every cycle.
Also in case of fixed-delay-lines events may not be in sequence
since events are only sorted at backend port-level.
2022-05-15 19:20:32 +02:00
Robin Gareus 576f10b6f1
Template [file]names cannot have dir-separators 2022-05-15 04:37:22 +02:00
Robin Gareus d55d3a7360
Save/load export timespan realtime setting 2022-05-15 02:20:19 +02:00
Robin Gareus 4577f86aa0
NO-OP: clang-format 2022-05-15 02:19:46 +02:00
itmuckel 498a3d90c5
Modernize region_view 2022-05-14 23:33:21 +02:00
itmuckel 13836bde44
Give muted regions cancelled speaker instead of '!' 2022-05-14 23:33:21 +02:00
Robin Gareus 86597d7e1c
NO-OP: re-indent, and cleanup 2022-05-14 23:32:26 +02:00
Ben Loftis 4339e3c729 temporarily remove effective_ripple_mark_start behavior
citations are needed to explain when&how this is useful

the definition of Ripple is "accommodate cut/insert/moves by moving all
 regions to the 'right' (later) of the operation by the same amount".

moving markers to the 'left' of the grabbed_region explicitly breaks the
 definition of ripple. it makes documentation hard.

furthermore, in a more complicated session with multiple tracks, this behavior
 ignores the regions on other tracks and the markers that still might be
 associated with them  (consider the case where you move the first region
 on track A but there are many prior regions on track B with markers over
 them)
2022-05-14 14:47:54 -05:00
Ben Loftis f7abe8dacd fix: RegionMotionDrag actions are always rippling to other tracks
* if we aren't in RippleAll, you should only ripple the regions
 on the same track as the grabbed region
2022-05-14 14:16:21 -05:00
Ben Loftis 0cfbc64e54 triggerbox: given no other info, assume a clip is 1,2,4,8 or 16 bars at 4/4
this solves the oft-recurring problem where we assign
 a beat-count of '3' or '7' because minipm  mis-detected the tempo,
 and that situation is vanishingly rare.  it's better to assume 4 or 8

the user always has the option to change the number of beats (and
 therefore the detected tempo) manually, for those clips that are
 in a different time signature.  but minibpm cannot be expected
 to help us there.

NOTE: this is a fallback to make things 'just work' lacking any other context.

* if the tempo is detected in the filename, we use that instead
* clips that were recorded to the timeline use that bpm+timesig
* in the future we can use file-metadata (acidized wave?) instead
* this is audio-only: midi files can have an embedded timesignature

but... given no other information, experience says the vast majority
of downloaded/purchased clips will be 1,2 or 4 bars at 4/4.
2022-05-14 14:16:21 -05:00
Paul Davis be5c64f737 temporal: NOOP - add blank line 2022-05-13 19:05:13 -06:00
Paul Davis 6f973af1e1 tempo end drag: make this work with new implementation 2022-05-13 19:05:13 -06:00
Paul Davis db17a46498 tempo twist drag: changes to work with new (old) implementation 2022-05-13 19:05:13 -06:00
Paul Davis 1ccda17504 temporal: add a new version of tempo twist based on pre-nutempo code 2022-05-13 19:05:13 -06:00
Paul Davis 60159acd33 temporal: slightly change const positioning in definition of ::stretch_tempo() 2022-05-13 19:05:13 -06:00
Paul Davis b0ff612572 temporal: add DEBUG_TRACE message 2022-05-13 19:05:13 -06:00
Paul Davis 4defa3ae8f temporal: fix logic bug in TempoMap::reset_starting_at() 2022-05-13 19:05:13 -06:00
Paul Davis c9b7f012e4 temporal: helpful comment for future readers 2022-05-13 19:05:13 -06:00
Paul Davis f0f8f15cce temporal: missing change from 072a7b17a22f 2022-05-13 19:05:13 -06:00
Paul Davis 51980b15cd temporal: split _omega into two values, for each time domain
omega can be computed from Beat or superclock duration. This gives rise to
different units for omega, and we must use the correct value in a given
context.

This commit also changes the way that the audio time omega is computed during
TempoMap::reset_starting_at()
2022-05-13 19:05:13 -06:00
Paul Davis f679cd6eab temporal: remove Rampable, change name of method to set end note types per minute
Rampable only existed to provide exclusive access to ::set_end() for the
TempoMap. More idiomatic C++ but now that _type has also gone away, so has
::set_ramped() and it really was not worth keeping it around.
2022-05-13 19:05:13 -06:00
Paul Davis 8770df611c temporal: remove TempoMap::_type concept
Ramped/Constant is really a function of start/end note_types_per_minute. Having
a separate member is really just caching it and leads to errors or risk thereof.
2022-05-13 19:05:13 -06:00
Paul Davis 43b3ec005f temporal: use new debug bit for debug output in reset_starting_at() 2022-05-13 19:05:13 -06:00
Paul Davis 5d22e522d1 temporal: add new debug bit for debug tracing just TempoMap::reset_starting_at() 2022-05-13 19:05:13 -06:00
Paul Davis a60412373a tempo map editing: re-enable stretch tempo drag 2022-05-13 19:05:13 -06:00
Paul Davis 45de3694cc temporal: add reimplemented version of 6.x's TempoMap::gui_stretch_tempo() 2022-05-13 19:05:13 -06:00
Paul Davis db9cc04230 temporal: remove debug output from TempoMap::reset_starting_at() 2022-05-13 19:05:13 -06:00
itmuckel 2a4ebd17d6
Save last route type 2022-05-13 23:07:49 +02:00
itmuckel 9178ca635a
Remove unused imports and modernize stateful.cc 2022-05-13 23:07:49 +02:00
itmuckel 77356c0ebb
Reformat and remove unused imports 2022-05-13 23:07:49 +02:00
Robin Gareus 9c9a7bbf97
Remove debug message 2022-05-13 21:02:37 +02:00
Ben Loftis 39f41e2357 fix midi-note Copy+Paste and Duplicate actions
* broken in 1fa7a7
2022-05-13 14:00:14 -05:00
Robin Gareus 3b13dc9b54
Remove unused method declaration 2022-05-13 19:38:12 +02:00
Robin Gareus f8aecc460c
Use new hard-stop API to stop transport before export 2022-05-13 19:38:11 +02:00
Robin Gareus 25098edfc1
Fix MIDI delaylines
MidiBuffer::read_from() clears the buffer, so events were not
accumulated into the delay-buffer.

This also includes a small optimization and comments for the
variable delayline.
2022-05-13 19:38:07 +02:00