Commit Graph

34571 Commits

Author SHA1 Message Date
Robin Gareus
0db261cf64 Merge Overwrite request for the track
Previously events with different reasons where treated as two
separate events. Processing an Overwrite request causes
post-transport-work to set.

Since ::non_realtime_work_pending() is true, process_event()
is not called, and no further immediate events are evaluated in
the same cycle.

So Overwrite requests were repeated over multiple cycles.
2022-02-05 19:04:22 +01:00
Robin Gareus
cd53301d06 Significantly speed up loading SMF tempo-maps
Files that have many tracks, each with tempo information
were near impossible to load (30+ mins on modern 4.2Ghz CPU!),
because tempo is parsed incrementally:

```
For each new track:
  for each new tempo-event:
    rewind()
    for each loaded track so far:
      for each event on this track so far
```

This reduces the complexity from O(tracks^2 * tempos^2)
to O(tracks * tempos).

"Come Thou Fount Tempo Map.mid" has 238 Tracks and 56168 total
Tempo Changes (236 per track). This now requires only 56168 iterations
in smf_create_tempo_map_and_compute_seconds, rather than 1.64e+9
iterations
2022-02-05 17:33:21 +01:00
Robin Gareus
3da54244ea FIX smf-tool compilation (library ordering) 2022-02-05 17:33:21 +01:00
Robin Gareus
207ad2d369 Add API to query SMF note-count and pgm-changes
This information is useful for trigger-clips, in particular
if the file can change synth-settings via patch-changes.
2022-02-05 17:33:21 +01:00
Ben Loftis
220b1386ab Triggerbox: revert test-code 2022-02-04 21:48:45 -06:00
Ben Loftis
d22269f59f Trigger Page: add an audition-synth selector to Clip Picker 2022-02-04 21:41:34 -06:00
Ben Loftis
e2c550bcdd Auditioner: expose synth_info 2022-02-04 21:41:34 -06:00
Ben Loftis
9ad82787a1 Instrument Selector: use a 3-way Disposition to disambiguate the uses of this widget 2022-02-04 21:33:12 -06:00
Ben Loftis
9eb626cc37 Auditioner: hide unnecessary widgets for auditioner synth GUI 2022-02-04 20:18:00 -06:00
Robin Gareus
3694009176 Fix silence w/MonitoringSilence and triggerbox 2022-02-05 01:10:27 +01:00
Robin Gareus
91609791b4 Format used MIDI channels in Import Dialog Info Box 2022-02-05 00:13:28 +01:00
Robin Gareus
ef8904210e Add method to format set of MIDI channels
eg. channels 1,2,3,5,6
will be formatted as "1-3, 5, 6"
2022-02-05 00:13:28 +01:00
Robin Gareus
12e8235193 Add API to query set of used MIDI channels in a SMF 2022-02-05 00:13:27 +01:00
Todd Naugle
fa29647246 Fix dmg failure caused by out of space issue
With no clear reason why, copying the program to the dmg is running
out of space. Possibly a bug in latest catalina.

Instead of using a fixed extra space amount. Add 25% of the Product Dir
size to the dmg size.
2022-02-04 15:24:24 -06:00
Todd Naugle
d2a5fa2d9f Fix trap error case
At this point TMPDMG already has .dmg added to it and
the original mktemp file was removed above.
2022-02-04 15:18:29 -06:00
Robin Gareus
617697a823 Fix playback of initial notes during MIDI audition 2022-02-04 19:32:34 +01:00
Robin Gareus
6df1bd3ad5 Triggger Clip Picker: fix crash at session close 2022-02-04 13:58:22 +01:00
Robin Gareus
834e164df0 Trigger Clip Picker: Idle update audition synth
This keeps the plugin in sync with any changes made to the
Plugin UI. In particular General MIDI Synth will send
notifications once patch/program changes are processed.
ACE Fluidsynth can load sf2 files, etc.
2022-02-04 13:57:33 +01:00
Robin Gareus
4fe9d99674 Auditioner: add API for UI to run the synth (idle)
This allows the synth to process injected out-of-band MIDI
data, such as Program/Patch Changes while audition is inactive.
2022-02-04 13:46:13 +01:00
Paul Davis
604652b7d6 fix duplicate behavior
We were adding the "span" value to the position before calling
Playlist::duplicate(), but it does that internally.
2022-02-03 20:51:04 -07:00
Robin Gareus
c7d4729238 Expose session config triggerbox-overrides-disk-monitoring option 2022-02-04 01:47:29 +01:00
Robin Gareus
e2bc670e6b Update monitoring display when TB cues change 2022-02-04 01:47:26 +01:00
Robin Gareus
5e2912b7eb Auto Monitoring takes TriggerBox into account
MonitoringDisk is now only set implicitly if the triggerbox
contains no cues.
2022-02-04 01:47:20 +01:00
Robin Gareus
18207c6896 Fix Triggerbox empty(), active-slots count on session load 2022-02-04 01:40:54 +01:00
Robin Gareus
05f4ffa598 Fix cue selection
TriggerEntry has 3 child items:
 * play-button, follow-button, name-button.

