13
0
Commit Graph

12236 Commits

Author SHA1 Message Date
3d1eb9a6e5 Session::auto_connect_thread_terminate() cannot use ::auto_connect_thread_wakeup() because that method is allowed to "fail".
Should fix hangs when closing a session with the ALSA backend (and perhaps others too).
2016-12-19 14:36:39 +00:00
004431426d Towards packing CairoWidgets on ArdourCanvas. 2016-12-19 13:36:42 +01:00
218d376154 vertically center text in time rulers 2016-12-19 13:27:22 +01:00
6bbb2c72f0 NO-OP: whitespace 2016-12-19 13:27:22 +01:00
bd0fc8cafc Shorten sync-button label/size 2016-12-18 23:17:29 +01:00
nick_m
d4f7f5ffa2 TempoMap - rename some methods.
gui_move_tempo   -> gui_set_tempo_position
	gui_move_meter   -> gui_set_meter_position
	gui_dilate_tempo -> gui_stretch_tempo
2016-12-19 04:13:17 +11:00
nick_m
27b95300e2 add frame parameter for Meter ctor and TempoMap::replace_meter(). allow for various failures. 2016-12-19 04:02:01 +11:00
nick_m
741df6e6ef there is no curve for identical note_types_per_minute values. 2016-12-19 03:23:33 +11:00
ecc2348ecc should not really bind a shared_ptr<Port> to a sigc slot, so don't do that 2016-12-18 00:07:59 +00:00
1223c8d1cd move termination of auto connect thread till after control protocols are destroyed.
Otherwise, control protocol ports don't actually get deleted
2016-12-18 00:07:59 +00:00
f80fb029e2 Prepare configurable mini-timeline time-span 2016-12-18 00:06:39 +01:00
8ba7e8f4ef Hide/remove per-track record-mode in favor of global setting. 2016-12-17 02:43:42 +01:00
73f8ffce63 add copy constructor, operator= and a clean ::dump() method for TempoMap 2016-12-16 16:49:27 +00:00
e487014e56 add arguments (unusued) to control whether or not SMF tempo map is used during import 2016-12-16 14:57:10 +00:00
6a0ea65885 "toll free bridging" between smf_tempo_t and Evoral::SMF::Tempo 2016-12-16 13:45:43 +00:00
c0aa738395 expose SMF tempo information in Evoral::SMF 2016-12-16 10:43:52 +00:00
2378e7b60c add function to get number of tempos found in SMF tempo map 2016-12-16 10:43:41 +00:00
fe0761d404 unused but slightly tricky code to add track name/instrument to an SMF file when saved 2016-12-16 09:36:52 +00:00
76dca432f0 add comments about limitations for Evoral::SMF and tracks 2016-12-16 09:36:52 +00:00
462c3eeb84 MIDI tracer actually changes the event-loop 2016-12-16 01:56:15 +01:00
6c88f339ca some further invalidation details:
Prevent double unref during when the EventLoop terminates:
deleting the ringbuffer deletes all requests, some of which may
contain stale invalidation

remove the buffer_map_lock, now that signals ref-count the IR.
2016-12-15 18:19:38 +01:00
529b91828d store InvalidationRecord in a Connection object and ref/unref it as appropriate 2016-12-15 16:36:50 +00:00
342c112ae3 add ::use_count() method to InvalidationRecord 2016-12-15 16:36:50 +00:00
nick_m
d118a60090 fix unused Outside filled framed curve for constant points outside the draw area. 2016-12-16 02:54:10 +11:00
nick_m
49c6d13386 revert c3ab67dd now that this misbehaviour is understood. 2016-12-16 02:52:39 +11:00
nick_m
d3ad6dc001 fix issue with disappearing tempo curve at constant tempi. 2016-12-16 02:50:07 +11:00
nick_m
9add5ed480 tempo before the initial section is always constant. 2016-12-16 02:15:56 +11:00
nick_m
9afe719827 amend incomplete change in previous commit. 2016-12-16 02:01:50 +11:00
nick_m
a99331a4e9 more work on patch change redisplay.
- fixes just-introduced undo crash.
2016-12-16 01:58:58 +11:00
nick_m
2a79bcd6b2 fix thinko in TempoMap::framepos_plus_qn.
- affects region relative time conversion when
	  initial meter is non-zero.
