noisicaa/noisicaa/audioproc/engine
Ben Niemann b29d0c6fc7 Persist plugin state.
- Now the state of the Helm synth is properly saved, although there is still odd behavior when using
  Helm's preset browser - which I blame Helm for.
- Control value changes are routed through the project process, so the model can be updated.
- Implement the LV2 state feature.
- Also add the concept of generation numbers to control value changes, so delayed updates don't
  cause weird issues with the UI.

Squashed commit of the following:

commit b87929098aeafa3375e209d5eb3362caeccbd6cd
Author: Ben Niemann <pink@odahoda.de>
Date:   Tue Apr 3 02:45:44 2018 +0200

    Change to plugin_state in model are propagated to the plugin host.

commit ae197b6a81a3a0a645cf8440a63b7aee53fab477
Author: Ben Niemann <pink@odahoda.de>
Date:   Tue Apr 3 01:37:46 2018 +0200

    Immediately unload plugin UI when hiding it.

    Currently crashes when closing the app while still waiting for the unload.

commit 12454b02ca8d388537389e9d031295d1f24a7e03
Author: Ben Niemann <pink@odahoda.de>
Date:   Tue Apr 3 01:37:25 2018 +0200

    Larger log files to make debugging easier.

commit 6ccae1f7c89cdd5ef0f699e676af8ea988f03351
Author: Ben Niemann <pink@odahoda.de>
Date:   Mon Apr 2 20:30:59 2018 +0200

    Set the initial plugin state from the state stored in the model.

    - Add PluginHost::set_state() methods and LV2 implementation.
    - Also make PluginHost::get_state() non-abstract.

    Somethings still missing, state isn't the same after reopening a project.

commit 25710a77549501bd80164105b50ab575f5f88c09
Author: Ben Niemann <pink@odahoda.de>
Date:   Mon Apr 2 02:14:24 2018 +0200

    Persist the plugin state in the model.

    - Regularly poll the plugin for its state.
    - If changed, post it back to project process.
    - The callback address to the project process is now set when creating the realm, and the stub
      is created by the PluginHost instance.
    - PluginHostLV2::get_state() does not create an empty lv2 message, if no properties are set.

commit 2fd537a73d77b30fa0b49193522b68ad928616a9
Author: Ben Niemann <pink@odahoda.de>
Date:   Mon Apr 2 02:11:48 2018 +0200

    Move PluginState message to noisicaa.audioproc.public.

commit 252946a849806745a7ae1d529dedf47406b98c6a
Author: Ben Niemann <pink@odahoda.de>
Date:   Sun Apr 1 19:22:02 2018 +0200

    Add API to dump LV2 plugin state into a proto message.

commit 6e0546cd47ce66e8481db2331496d7ba819c48b3
Author: Ben Niemann <pink@odahoda.de>
Date:   Sun Apr 1 19:18:11 2018 +0200

    Two test modules were missing from CMakeLists.txt.

commit fcb94a0f25322b7d60c124bc2af0344a4560e58a
Author: Ben Niemann <pink@odahoda.de>
Date:   Sun Apr 1 16:05:07 2018 +0200

    Control values are tracked as a (value, generation) pair.

    Implements a basic logical clock, so the UI can ignore delayed state updates.

    Also rename the BufferType classes for consistency.

commit 574078a6cd228a0af72d8c06d026ccac822cdcf2
Author: Ben Niemann <pink@odahoda.de>
Date:   Sat Mar 31 13:32:30 2018 +0200

    Post control value changes to the UI.

    Move the control port monitoring to PluginHostLV2, because it's only used by LV2 for now, and
    further improvements will be very LV2 specific.

commit 45b0ca8bf2769b6218ccc1b74aa91015a3c2af91
Author: Ben Niemann <pink@odahoda.de>
Date:   Fri Mar 30 17:52:40 2018 +0200

    PluginHost exposed control value changes via a slot.

    The slot is called in a non-rt context.

commit 31540a7ae5ff1e0f618faf4742628f41acee01ee
Author: Ben Niemann <pink@odahoda.de>
Date:   Fri Mar 30 16:50:01 2018 +0200

    ProjectProcess handles CONTROL_VALUE_CHANGE.

    Constructs and dispatches a SetPipelineGraphControlValue command, which automatically updates the
    audioproc and UI processes with the change.

commit 62b3f9d5ea3a3302f7bf5906c164cf7cbd2ec294
Author: Ben Niemann <pink@odahoda.de>
Date:   Fri Mar 30 16:18:50 2018 +0200

    Some more fixes, because PluginHostProcess doesn't take the audioproc server address anymore.

commit 1a4a687a5eb4a1a8188c0fb18a7f85223f841910
Author: Ben Niemann <pink@odahoda.de>
Date:   Fri Mar 30 15:56:46 2018 +0200

    PluginHostProcess expects a callback address for each UI.

    And uses that to post control value changes.
    Doesn't need the audioproc server address anymore.

commit ed1108e9ea97924204bf88a2d0bbf2594e221dae
Author: Ben Niemann <pink@odahoda.de>
Date:   Fri Mar 30 15:54:52 2018 +0200

    Allow lines with type annotation to exceed max length limit.

commit 07dd43e24f5368a2f1db2feb8a11ba35398b0fa9
Author: Ben Niemann <pink@odahoda.de>
Date:   Thu Mar 29 17:31:01 2018 +0200

    Remove obsolete class.