On mouse-down the TriggerEntry is grab()bed in preparation
to start a drag. From then on all events are directly sent to
TriggerEntry, which can only pass it up to parent items.
Mouse-release hence reaches the TriggerStrip and selects it.
2022-02-03 23:29:01 +01:00
Robin Gareus
e51427413c Tweak TB event passthrough
Play/Stop and Follow buttons no longer pass events up.
That way the strip will not be selected on mouse-up.
2022-02-03 21:57:13 +01:00
Robin Gareus
d9ec733c47 Dump XML node if loading a source fails
This helps to debug issues, in case this comes up in a session
with many sources.
2022-02-03 21:57:13 +01:00
Paul Davis
3c2fdab1ce triggerbox: add Properties::channel_map (and sent it); save/restore channel map state (untested) 2022-02-03 13:07:04 -07:00
Paul Davis
bce4eb36ad triggerbox: add MIDITrigger channel mapping 2022-02-03 12:37:49 -07:00
Paul Davis
ead02f50b1 triggerbox: save/restore state for assigned patch changes in MIDITrigger 2022-02-03 09:24:30 -07:00
Robin Gareus
ccf5c07108 Update source-tree layout
* Remove wine, fst, windowsVST reference,
* VST3 support
* expand paths
2022-02-03 14:47:24 +01:00
Robin Gareus
511ff3290f Implement TriggerStrip selection
This also changes TriggerBox Selection to act on release
(like all other selection). Otherwise strip selection will
de-select the TriggerBox on mouse-release.
2022-02-03 05:50:07 +01:00
Paul Davis
fd3d17562c triggerbox: do not send embedded patch change events if Trigger has its own 2022-02-02 16:05:17 -07:00
Robin Gareus
65e3177910 Trigger Clip Picker: fix crash at exit (auditioner reference) 2022-02-02 23:08:49 +01:00
Robin Gareus
a9b484e97e Auditioner: retain instrument plugin
This allows the Trigger Clip Picker to keep the
Plugin GUI available, and retain any custom settings.
2022-02-02 23:08:48 +01:00
Paul Davis
35b6ddfb77 triggerbox: deliver required patch changes into buffers whenever MIDITrigger::startup() happens 2022-02-02 15:06:11 -07:00
Paul Davis
c7b8faad5a MidiStateTrack: use correct hex values to manage set/unset state 2022-02-02 15:06:11 -07:00
Paul Davis
374faa0d5c PatchChange: use correct hwx constants to detect/set "unset" byte values 2022-02-02 15:06:11 -07:00
Paul Davis
31f4d8a2ca PatchChange: fix operator=() implementation which failed to manage event buffer ownership correctly 2022-02-02 15:06:11 -07:00
Paul Davis
6175af002c triggerbox: MIDITriggers get 16 patch changes, 1 per channel
These can be set, fetched and queried but at this point they do nothing
2022-02-02 15:06:11 -07:00
Paul Davis
603d1f1f57 evoral: some changes/extensions to Evoral::PatchChange to make it more useful
The concept of an "unset" PatchChange now exists, and thus a default constructor that constructs
such a thing
2022-02-02 15:06:11 -07:00
Robin Gareus
2c8427773f Trigger-clip audition: show audition-synth GUI (WIP)
This is somewhat experimental, also the Plugin UI is only
available while MIDI audition plays...
2022-02-02 22:09:47 +01:00
Ben Loftis
b250c69eb8 trigger_ui: return the gain-spinner to MIDI clips; it adjusts velocity 2022-02-02 11:47:50 -06:00
Paul Davis
0b395c161d triggerbox: apply gain to MIDI note events 2022-02-02 09:58:57 -07:00
Paul Davis
2eadb75bd1 move static scale_midi_velocity() function from Amp to Evoral::Event 2022-02-02 09:58:57 -07:00
Paul Davis
15f248975f remove unused member of MidiStateTracker
We store "have program" as the 8 (MSb) bit of the program
array, and similary for other state holding elements
2022-02-02 09:58:57 -07:00
cooltehno
bf2ff23e44 Update dark-ardour.colors 2022-02-02 16:45:18 +01:00
Robin Gareus
bb11be9936 Consistent height of MIDI and Audio Track connection buttons
Audio track shows a trim-knob -- which is SCALED(19x19px),
MIDI input button should follow suit.
2022-02-02 14:18:18 +01:00
Robin Gareus
6900facef2 Fix potential deadlock
block_processing() may hold the process-lock, waiting
for the latency-lock. at the same time audio-engine
may hold the latter, trying to acquire the former.
2022-02-02 14:16:50 +01:00
Paul Davis
fec679c602 triggerbox: refactor ::maybe_compute_next_transition() so that we can use the same code when fast-forwarding 2022-02-01 19:55:37 -07:00