2016-12-16 01:04:22 +11:00
cf4668a11e std::list::erase() needs a non-const iterator.;
at least for some versions of gcc.
2016-12-15 11:40:22 +00:00
714da0f68e and now with erase 2016-12-15 10:57:40 +01:00
71bfe79e2c C++98 compatible iterator erase 2016-12-15 10:40:45 +01:00
a95be76741 rework request invalidation
This kills 2 birds with 1 stone: Removes the necessity of locks
and makes call_slot() realtime safe (req->invalidation->requests list
push_back). On object destruction, the invalidation-record (IR) itself is
invalidated.

Invalidated IRs are pushed onto a trash-pool and deleted in the event-loop
of the invalidated object (GUI thread) once all requests that reference it
have been processed.

One last detail remains: PBD::signal connect should reference the IR
and disconnect unreference it. This will guarantee that signal emission
will not reference the IR while the pool trash is dropped.
2016-12-15 06:11:30 +01:00
62b06fa427 Add a trash pool for invalidation requests.
While EventLoop::invalidate_request() does invalidate request in the
request-list. It does *not* invalidate requests in the
per-thread-request-ringbuffer(s).
The invalidation record cannot be deleted in EventLoop::invalidate_request
see 6b5891a78f.
2016-12-14 22:39:25 +01:00
07bcdc7f0a NO-OP: re-indent 2016-12-14 22:39:22 +01:00
77845f6019 Atomically to invalidate request
Yet another slightly overkill approach, but it /may/ explain crashes.
2016-12-14 22:39:18 +01:00
7dbdf6cc6d Add some more invalidation debug messages. 2016-12-14 19:43:12 +01:00
6b5891a78f The threading anecdotes - Episode 7
When do_request() destroys the receiver object, the receiver will
free the invalidation record. So the IR needs to be removed from the list
before executing the request.

Invalid read of size 8
   at: AbstractUI<Gtkmm2ext::UIRequest>::handle_ui_requests() (abstract_ui.cc:242)
   by: BaseUI::request_handler(Glib::IOCondition) (base_ui.cc:141)
   by: sigc::bound_mem_functor1<bool, BaseUI, Glib::IOCondition>::operator()(Glib::IOCondition const&) const (mem_fun.h:2066)
   by: sigc::adaptor_functor<sigc::bound_mem_functor1<bool, BaseUI, Glib::IOCondition> >::deduce_result_type<Glib::IOCondition const&, void, void, void, void, void, void>::type sigc::adaptor_functor<sigc::bound_mem_functor1<bool, BaseUI, Glib::IOCondition> >::operator()<Glib::IOCondition const&>(Glib::IOCondition const&) const (adaptor_trait.h:89)
   by: sigc::internal::slot_call1<sigc::bound_mem_functor1<bool, BaseUI, Glib::IOCondition>, bool, Glib::IOCondition>::call_it(sigc::internal::slot_rep*, Glib::IOCondition const&) (slot.h:148)
   by: sigc::slot1<bool, Glib::IOCondition>::operator()(Glib::IOCondition const&) const (slot.h:643)
   by: cross_thread_channel_call_receive_slot(_GIOChannel*, GIOCondition, void*) (crossthread.cc:49)
   by: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2)
   by: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2)
   by: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2)
   by: gtk_main (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.31)
   by: Gtkmm2ext::UI::run(Receiver&) (gtk_ui.cc:286)
   by main (main.cc:408)
 Addrd1b8 is 24 bytes inside a block of size 48 free'd
   at: operator delete(void*) (vg_replace_malloc.c:576)
   by: PBD::EventLoop::invalidate_request(void*) (event_loop.cc:98)
   by: sigc::internal::trackable_callback_list::~trackable_callback_list() (in /usr/lib/x86_64-linux-gnu/libsigc-2.0.so.0.0.0)
   by: sigc::trackable::notify_callbacks() (in /usr/lib/x86_64-linux-gnu/libsigc-2.0.so.0.0.0)
   by: ProcessorEntry::LuaPluginDisplay::~LuaPluginDisplay() (processor_box.cc:1757)
   by: ProcessorEntry::LuaPluginDisplay::~LuaPluginDisplay() (processor_box.cc:1760)
   by: ProcessorEntry::~ProcessorEntry() (processor_box.cc:251)