2018-04-09 04:11:37 +02:00
..
CMakeLists.txt Persist plugin state. 2018-04-09 04:11:37 +02:00
__init__.py Persist plugin state. 2018-04-09 04:11:37 +02:00
backend.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
backend.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
backend.pxd Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
backend.pyx Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
backend_null.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
backend_null.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
backend_portaudio.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
backend_portaudio.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
backend_renderer.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
backend_renderer.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
backend_test.py Persist plugin state. 2018-04-09 04:11:37 +02:00
block_context.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
block_context.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
block_context.pxd Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
block_context.pyx Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
buffer_arena.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
buffer_arena.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
buffer_arena.pxd Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
buffer_arena.pyx Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
buffers.cpp Persist plugin state. 2018-04-09 04:11:37 +02:00
buffers.h Persist plugin state. 2018-04-09 04:11:37 +02:00
buffers.pxd Persist plugin state. 2018-04-09 04:11:37 +02:00
buffers.pyx Persist plugin state. 2018-04-09 04:11:37 +02:00
buffers_test.pyx Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
control_value.cpp Persist plugin state. 2018-04-09 04:11:37 +02:00
control_value.h Persist plugin state. 2018-04-09 04:11:37 +02:00
control_value.pxd Persist plugin state. 2018-04-09 04:11:37 +02:00
control_value.pyx Persist plugin state. 2018-04-09 04:11:37 +02:00
double_buffered_state_manager.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
double_buffered_state_manager.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
double_buffered_state_manager.inl.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
engine.pyx Persist plugin state. 2018-04-09 04:11:37 +02:00
engine_perftest.py Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
engine_test.py Enable mypy by default. 2018-03-24 15:28:19 +01:00
graph.py Persist plugin state. 2018-04-09 04:11:37 +02:00
message_queue.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
message_queue.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
message_queue.pxd Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
message_queue.pyx Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
misc.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
misc.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
opcodes.cpp Persist plugin state. 2018-04-09 04:11:37 +02:00
opcodes.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
opcodes.pxd Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
opcodes_test.pyx Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
player.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
player.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
player.pxd Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
player.pyx Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
player_test.pyx Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
plugin_host.cpp Persist plugin state. 2018-04-09 04:11:37 +02:00
plugin_host.h Persist plugin state. 2018-04-09 04:11:37 +02:00
plugin_host.proto Persist plugin state. 2018-04-09 04:11:37 +02:00
plugin_host.pxd Persist plugin state. 2018-04-09 04:11:37 +02:00
plugin_host.pyx Persist plugin state. 2018-04-09 04:11:37 +02:00
plugin_host_ladspa.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
plugin_host_ladspa.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
plugin_host_ladspa_test.py Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
plugin_host_lv2.cpp Persist plugin state. 2018-04-09 04:11:37 +02:00
plugin_host_lv2.h Persist plugin state. 2018-04-09 04:11:37 +02:00
plugin_host_lv2_test.py Persist plugin state. 2018-04-09 04:11:37 +02:00
plugin_host_process.py Persist plugin state. 2018-04-09 04:11:37 +02:00
plugin_host_process_test.py Persist plugin state. 2018-04-09 04:11:37 +02:00
plugin_host_test.py Persist plugin state. 2018-04-09 04:11:37 +02:00
plugin_ui_host.cpp Persist plugin state. 2018-04-09 04:11:37 +02:00
plugin_ui_host.h Persist plugin state. 2018-04-09 04:11:37 +02:00
plugin_ui_host.pxd Persist plugin state. 2018-04-09 04:11:37 +02:00
plugin_ui_host.pyx Persist plugin state. 2018-04-09 04:11:37 +02:00
plugin_ui_host_lv2.cpp Persist plugin state. 2018-04-09 04:11:37 +02:00
plugin_ui_host_lv2.h Persist plugin state. 2018-04-09 04:11:37 +02:00
processor.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor.proto Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor.pxd Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor.pyx Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_csound.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_csound.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_csound_base.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_csound_base.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_csound_test.py Persist plugin state. 2018-04-09 04:11:37 +02:00
processor_custom_csound.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_custom_csound.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_cvgenerator.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_cvgenerator.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_cvgenerator_test.py Persist plugin state. 2018-04-09 04:11:37 +02:00
processor_fluidsynth.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_fluidsynth.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_fluidsynth_test.py Persist plugin state. 2018-04-09 04:11:37 +02:00
processor_null.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_null.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_pianoroll.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_pianoroll.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_pianoroll_test.py Persist plugin state. 2018-04-09 04:11:37 +02:00
processor_plugin.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_plugin.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_plugin_test.py Persist plugin state. 2018-04-09 04:11:37 +02:00
processor_sample_player.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_sample_player.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_sample_player_test.py Persist plugin state. 2018-04-09 04:11:37 +02:00
processor_sample_script.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_sample_script.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_sample_script_test.py Persist plugin state. 2018-04-09 04:11:37 +02:00
processor_sound_file.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_sound_file.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_sound_file_test.py Persist plugin state. 2018-04-09 04:11:37 +02:00
processor_test.py Make some random files mypy clean. 2018-03-25 20:48:24 +02:00
processor_track_mixer.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_track_mixer.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
processor_track_mixer_test.py Persist plugin state. 2018-04-09 04:11:37 +02:00
pump.h Persist plugin state. 2018-04-09 04:11:37 +02:00
pump.inl.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
realm.cpp Persist plugin state. 2018-04-09 04:11:37 +02:00
realm.h Persist plugin state. 2018-04-09 04:11:37 +02:00
realm.pxd Persist plugin state. 2018-04-09 04:11:37 +02:00
realm.pyx Persist plugin state. 2018-04-09 04:11:37 +02:00
realm_test.py Persist plugin state. 2018-04-09 04:11:37 +02:00
spec.cpp Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
spec.h Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
spec.pxd Massive refactoring of the audio layer. 2018-03-21 08:01:20 +01:00
spec.pyx Reanimate EventSourceNode to fix instrument library. 2018-03-22 20:52:09 +01:00
spec_test.pyx Persist plugin state. 2018-04-09 04:11:37 +02:00