2016-12-14 18:46:01 +01:00
518c31eeb7 skip dead threads (if the event remains, it'll be cleaned up below) 2016-12-14 17:48:44 +01:00
036390f4c2 fix potential invalid lock 2016-12-14 17:31:31 +01:00
7a1ff7ce8f rework locking (fa07233a, 112fba182)
For now: use a single lock, which should fix all related crashes.
optimize (with less contended partial locks) if this works.
2016-12-14 13:43:20 +01:00
f3b3a411d0 use SMF track or instrument names in imported MIDI track names, if requested 2016-12-14 11:46:26 +00:00
6ea7f37c6b add new member to ImportStatus object to allow specifying how to name new MIDI tracks 2016-12-14 11:46:26 +00:00
721f3270c3 add a new enum to identify how SMF data should be used when naming imported MIDI tracks 2016-12-14 11:46:26 +00:00
d2fd01c241 add API to Evoral::SMF to retrieve all track/instrument names for use when importing 2016-12-14 11:46:26 +00:00
7e0dbd06db extract track and instrument names from SMF while loading 2016-12-14 11:46:26 +00:00
24160a3b85 add braces and warning for unlikely error 2016-12-14 11:46:26 +00:00
ff6f8ca6c4 fix incorrect test for textual meta events in libsmf 2016-12-14 11:46:26 +00:00
54ef5fadc2 braces please 2016-12-14 11:46:26 +00:00
d5074be4f1 braces, please 2016-12-14 11:46:26 +00:00
8002a0c66e free track name/instrument string memory when necessary 2016-12-14 11:46:26 +00:00
28caef7d81 add track and instrument name members to smf_track_t 2016-12-14 11:46:26 +00:00
dd525d1613 release locks before deleting record 2016-12-14 02:25:13 +01:00
112fba182f amend prev commit 2016-12-14 00:51:40 +01:00
fa07233a17 mutex 'er up
Some overzealous locking to track down RequestObject related crashes.

bc0fa4d689 wrongly locked the current event loop's
request_invalidation_lock instead of the invalidation's list lock.

Also Abstract UI is able to delete requests concurrently with with
EventLoop invalidation.
e.g. PortManager::PortRegisteredOrUnregistered  and GlobalPortMatrixWindow
so the lock needs to be exposed.

If this solves various issues, mutexes should to be consolidated
(request_buffer_map_lock + request_invalidation_lock) and be chosen
such that there is as little contention as possible.
2016-12-13 23:47:07 +01:00
545f5bee87 changes to adapt to modified version of GTK/Quartz which uses only MOD2 for Command, everywhere.
The default version of GTK2/Quartz uses MOD2+META for keys and MOD2 for scroll, which is
basically insane
2016-12-13 07:02:08 -05:00
989f934c38 Fix layered-record undo, include changes to existing region(s) 2016-12-13 02:33:07 +01:00
8276a4658a Fix possible crash when removing ports with jack1 2016-12-12 22:47:16 +01:00
e37bfffca5 Add Slavable::AssignmentChanged signal to notify when a slavable is assigned/unassigned to/from a master 2016-12-12 18:43:55 +00:00
nick_m
e9deb82ef6 only update MidiRegion length_beats in partial copy ctor if there is an offset. 2016-12-13 04:36:07 +11:00
nick_m
a4d8cc2e04 only recalculate MidiRegion start_beats if there is an offset in the 'part-of' ctor.
- when drag-copying MIDI regions, a partial region ctor is used
	  which can lead to _start_beats being off by a sample.
	  this in turn leads to 7168 happening, but only if magnetic snap
	  is used and the regions are copied as a group.
	  this should fix 7168, but the magnetic snap part is not yet addressed.
2016-12-13 02:15:34 +11:00
d3803c54de Fix a potential deadlock/crash (here tape-track peak-file)
read_peaks_with_fpp() already holds _lock, build_peaks_from_scratch()
takes the _lock again.

Depending on glib[mm] and the threading lib it may either result in a
deadlock, or with EDEADLK in undefined behavior when a
non-recursive lock is released twice.
2016-12-12 03:13:16 +01:00
b52bf1a42c Fix potential deadlock on session-load 2016-12-12 00:09:38 +01:00
nick_m
e4d6e4a87f disallow placement of audio-locked tempi within a frame of any other. 2016-12-12 02:37:26 +11:00
nick_m
9598f2a811 fix loop/crash when dragging an audio-locked tempo over a music-locked one while snapped to grid. 2016-12-12 02:07:00 +11:00
nick_m
0d7b298fbe no-op - rename TempoMap::set_active_tempos -> TempoMap::set_active_tempi 2016-12-12 02:07:00 +11:00
nick_m
4d625d35b6 clean up some odd logic. 2016-12-12 02:07:00 +11:00
nick_m
34e41a3ca6 rename MetricSection movable -> initial, but of course initial is !movable.. 2016-12-12 02:07:00 +11:00
0c54e56f96 Add support for MacVST hidden/favorites 2016-12-11 15:52:56 +01:00
nick_m
c3ab67ddb6 go back to always interpolating framed curve points. 2016-12-11 23:54:03 +11:00
nick_m
00eef2e000 make TempoMap::dump slightly more readable. 2016-12-11 23:51:00 +11:00
nick_m
d8cabc67d9 fix incorrect audio-locked tempo position when setting bbt via tempo dialog. 2016-12-11 23:49:02 +11:00
nick_m
08cec2350e fix bar renumbering for audio-locked metrum. 2016-12-11 23:42:26 +11:00
cdbf49b873 Revert "Pixel hunt cairo-packer (status-bar, selection-clock border)"
This reverts commit 6015481377.
2016-12-11 02:19:10 +01:00
6015481377 Pixel hunt cairo-packer (status-bar, selection-clock border) 2016-12-11 01:32:27 +01:00
39903a0023 Check for reserved i/o that are not routes, fixes #7171 2016-12-11 00:04:08 +01:00
642b357376 CairoPacker draws outside of its widget allocation
This fixes fixes TimeInfoBox packing when the InfoBox position changes.
2016-12-10 21:30:33 +01:00
1468e270de Tweak transport icons 2016-12-10 15:56:47 +01:00
61693a318a Add LIBPBD_API to a function declaration
The new specialisation for ConfigVariable<float>::set_from_string() needs to be exportable (it gets used somehow by ARDOUR::SessionConfiguration).

If adding LIBPBD_API causes a problem for gcc, we could change it to LIBPBD_TEMPLATE_MEMBER_API
2016-12-08 17:29:49 +00:00
3fe99b0c7c remove dups. 2016-12-08 15:41:21 +01:00
975f959adb For building with MSVC, std::strtof() didn't get introduced until VS2013
(use std::strtod() in earlier versions)
2016-12-08 13:57:23 +00:00
f04c1ca4db I can't find a source file called MIDIXML.cpp (??) 2016-12-08 13:55:11 +00:00
4992ed1211 Add missing enum bindings 2016-12-08 13:21:00 +01:00
61c7af141d Clarify "frames" (video, timecode) vs "samples" (audio) 2016-12-08 12:45:44 +01:00
f05f19bdd4 add Lua bindings for Timecode conversion 2016-12-08 12:45:44 +01:00
e1ca4b2887 Speed up recent session display (for many large sessions)
- don't parse XML into XMLTree
- only read the file, extract relevant elements
- don't read session-template contents, only test file
2016-12-08 10:36:12 +01:00
9a46d593cb a-fluidsynth process events even when no sf2 is loaded.
Keep track of program-changes, re-apply Bank/PGM once the
soundfont is loaded. fluidsynth itself keeps track of CCs.
2016-12-07 19:48:52 +01:00
bb30d92814 amend 581c7b6 -Wparentheses 2016-12-07 19:47:29 +01:00
295562dd52 Save/Restore MIDI Automation Controls (current CC, PGM) 2016-12-07 19:47:04 +01:00
581c7b6b10 Speed up unloading large sessions. 2016-12-07 12:50:35 +01:00
fe45f9bc21 Set MidiPgmChangeAutomation control value 2016-12-07 12:45:01 +01:00
28ab1f1f74 Add Lua bindings to inspect MidiTrack::MidiControl 2016-12-07 11:30:40 +01:00
f521bdb9dc Fix another crash at exit. 2016-12-07 01:58:58 +01:00
22ff03ff60 fix copy/paste typo in prev. commit 2016-12-07 01:06:22 +01:00
b14ece32c2 Work around silence-trim config 0dBFS (7b1f97bf) 2016-12-07 01:03:46 +01:00
230fa064b2 Revert "Fix export silence threshold by using a constant value for now"
This reverts commit 6784923a05.
2016-12-07 00:56:14 +01:00
7b1f97bffa fix parsing "-inf" in config variables
The default for export-silence-threshold is -INFINITY, written
as "-inf" (by cfgtool) into system_config. Yet parsing the config using
a std::stringstream results in "0" (due to bugs in various libc++).
2016-12-07 00:50:00 +01:00
1ef1734e76 Allow sparse CC lists. 2016-12-06 22:56:04 +01:00
2d37392f1a a-fluid synth: label Reverb & Chorus sends.
Also globally enable Reverb + Chorus FX (so that sends work by default)
2016-12-06 22:56:04 +01:00
f26ed23fd9 a-fluid synth: list all bank/programs 2016-12-06 17:00:12 +01:00
9c20892c27 Turn a-fluidsynth into C++ 2016-12-06 17:00:12 +01:00
8d8132aa3c rough-in a-fluid synth midnam support 2016-12-06 17:00:12 +01:00
Julien ROGER
0356d64195 Fix #6753
Fix "Illegal instruction" due to recursive acquisition/multi release on a RWLock

See #6753 notes
2016-12-06 22:41:25 +10:00
4985f0d7ae Include last sample in reverse test for nonsilence in end trim during export 2016-12-06 20:55:17 +10:00
b7bee5c903 Fix Multi Duplicate for a Range Selections
As mentioned in the previous commit
2016-12-06 14:06:18 +10:00
bd52d4e328 Fix issues in export with trim enabled
A complete reimplementation of AudioGrapher::SilentTrimmer::process to support
trimming the beginning and end in the same processing block

Fix export with trim end enabled to actually trim silent frames

Only add silence to beginning or end of export data if data was written

Should resolve: #6412
2016-12-06 13:44:19 +10:00
568cf861f9 Rename AudioGrapher::SilentTrimmer method to reflect behaviour
Unlike many of the other uses of the term "frame" this is actually returning
the index to the first sample in the interleaved frame that contains
non-silence.
2016-12-06 13:43:10 +10:00
2c67e71e98 Always signal writing to file is complete at end of the export process
With end trim enabled, the only case that would successfully export was if
there was at least some samples above the silence threshold in the last export
processing block.

The issue was that the EndOfInput flag was not being passed to
AudioGrapher::SndFileWriter::process which would then call sf_write_sync and
emit the FileWritten signal to start post processing. Fix that by always
passing the EndOfInput flag in the last export process cycle.

Related: #6412
2016-12-06 13:43:09 +10:00
6784923a05 Fix export silence threshold by using a constant value for now
All float values defined in the CONFIG_VARIABLE macro seem like they are cast
to at some stage before writing (another issue that needs addressing). The
default value for export-silence-threshold (-INFINITY) is converted to a value
of 0 and as a result nothing is exported with trim enabled.

Use the same fixed silence threshold as Mixbus until proper bounds checking and
GUI is in place.

Related: #6412
2016-12-06 13:41:17 +10:00
9e794af3ea Add script to run audiographer tests 2016-12-06 13:20:54 +10:00
62672fa259 add another useful PluginInsert binding 2016-12-06 00:22:24 +01:00
ed5a46d214 Fixup 08fffef (consistent class name) 2016-12-05 23:49:19 +01:00
7f9befae2d Add Lua bindings to manage Groups 2016-12-05 23:49:19 +01:00
3cc644b467 set AtomObject body ID to zero (as per spec when unused) 2016-12-05 15:43:54 +01:00
388765e8ce Remove boost_system test kludge 2016-12-04 19:15:29 -05:00
5ab2e34b2c Update evoral test suite 2016-12-04 18:49:56 -05:00
9a848d5ba6 Fix configuration 2016-12-04 18:26:30 -05:00
1438191938 Improve coverage of evoral tests 2016-12-04 15:40:21 -05:00
9dbc524060 Improve coverage of evoral tests 2016-12-04 15:17:08 -05:00
9aac954744 Add missing include 2016-12-04 15:16:08 -05:00
b51321bd7d Make libpbd and evoral capable of standalone build
Just an update to slightly rotten wscripts, shouldn't be any changes during an
ardour build.  Motivation being a short development cycle for working on evoral
and/or its test suite.
2016-12-04 15:15:11 -05:00
7d2ed46b63 Remove dead/annoying/unsafe code
Note the old Note::operator= was unsafe, since it made shallow copies of the on
and off events, which results in a double delete of events when the notes are
destructed.
2016-12-04 15:10:05 -05:00
11464bfb18 Skip testing example lua scripts which are not bundled 2016-12-04 17:50:34 +01:00
454df30ae5 Fix Sequence test 2016-12-03 15:49:13 -05:00
d17f58e531 Remove dead code 2016-12-03 15:28:23 -05:00
398a318934 Fix event type and parameter type confusion
I'm not sure if this is really the best way to do event types (should it
just be a completely static enum in evoral, or completely dynamic and
provided by the type map, or a mix like currently?), but previously the
event type was frequently set to either total garbage, or parameter
types, which are a different thing.

This fixes all those cases, and makes Evoral::EventType an enum so the
compiler will warn about implicit conversions from int.
2016-12-03 15:28:19 -05:00
bfbc4566ad Fix warnings 2016-12-03 15:27:38 -05:00
08fffeffec Remove Evoral::MIDIEvent
It is slightly questionable whether type specific methods like
velocity() belong on Event at all, these may be better off as free
functions.  However the code currently uses them as methods in many
places, and it seems like a step in the right direction, since, for
example, we might some day have events that have a velocity but aren't
stored as MIDI messages (e.g. if Ardour uses an internal musical model
that is more expressive).

In any case, the former inheritance and plethora of sloppy casts is
definitely not the right thing.
2016-12-03 15:18:21 -05:00
875b1367b2 Factor out and extend MIDIXML implementation 2016-12-03 15:18:20 -05:00
0f5a73a7fd Fix Sequence/Event const-correctness issues 2016-12-03 15:18:20 -05:00
b433874019 update summary & connection-matrix colors when route-color changes 2016-12-01 15:51:25 +01:00
Olivier Humbert
e44e1f6227 One fix. 2016-11-30 22:25:46 +01:00
Olivier Humbert
059bbbf23f French translation update 2016-11-30 20:31:32 +01:00
Olivier Humbert
193a0c7671 French translation update
more translation + fixes
2016-11-30 20:24:52 +01:00
f1f47664ff fix compilation with newer version of *mm and gcc-6.2 (RefPtr<> cast) 2016-11-30 16:00:05 +01:00
24c799cde3 prefer bool operator 2016-11-30 12:15:35 +01:00
David Carlier
be7c6225c8 moving POSIX_VISIBLE to the waf script part 2016-11-29 13:18:46 +00:00
David Carlier
28435d1a30 Making buildable under OpenBSD. 2016-11-29 13:18:46 +00:00
5f1d94a7b2 Protect a-comp's display/state against NaN/Inf. 2016-11-29 09:04:13 +01:00
0fe62a34da protect a-delay again Inf, NaN, HUGE and stuff. 2016-11-29 08:41:10 +01:00
7b687d08a1 properly handle FS pitch-bend - closes #7140 2016-11-28 12:53:20 +01:00
2614b0df43 OSC: Solo toggle should maintain state when locked, rec and rec_safe should show true state. 2016-11-27 20:52:14 -08:00
e9eea8de9d Fix Duplicate Track with Copy Playlist option selected
Previously two new empty playlists were created.

Related to and mentioned in issue #7141
2016-11-28 12:38:58 +10:00
8ddeca133b OSC: Squelch select feedback when no feedback is configured. 2016-11-27 18:32:50 -08:00
f50ab8ccec Fix duplicate track with new playlist so only one playlist is created
Instead of 2 empty playlists, thanks to elgoun for the patch

Resolves: #7141
2016-11-28 10:57:06 +10:00
1de584961a NO-OP; Backport changes from Mixbus branch 2016-11-27 22:54:23 +01:00
2f30d763ed Fix loading, recording & saving MIDI with PolyKeyPressure events.
GUI still does not handle this (neither automation lane, nor List Editor),
but the file loads, plays and exports correctly.
2016-11-27 17:25:42 +01:00
9bf4f339b9 revert 335debfa for the PA backend
The same device may have different names for input + output
2016-11-27 00:42:08 +01:00
d26aac9020 OSC: no op, white space cleanup 2016-11-26 10:23:36 -08:00