Code Monkey home page Code Monkey logo

drmr's Introduction

DrMr

DrMr is an LV2 sampler plugin. It's main reason to exist is to give a way for lv2 hosts to have a built in drum synth that can save its entire state (i.e. no need to go out to external tools and no need to save extra state). See the wiki (click the wiki tab above) for some screenshots. DrMr currently supports the following:

  • Control via midi
  • Scan for and load hydrogen drum kits (see note 3)
  • Multi-layer hydrogen kits (will pick layer based on that samples set gain)
  • Kit is set via an LV2 control (see note 1 below)
  • LV2 controls for gain on first 32 samples of kit (see note 2 below)
  • LV2 controls for pan on first 32 samples of kit (see note 2 below)
  • GTK ui that can select a kit and control gain/pan on each sample
  • Custom knob widget for GTK ui based on phatknob that is both functional and awesome looking. (see wiki for screenshot)
  • Sample grid can start in any corner of the window, to match the layout of your controller.

Hopefully coming soon:

  • Creating / Saving custom kits on a per sample basis using the GTK UI
  • ASDR envelope on samples (Will be automatable and controllable in the UI)

DrMr is a new project, so the code should be considered alpha. Bug reports are much appreciated.

The lv2unstable Branch

There is a branch of DrMr that has a number of new features, the most useful being that the kit loaded can be saved properly as a path, and so the issue described in note 1 below is no longer an issue. You can click the branch button near the top of the page and select lv2unstable to see more information.

The lv2unstable requires some new lv2 features not available outside the lv2-svn version at the moment, so it's living in its own branch, but it will be merged as the main branch when the required features stabilize.

Download

Only via git for now, just check out this repo

Compilation and Install

DrMr is built with CMake.

To build it simply do (from this dir):

mkdir build
cd build
cmake ..    (or "cmake -DUSE_NKNOB=OFF .." if you want old style sliders)

Then do:

make
make install

to install. There are some customizable variables for cmake. To see them do "cmake -L". The important ones are:

USE_NKNOB - Use custom knob widget for controls instead of the default gtk sliders. This defaults to ON. Try turning it off if you are experiencing problems, or just prefer the sliders.

SAMP_ZERO_POS - Controls where sample zero will position itself in the sample table. This is just the default value, and can be changed in the ui when DrMr is running. Valid values are:

0 - Top Left (default)
1 - Bottom Right (This will align with many drum machines and MIDI pads)
2 - Top Right
3 - Bottom Right

Any other value will emit a warning and use 0.

LV2_INSTALL_DIR - The directory to install the DrMr plugin to. To install to your home directory, use "~/.lv2" and clear the CMAKE_INSTALL_PREFIX. This defaults to "lib/lv2" (this is relative to CMAKE_INSTALL_PREFIX, which is usually /usr/local)

You can also use "ccmake .." or "cmake-gui .." for a more interactive configuration process.

A legacy Makefile is included, that will possibly work for you if you don't want to use cmake. To use it just do (from this dir):

make -f Makefile.legacy
make -f Makefile.legacy install

You'll need the following libraries to build and install DrMr:

DrMr scans the following directories for hydrogen drum kits:

  • /usr/share/hydrogen/data/drumkits/
  • /usr/local/share/hydrogen/data/drumkits/
  • /usr/share/drmr/drumkits/
  • ~/.hydrogen/data/drumkits/
  • ~/.drmr/drumkits/

If you want to add others, add them to the default_drumkit_locations array at the top of drmr_hydrogen.c

Note 1

As stated above, a goal of DrMr is to have the host save all the state for you. As such, the current kit needs to be a control. Unfortunately, string controls in LV2 are experimental at the moment, and not supported by many hosts (in particular Ardour doesn't support them). This means the kit needs to be set via a numeric control. DrMr specifies an integer index as a control to select which kit to load. A kits index is the order in which is was found. This means changing, adding, or removing hydrogen kits could mess up your saved index. Sorry.

You can figure out which kit is loaded by looking in the GtkUI at the bottom, or look at the print output from your host, as drmr will print the names of kits as it loads them.

Note 2

DrMr is currently using a static ttl file. This means I have to decide statically how many gain/pan controls to expose. I've settled on 32 for the moment, but that is arbitrary. At some point DrMr will probably move to using the LV2 Dynamic Manifest feature to expose the appropriate number of gain controls for the current sample set, although how force a host update of the manifest when the kit is changed is unclear (if you know how, please let me know)

Note 3

DrMr only currently supports a subset of things that can be specified in a hydrogen drumkit.xml file. Specifically, DrMr will not use gain/pan/pitch/asdr information. DrMr basically only uses the filename and layer min/max information to build it's internal sample representation. Values specified in .xml files will be used as DrMr begins to support the features needed for those values to make sense.

drmr's People

Contributors

nicklan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

drmr's Issues

Crashing Ardour 5

I was playing DrMr Sampler with a MIDI controller, while suddenly Ardour crashed.
As I was running a debug build, here's the full GDB backtrace from Ardour-5.4.40-dbg:

(gdb) thread apply all bt

Thread 157 (Thread 0x7fffc4cfd700 (LWP 25837)):
#0  pthread_cond_wait@@GLIBC_2.3.2 ()
    at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fffb21f590d in ?? () from /usr/lib/lv2/drmr.lv2/drmr.so
#2  0x00007fffef5b06fa in start_thread (arg=0x7fffc4cfd700)
    at pthread_create.c:333
#3  0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 57 (Thread 0x7fffc54fe700 (LWP 30285)):
#0  syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007ffff3882fcc in g_cond_wait ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#2  0x00007ffff79064e3 in ArdourCanvas::WaveView::drawing_thread ()
    at ../libs/canvas/wave_view.cc:1565
#3  0x0000000000e535fd in sigc::pointer_functor0<void>::operator() (
    this=0xc47f798)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/functors/ptr_fun.h:77
#4  0x0000000000e507a0 in sigc::adaptor_functor<sigc::pointer_functor0<void> >::operator() (this=0xc47f790)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/adaptors/---Type <return> to continue, or q <return> to quit---
adaptor_trait.h:251
#5  0x0000000000e4c84b in sigc::internal::slot_call0<sigc::pointer_functor0<void>, void>::call_it (rep=0xc47f760)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/functors/slot.h:103
#6  0x00007ffff3dcb23d in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglibmm-2.4.so.1
#7  0x00007ffff3861225 in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#8  0x00007fffef5b06fa in start_thread (arg=0x7fffc54fe700)
    at pthread_create.c:333
#9  0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 56 (Thread 0x7fff837fe700 (LWP 30206)):
#0  0x00007fffef5b9c5d in nanosleep () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007ffff3862a48 in g_usleep ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#2  0x00007ffff63d97c1 in ARDOUR::AutomationWatch::thread (this=0x2ed9390)
    at ../libs/ardour/automation_watch.cc:153
#3  0x00007ffff63dcd41 in boost::_mfi::mf0<void, ARDOUR::AutomationWatch>::operator() (this=0x9624ae0, p=0x2ed9390)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/bind/mem_fn_template.---Type <return> to continue, or q <return> to quit---
hpp:49
#4  0x00007ffff63dc926 in boost::_bi::list1<boost::_bi::value<ARDOUR::AutomationWatch*> >::operator()<boost::_mfi::mf0<void, ARDOUR::AutomationWatch>, boost::_bi::list0> (this=0x9624af0, f=..., a=...)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/bind/bind.hpp:253
#5  0x00007ffff63dc3a7 in boost::_bi::bind_t<void, boost::_mfi::mf0<void, ARDOUR::AutomationWatch>, boost::_bi::list1<boost::_bi::value<ARDOUR::AutomationWatch*> > >::operator() (this=0x9624ae0)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/bind/bind_template.hpp:20
#6  0x00007ffff63dc334 in sigc::adaptor_functor<boost::_bi::bind_t<void, boost::_mfi::mf0<void, ARDOUR::AutomationWatch>, boost::_bi::list1<boost::_bi::value<ARDOUR::AutomationWatch*> > > >::operator() (this=0x9624ae0)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:251
#7  0x00007ffff63dbe4a in sigc::internal::slot_call0<boost::_bi::bind_t<void, boost::_mfi::mf0<void, ARDOUR::AutomationWatch>, boost::_bi::list1<boost::_bi::value<ARDOUR::AutomationWatch*> > >, void>::call_it (rep=0x9624ab0)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/functors/slot.h:103
#8  0x00007ffff3dcb23d in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglibmm-2.4.so.1
#9  0x00007ffff3861225 in ?? ()
---Type <return> to continue, or q <return> to quit---
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#10 0x00007fffef5b06fa in start_thread (arg=0x7fff837fe700)
    at pthread_create.c:333
#11 0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 55 (Thread 0x7fffb37fe700 (LWP 30205)):
#0  pthread_cond_wait@@GLIBC_2.3.2 ()
    at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007ffff6883b09 in ARDOUR::Session::auto_connect_thread_run (
    this=0x2f92b80) at ../libs/ardour/session.cc:7093
#2  0x00007ffff688387e in ARDOUR::Session::auto_connect_thread (arg=0x2f92b80)
    at ../libs/ardour/session.cc:7047
#3  0x00007fffef5b06fa in start_thread (arg=0x7fffb37fe700)
    at pthread_create.c:333
#4  0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 54 (Thread 0x7fff82ffd700 (LWP 30204)):
#0  pthread_cond_wait@@GLIBC_2.3.2 ()
    at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007ffff68f4a95 in ARDOUR::Session::emit_thread_run (this=0x2f92b80)
    at ../libs/ardour/session_process.cc:1316
---Type <return> to continue, or q <return> to quit---
#2  0x00007ffff68f4a32 in ARDOUR::Session::emit_thread (arg=0x2f92b80)
    at ../libs/ardour/session_process.cc:1305
#3  0x00007fffef5b06fa in start_thread (arg=0x7fff82ffd700)
    at pthread_create.c:333
#4  0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 48 (Thread 0x7fffb0feb700 (LWP 29784)):
#0  0x00007fffec2a4e8d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007ffff3831674 in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#2  0x00007ffff38319f2 in g_main_loop_run ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#3  0x00007ffff4a620fb in BaseUI::main_thread (this=0x3f1add0)
    at ../libs/pbd/base_ui.cc:86
#4  0x00007ffff4a66140 in sigc::bound_mem_functor0<void, BaseUI>::operator() (
    this=0x3f1b558)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/functors/mem_fun.h:1787
#5  0x00007ffff4a65d72 in sigc::adaptor_functor<sigc::bound_mem_functor0<void, BaseUI> >::operator() (this=0x3f1b550)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:251
---Type <return> to continue, or q <return> to quit---
#6  0x00007ffff4a65821 in sigc::internal::slot_call0<sigc::bound_mem_functor0<void, BaseUI>, void>::call_it (rep=0x3f1b520)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/functors/slot.h:103
#7  0x00007ffff3dcb23d in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglibmm-2.4.so.1
#8  0x00007ffff3861225 in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#9  0x00007fffef5b06fa in start_thread (arg=0x7fffb0feb700)
    at pthread_create.c:333
#10 0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 47 (Thread 0x7fffc40db800 (LWP 29783)):
#0  0x00007fffec2a4e8d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007ffff4a77f00 in CrossThreadChannel::poll_for_request (this=0x2f1c7d8)
    at ../libs/pbd/crossthread.posix.cc:75
#2  0x00007ffff4a77f69 in CrossThreadChannel::receive (this=0x2f1c7d8, 
    msg=@0x7fffc40da46f: 0 '\000', wait=true)
    at ../libs/pbd/crossthread.posix.cc:96
#3  0x00007ffff63ecf8c in ARDOUR::Butler::thread_work (this=0x2f1c740)
    at ../libs/ardour/butler.cc:175
#4  0x00007ffff63ecd0d in ARDOUR::Butler::_thread_work (arg=0x2f1c740)
---Type <return> to continue, or q <return> to quit---
    at ../libs/ardour/butler.cc:156
#5  0x00007ffff4a99eb6 in fake_thread_start (arg=0x3f1abc0)
    at ../libs/pbd/pthread_utils.cc:101
#6  0x00007fffef5b06fa in start_thread (arg=0x7fffc40db800)
    at pthread_create.c:333
#7  0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 46 (Thread 0x7fffc435f700 (LWP 29774)):
#0  0x00007fffb21f63fd in ?? () from /usr/lib/lv2/drmr.lv2/drmr.so
#1  0x00007fffb21f691c in ?? () from /usr/lib/lv2/drmr.lv2/drmr.so
#2  0x00007ffff69bf801 in lilv_instance_run (instance=0xe100a70, 
    sample_count=256)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/lilv-0/lilv/lilv.h:1662
#3  0x00007ffff69cedaa in ARDOUR::LV2Plugin::run (this=0xe204a80, nframes=256, 
    sync_work=false) at ../libs/ardour/lv2_plugin.cc:2878
#4  0x00007ffff69cca40 in ARDOUR::LV2Plugin::connect_and_run (this=0xe204a80, 
    bufs=..., start=4067584, end=4067840, speed=0, in_map=..., out_map=..., 
    nframes=256, offset=0) at ../libs/ardour/lv2_plugin.cc:2539
#5  0x00007ffff67873a4 in ARDOUR::PluginInsert::connect_and_run (
    this=0xe3c2890, bufs=..., start=4067584, end=4067840, speed=0, 
    nframes=256, offset=0, with_auto=true)
    at ../libs/ardour/plugin_insert.cc:904
---Type <return> to continue, or q <return> to quit---
#6  0x00007ffff678888f in ARDOUR::PluginInsert::run (this=0xe3c2890, bufs=..., 
    start_frame=4067584, end_frame=4067840, speed=0, nframes=256)
    at ../libs/ardour/plugin_insert.cc:1095
#7  0x00007ffff6810180 in ARDOUR::Route::process_output_buffers (
    this=0xdf2ff60, bufs=..., start_frame=4067584, end_frame=4067840, 
    nframes=256, declick=0, gain_automation_ok=true)
    at ../libs/ardour/route.cc:450
#8  0x00007ffff6811252 in ARDOUR::Route::passthru (this=0xdf2ff60, bufs=..., 
    start_frame=4067584, end_frame=4067840, nframes=256, declick=0)
    at ../libs/ardour/route.cc:608
#9  0x00007ffff69aabb3 in ARDOUR::Track::no_roll (this=0xdf2ff60, nframes=256, 
    start_frame=4067584, end_frame=4067840, session_state_changing=false)
    at ../libs/ardour/track.cc:480
#10 0x00007ffff670de33 in ARDOUR::MidiTrack::no_roll (this=0xdf2ff60, 
    nframes=256, start_frame=4067584, end_frame=4067840, state_changing=false)
    at ../libs/ardour/midi_track.cc:457
#11 0x00007ffff64df539 in ARDOUR::Graph::process_one_route (this=0x442b6c0, 
    route=0xdf2ff60) at ../libs/ardour/graph.cc:585
#12 0x00007ffff64e4c62 in ARDOUR::GraphNode::process (this=0xdf30268)
    at ../libs/ardour/graphnode.cc:79
#13 0x00007ffff64dda97 in ARDOUR::Graph::run_one (this=0x442b6c0)
    at ../libs/ardour/graph.cc:400
#14 0x00007ffff64ddcc6 in ARDOUR::Graph::helper_thread (this=0x442b6c0)
---Type <return> to continue, or q <return> to quit---
    at ../libs/ardour/graph.cc:418
#15 0x00007ffff64e428d in boost::_mfi::mf0<void, ARDOUR::Graph>::operator() (
    this=0x7fffc435ed58, p=0x442b6c0)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/bind/mem_fn_template.hpp:49
#16 0x00007ffff64e3988 in boost::_bi::list1<boost::_bi::value<ARDOUR::Graph*> >::operator()<boost::_mfi::mf0<void, ARDOUR::Graph>, boost::_bi::list0> (
    this=0x7fffc435ed68, f=..., a=...)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/bind/bind.hpp:253
#17 0x00007ffff64e2dfb in boost::_bi::bind_t<void, boost::_mfi::mf0<void, ARDOUR::Graph>, boost::_bi::list1<boost::_bi::value<ARDOUR::Graph*> > >::operator() (
    this=0x7fffc435ed58)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/bind/bind_template.hpp:20
#18 0x00007ffff64e267d in boost::detail::function::void_function_obj_invoker0<boost::_bi::bind_t<void, boost::_mfi::mf0<void, ARDOUR::Graph>, boost::_bi::list1<boost::_bi::value<ARDOUR::Graph*> > >, void>::invoke (function_obj_ptr=...)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/function/function_template.hpp:153
#19 0x0000000000733cf2 in boost::function0<void>::operator() (
    this=0x7fffc435ed50)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/function/function_template.hpp:760
---Type <return> to continue, or q <return> to quit---
#20 0x00007fffd5ae8c29 in ARDOUR::JACKAudioBackend::_start_process_thread (
    arg=0x20d71f0) at ../libs/backends/jack/jack_audiobackend.cc:936
#21 0x00007fffef5b06fa in start_thread (arg=0x7fffc435f700)
    at pthread_create.c:333
#22 0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 45 (Thread 0x7fffc43e0700 (LWP 29773)):
#0  0x00007fffef5b8867 in futex_abstimed_wait_cancelable (private=0, 
    abstime=0x0, expected=0, futex_word=0x442b798)
    at ../sysdeps/unix/sysv/linux/futex-internal.h:205
#1  do_futex_wait (sem=sem@entry=0x442b798, abstime=0x0)
    at sem_waitcommon.c:111
#2  0x00007fffef5b8914 in __new_sem_wait_slow (sem=0x442b798, abstime=0x0)
    at sem_waitcommon.c:181
#3  0x00007fffef5b89ba in __new_sem_wait (sem=<optimized out>) at sem_wait.c:29
#4  0x00007ffff64df796 in PBD::Semaphore::wait (this=0x442b798)
    at /home/ardour/linux-x86_64-v5/ardour/libs/pbd/pbd/semutils.h:61
#5  0x00007ffff64dd908 in ARDOUR::Graph::run_one (this=0x442b6c0)
    at ../libs/ardour/graph.cc:387
#6  0x00007ffff64ddcc6 in ARDOUR::Graph::helper_thread (this=0x442b6c0)
    at ../libs/ardour/graph.cc:418
#7  0x00007ffff64e428d in boost::_mfi::mf0<void, ARDOUR::Graph>::operator() (
---Type <return> to continue, or q <return> to quit---
    this=0x7fffc43dfd58, p=0x442b6c0)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/bind/mem_fn_template.hpp:49
#8  0x00007ffff64e3988 in boost::_bi::list1<boost::_bi::value<ARDOUR::Graph*> >::operator()<boost::_mfi::mf0<void, ARDOUR::Graph>, boost::_bi::list0> (
    this=0x7fffc43dfd68, f=..., a=...)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/bind/bind.hpp:253
#9  0x00007ffff64e2dfb in boost::_bi::bind_t<void, boost::_mfi::mf0<void, ARDOUR::Graph>, boost::_bi::list1<boost::_bi::value<ARDOUR::Graph*> > >::operator() (
    this=0x7fffc43dfd58)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/bind/bind_template.hpp:20
#10 0x00007ffff64e267d in boost::detail::function::void_function_obj_invoker0<boost::_bi::bind_t<void, boost::_mfi::mf0<void, ARDOUR::Graph>, boost::_bi::list1<boost::_bi::value<ARDOUR::Graph*> > >, void>::invoke (function_obj_ptr=...)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/function/function_template.hpp:153
#11 0x0000000000733cf2 in boost::function0<void>::operator() (
    this=0x7fffc43dfd50)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/function/function_template.hpp:760
#12 0x00007fffd5ae8c29 in ARDOUR::JACKAudioBackend::_start_process_thread (
    arg=0x20d71f0) at ../libs/backends/jack/jack_audiobackend.cc:936
---Type <return> to continue, or q <return> to quit---
#13 0x00007fffef5b06fa in start_thread (arg=0x7fffc43e0700)
    at pthread_create.c:333
#14 0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 44 (Thread 0x7fffc4461700 (LWP 29772)):
#0  0x00007fffef5b8867 in futex_abstimed_wait_cancelable (private=0, 
    abstime=0x0, expected=0, futex_word=0x442b798)
    at ../sysdeps/unix/sysv/linux/futex-internal.h:205
#1  do_futex_wait (sem=sem@entry=0x442b798, abstime=0x0)
    at sem_waitcommon.c:111
#2  0x00007fffef5b8914 in __new_sem_wait_slow (sem=0x442b798, abstime=0x0)
    at sem_waitcommon.c:181
#3  0x00007fffef5b89ba in __new_sem_wait (sem=<optimized out>) at sem_wait.c:29
#4  0x00007ffff64df796 in PBD::Semaphore::wait (this=0x442b798)
    at /home/ardour/linux-x86_64-v5/ardour/libs/pbd/pbd/semutils.h:61
#5  0x00007ffff64dd908 in ARDOUR::Graph::run_one (this=0x442b6c0)
    at ../libs/ardour/graph.cc:387
#6  0x00007ffff64ddf8b in ARDOUR::Graph::main_thread (this=0x442b6c0)
    at ../libs/ardour/graph.cc:457
#7  0x00007ffff64e428d in boost::_mfi::mf0<void, ARDOUR::Graph>::operator() (
    this=0x7fffc4460d58, p=0x442b6c0)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/bind/mem_fn_template.---Type <return> to continue, or q <return> to quit---
hpp:49
#8  0x00007ffff64e3988 in boost::_bi::list1<boost::_bi::value<ARDOUR::Graph*> >::operator()<boost::_mfi::mf0<void, ARDOUR::Graph>, boost::_bi::list0> (
    this=0x7fffc4460d68, f=..., a=...)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/bind/bind.hpp:253
#9  0x00007ffff64e2dfb in boost::_bi::bind_t<void, boost::_mfi::mf0<void, ARDOUR::Graph>, boost::_bi::list1<boost::_bi::value<ARDOUR::Graph*> > >::operator() (
    this=0x7fffc4460d58)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/bind/bind_template.hpp:20
#10 0x00007ffff64e267d in boost::detail::function::void_function_obj_invoker0<boost::_bi::bind_t<void, boost::_mfi::mf0<void, ARDOUR::Graph>, boost::_bi::list1<boost::_bi::value<ARDOUR::Graph*> > >, void>::invoke (function_obj_ptr=...)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/function/function_template.hpp:153
#11 0x0000000000733cf2 in boost::function0<void>::operator() (
    this=0x7fffc4460d50)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/function/function_template.hpp:760
#12 0x00007fffd5ae8c29 in ARDOUR::JACKAudioBackend::_start_process_thread (
    arg=0x20d71f0) at ../libs/backends/jack/jack_audiobackend.cc:936
#13 0x00007fffef5b06fa in start_thread (arg=0x7fffc4461700)
    at pthread_create.c:333
---Type <return> to continue, or q <return> to quit---
#14 0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 27 (Thread 0x7fffc5ed3700 (LWP 29098)):
#0  0x00007fffef5b8867 in futex_abstimed_wait_cancelable (private=0, 
    abstime=0x0, expected=0, futex_word=0x442b7d8)
    at ../sysdeps/unix/sysv/linux/futex-internal.h:205
#1  do_futex_wait (sem=sem@entry=0x442b7d8, abstime=0x0)
    at sem_waitcommon.c:111
#2  0x00007fffef5b8914 in __new_sem_wait_slow (sem=0x442b7d8, abstime=0x0)
    at sem_waitcommon.c:181
#3  0x00007fffef5b89ba in __new_sem_wait (sem=<optimized out>) at sem_wait.c:29
#4  0x00007ffff64df796 in PBD::Semaphore::wait (this=0x442b7d8)
    at /home/ardour/linux-x86_64-v5/ardour/libs/pbd/pbd/semutils.h:61
#5  0x00007ffff64df286 in ARDOUR::Graph::routes_no_roll (this=0x442b6c0, 
    nframes=256, start_frame=4067584, end_frame=4067840, non_rt_pending=false, 
    declick=0) at ../libs/ardour/graph.cc:567
#6  0x00007ffff68efc58 in ARDOUR::Session::no_roll (this=0x2f92b80, 
    nframes=256) at ../libs/ardour/session_process.cc:147
#7  0x00007ffff68efa0c in ARDOUR::Session::fail_roll (this=0x2f92b80, 
    nframes=256) at ../libs/ardour/session_process.cc:126
#8  0x00007ffff68f32b3 in ARDOUR::Session::process_without_events (
    this=0x2f92b80, nframes=256) at ../libs/ardour/session_process.cc:833
---Type <return> to continue, or q <return> to quit---
#9  0x00007ffff68f0b3a in ARDOUR::Session::process_with_events (
    this=0x2f92b80, nframes=256) at ../libs/ardour/session_process.cc:362
#10 0x00007ffff68ef743 in ARDOUR::Session::process (this=0x2f92b80, 
    nframes=256) at ../libs/ardour/session_process.cc:76
#11 0x00007ffff6383773 in ARDOUR::AudioEngine::process_callback (
    this=0x1bdb2e0, nframes=256) at ../libs/ardour/audioengine.cc:375
#12 0x00007fffd5ae8cf3 in ARDOUR::JACKAudioBackend::process_thread (
    this=0x1da5640) at ../libs/backends/jack/jack_audiobackend.cc:967
#13 0x00007fffd5ae8c78 in ARDOUR::JACKAudioBackend::_process_thread (
    arg=0x1da5640) at ../libs/backends/jack/jack_audiobackend.cc:944
#14 0x00007fffd583363a in ?? () from /usr/lib/x86_64-linux-gnu/libjack.so.0
#15 0x00007fffd5855ad0 in ?? () from /usr/lib/x86_64-linux-gnu/libjack.so.0
#16 0x00007fffef5b06fa in start_thread (arg=0x7fffc5ed3700)
    at pthread_create.c:333
#17 0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 26 (Thread 0x7fffc7d17700 (LWP 29095)):
#0  0x00007fffef5b955d in read () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007fffd58572b5 in ?? () from /usr/lib/x86_64-linux-gnu/libjack.so.0
#2  0x00007fffd585a94b in ?? () from /usr/lib/x86_64-linux-gnu/libjack.so.0
#3  0x00007fffd5855ad0 in ?? () from /usr/lib/x86_64-linux-gnu/libjack.so.0
#4  0x00007fffef5b06fa in start_thread (arg=0x7fffc7d17700)
---Type <return> to continue, or q <return> to quit---
    at pthread_create.c:333
#5  0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 25 (Thread 0x7fffc7d98700 (LWP 29094)):
#0  pthread_cond_wait@@GLIBC_2.3.2 ()
    at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fffd58568fc in ?? () from /usr/lib/x86_64-linux-gnu/libjack.so.0
#2  0x00007fffd5849858 in ?? () from /usr/lib/x86_64-linux-gnu/libjack.so.0
#3  0x00007fffd5855ad0 in ?? () from /usr/lib/x86_64-linux-gnu/libjack.so.0
#4  0x00007fffef5b06fa in start_thread (arg=0x7fffc7d98700)
    at pthread_create.c:333
#5  0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 13 (Thread 0x7fffc6ef9700 (LWP 24403)):
#0  0x00007fffec2a4e8d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007ffff3831674 in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#2  0x00007ffff383177c in g_main_context_iteration ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#3  0x00007ffff38317b9 in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
---Type <return> to continue, or q <return> to quit---
#4  0x00007ffff3861225 in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#5  0x00007fffef5b06fa in start_thread (arg=0x7fffc6ef9700)
    at pthread_create.c:333
#6  0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 7 (Thread 0x7fffd6cf9700 (LWP 24356)):
#0  syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007ffff3882fcc in g_cond_wait ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#2  0x00007ffff6384006 in ARDOUR::AudioEngine::do_devicelist_update (
    this=0x1bdb2e0) at ../libs/ardour/audioengine.cc:560
#3  0x00007ffff638ebf5 in boost::_mfi::mf0<void, ARDOUR::AudioEngine>::operator() (this=0x1a0b490, p=0x1bdb2e0)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/bind/mem_fn_template.hpp:49
#4  0x00007ffff638e69a in boost::_bi::list1<boost::_bi::value<ARDOUR::AudioEngine*> >::operator()<boost::_mfi::mf0<void, ARDOUR::AudioEngine>, boost::_bi::list0> (this=0x1a0b4a0, f=..., a=...)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/bind/bind.hpp:253
#5  0x00007ffff638dcf3 in boost::_bi::bind_t<void, boost::_mfi::mf0<void, ARDOUR::AudioEngine>, boost::_bi::list1<boost::_bi::value<ARDOUR::AudioEngine*> > >::o---Type <return> to continue, or q <return> to quit---
perator() (this=0x1a0b490)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/bind/bind_template.hpp:20
#6  0x00007ffff638d67c in sigc::adaptor_functor<boost::_bi::bind_t<void, boost::_mfi::mf0<void, ARDOUR::AudioEngine>, boost::_bi::list1<boost::_bi::value<ARDOUR::AudioEngine*> > > >::operator() (this=0x1a0b490)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:251
#7  0x00007ffff638c968 in sigc::internal::slot_call0<boost::_bi::bind_t<void, boost::_mfi::mf0<void, ARDOUR::AudioEngine>, boost::_bi::list1<boost::_bi::value<ARDOUR::AudioEngine*> > >, void>::call_it (rep=0x1a0b460)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/functors/slot.h:103
#8  0x00007ffff3dcb23d in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglibmm-2.4.so.1
#9  0x00007ffff3861225 in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#10 0x00007fffef5b06fa in start_thread (arg=0x7fffd6cf9700)
    at pthread_create.c:333
#11 0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 6 (Thread 0x7fffd74fa700 (LWP 24355)):
---Type <return> to continue, or q <return> to quit---
#0  syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007ffff3882fcc in g_cond_wait ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#2  0x00007ffff6383de0 in ARDOUR::AudioEngine::do_reset_backend (
    this=0x1bdb2e0) at ../libs/ardour/audioengine.cc:525
#3  0x00007ffff638ebf5 in boost::_mfi::mf0<void, ARDOUR::AudioEngine>::operator() (this=0x1a0b440, p=0x1bdb2e0)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/bind/mem_fn_template.hpp:49
#4  0x00007ffff638e69a in boost::_bi::list1<boost::_bi::value<ARDOUR::AudioEngine*> >::operator()<boost::_mfi::mf0<void, ARDOUR::AudioEngine>, boost::_bi::list0> (this=0x1a0b450, f=..., a=...)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/bind/bind.hpp:253
#5  0x00007ffff638dcf3 in boost::_bi::bind_t<void, boost::_mfi::mf0<void, ARDOUR::AudioEngine>, boost::_bi::list1<boost::_bi::value<ARDOUR::AudioEngine*> > >::operator() (this=0x1a0b440)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/boost/bind/bind_template.hpp:20
#6  0x00007ffff638d67c in sigc::adaptor_functor<boost::_bi::bind_t<void, boost::_mfi::mf0<void, ARDOUR::AudioEngine>, boost::_bi::list1<boost::_bi::value<ARDOUR::AudioEngine*> > > >::operator() (this=0x1a0b440)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:251
---Type <return> to continue, or q <return> to quit---
#7  0x00007ffff638c968 in sigc::internal::slot_call0<boost::_bi::bind_t<void, boost::_mfi::mf0<void, ARDOUR::AudioEngine>, boost::_bi::list1<boost::_bi::value<ARDOUR::AudioEngine*> > >, void>::call_it (rep=0x1a0b410)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/functors/slot.h:103
#8  0x00007ffff3dcb23d in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglibmm-2.4.so.1
#9  0x00007ffff3861225 in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#10 0x00007fffef5b06fa in start_thread (arg=0x7fffd74fa700)
    at pthread_create.c:333
#11 0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 5 (Thread 0x7fffe5db9700 (LWP 24242)):
#0  syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007ffff3882fcc in g_cond_wait ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#2  0x00007ffff631d466 in ARDOUR::Analyser::work ()
    at ../libs/ardour/analyser.cc:87
#3  0x00007ffff631d252 in analyser_work () at ../libs/ardour/analyser.cc:52
#4  0x0000000000e535fd in sigc::pointer_functor0<void>::operator() (
    this=0x19bd7a8)
---Type <return> to continue, or q <return> to quit---
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/functors/ptr_fun.h:77
#5  0x0000000000e507a0 in sigc::adaptor_functor<sigc::pointer_functor0<void> >::operator() (this=0x19bd7a0)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:251
#6  0x0000000000e4c84b in sigc::internal::slot_call0<sigc::pointer_functor0<void>, void>::call_it (rep=0x19bd770)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/functors/slot.h:103
#7  0x00007ffff3dcb23d in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglibmm-2.4.so.1
#8  0x00007ffff3861225 in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#9  0x00007fffef5b06fa in start_thread (arg=0x7fffe5db9700)
    at pthread_create.c:333
#10 0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 4 (Thread 0x7fffe65ba700 (LWP 24241)):
#0  syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007ffff3882fcc in g_cond_wait ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
---Type <return> to continue, or q <return> to quit---
#2  0x00007ffff697c89e in peak_thread_work ()
    at ../libs/ardour/source_factory.cc:71
#3  0x0000000000e535fd in sigc::pointer_functor0<void>::operator() (
    this=0x1964c28)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/functors/ptr_fun.h:77
#4  0x0000000000e507a0 in sigc::adaptor_functor<sigc::pointer_functor0<void> >::operator() (this=0x1964c20)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:251
#5  0x0000000000e4c84b in sigc::internal::slot_call0<sigc::pointer_functor0<void>, void>::call_it (rep=0x1964bf0)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/functors/slot.h:103
#6  0x00007ffff3dcb23d in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglibmm-2.4.so.1
#7  0x00007ffff3861225 in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#8  0x00007fffef5b06fa in start_thread (arg=0x7fffe65ba700)
    at pthread_create.c:333
#9  0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

---Type <return> to continue, or q <return> to quit---
Thread 3 (Thread 0x7fffe6dbb700 (LWP 24240)):
#0  syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007ffff3882fcc in g_cond_wait ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#2  0x00007ffff697c89e in peak_thread_work ()
    at ../libs/ardour/source_factory.cc:71
#3  0x0000000000e535fd in sigc::pointer_functor0<void>::operator() (
    this=0x19be578)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/functors/ptr_fun.h:77
#4  0x0000000000e507a0 in sigc::adaptor_functor<sigc::pointer_functor0<void> >::operator() (this=0x19be570)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:251
#5  0x0000000000e4c84b in sigc::internal::slot_call0<sigc::pointer_functor0<void>, void>::call_it (rep=0x19be540)
    at /home/ardour/linux-x86_64-v5/gtk/inst/include/sigc++-2.0/sigc++/functors/slot.h:103
#6  0x00007ffff3dcb23d in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglibmm-2.4.so.1
#7  0x00007ffff3861225 in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#8  0x00007fffef5b06fa in start_thread (arg=0x7fffe6dbb700)
---Type <return> to continue, or q <return> to quit---
    at pthread_create.c:333
#9  0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 2 (Thread 0x7fffe75bc700 (LWP 24239)):
#0  0x00007fffef5b9c5d in nanosleep () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007ffff3862a48 in g_usleep ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#2  0x000000000114289d in gui_event_loop (ptr=0x0)
    at ../gtk2_ardour/linux_vst_gui_support.cc:475
#3  0x00007fffef5b06fa in start_thread (arg=0x7fffe75bc700)
    at pthread_create.c:333
#4  0x00007fffec2b0b5d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 1 (Thread 0x7ffff7f9e8c0 (LWP 23735)):
#0  0x00007fffec2a4e8d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007ffff3831674 in ?? ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#2  0x00007ffff38319f2 in g_main_loop_run ()
   from /opt/Ardour-5.4.40-dbg/lib/libglib-2.0.so.0
#3  0x00007ffff2e27597 in gtk_main ()
   from /opt/Ardour-5.4.40-dbg/lib/libgtk-x11-2.0.so.0
---Type <return> to continue, or q <return> to quit---
#4  0x00007ffff75076fa in Gtkmm2ext::UI::run (this=0x1bfb4d0, old_receiver=...)
    at ../libs/gtkmm2ext/gtk_ui.cc:286
#5  0x0000000000bfccd3 in main (argc=1, argv=0x7fffffffdc48)
    at ../gtk2_ardour/main.cc:408
(gdb) 

wishlist:

At the beginning - thanks for this plugin. It will be a great thing.

I use / test it and I have some thoughts.

Triggers
Currently you can only change the "base midi note". I propose to create an array of triggers.

At the moment it looks like this:
nn = data[1];
nn-=baseNote;
trigger_sample(drmr,nn,data);

I propose to replace:
nn = trigger_table[data[1]];
if(nn>0){
nn--;
trigger_sample(drmr,nn,data);
}
/ / Samples in trigger_table numbers are increased by 1

"Sample a zero position" in this case would be unnecessary.
Table trigger_table for a each kit should be remembered (saved to a file).

Graphically this would look like a matrix: rows - midi notes (C2, C#2, D2...) , columns - sample number (or names).

Indicators play sample.
The topic has been exhausted in previous posts, so I will not be repeated.

And a little thing - to reduce the size of the wheel from 50 to 25 (or similar). But this is only my whim. ;)

I'm currently using Hydrogen and Ardour. This plugin is a positive revolution!
Very fan of you. With great interest I will be looking at further development DrMr.

Regards :)
Marcin.

Use digits instead of words to denote sample number

I find it easier to navigate a list of parameters when the use digits instead of words to convey numbers:

"01, 02, 03" is easier for me to read than "one, two, three"

Wouldn't it be a good idea to modify the DrMr Sampler LV2 plugin parameter names in such fashion?

This looks pretty confusing to me, I can't even tell if the samples are listen in order.
selection_192

wishlist: activity LED for each sample

Hi!

I don't know if it makes sense, but I've tried drmr for the first time today. It was connected to an external MIDI keyboard, so I simply tried all the keys to trigger the samples.

If I would want to alter some settings (vol/pan), I would have to guess which key belongs to which sample. If you could provide a way to indicate an active sample, things would be considerably easier.

Maybe add an LED between the two knobs or change the box' background colour upon activity, maybe even some colour gradient depending on the currently played velocity.

Cheers

Make use of Hydrogen mute groups

I often use mute groups in Hydrogen to make closed/open hihat sound like one instrument instead of two.
Looks like DrMr Sampler is ignoring them right now though.

Cannot handle symlinks

If the drumkit folder is a symlink drmr is not able to load it. Fails with:

trying to load: file:///home/falktx/.lv2/sfs.lv2/Audiophob/drumkit.xml
Unable to open file:: No such file or directory
Failed to load kit at: file:///home/falktx/.lv2/sfs.lv2/Audiophob
Passed a path I can't resolve, bailing out

These files definitely exist though:

$ file /home/falktx/.lv2/sfs.lv2/Audiophob
/home/falktx/.lv2/sfs.lv2/Audiophob: symbolic link to `/usr/share/hydrogen/data/drumkits/Audiophob'

and

$ file /home/falktx/.lv2/sfs.lv2/Audiophob/drumkit.xml
/home/falktx/.lv2/sfs.lv2/Audiophob/drumkit.xml: XML document text

Because of this drmr cannot load state in jalv and ardour3.

LV2 interfaces see kit option as an index instead of a name

When you load DrMr as an LV2 plugin within Qtractor, if you edit the plugin using Qtractors' interface, you can only see the drum kit index (integer), and not the drum kit title. This makes it pretty difficult to select which kit you want to use.

I don't know if it's possible to change this from DrMr - it might be a Qtractor problem. If it is, I'll submit a bug there.

drmr_ui.xml missing

joe@Joyce:~/building/drmr$ make
make: *** No rule to make target `drmr_ui.xml', needed by `drmr.lv2'. Stop.

new plugin gui

hi like your plugin it the best alterative to ez drummer or any of the others like it. I think it would be to have a new plugin gui like this
mocup

with a animated drum set
and a mixing board

UI doesn't work well on small screens

On my netbook, if there are any more than two or three rows of drums, then the bottom of the UI gets cut off, so I can't select a different drumkit. This probably wouldn't matter so much if all the kit controls were at the top, as I don't often need to change individual drums much.

It'd be great if the drums would spread out into more than 4 columns when the window was resized too, as this would allow easier access to most drums.

Allow custom MIDI mapping

I wish I could choose what sample listens to what MIDI note. A MIDI-learn style function for this would be great.

  1. Select your first sound.
  2. Press "MIDI learn" button for that sample
  3. Hit a pad or key you want to assign to that sample
  4. Repeat for all the samples you need!

Using hydrogen envelopes

I used Hydrogen envelope to shorten a Hihat, but when I loaded the drumkit in DrMr, it seems to be unaffected by the ADSR settings.

EDIT: I now realised it's a TODO feature, not yet completed.

Sample preview button

Loving the awesome sampler. Just what Linux audio needs right now (or at least, the part that I'm interesting in :D).

It would be really useful to have a sample preview button in the sample pane in the mane window. One reason is that if you're not familiar with the kit, then you really want to be able to check what it sounds like quickly and easily. Another is to check the sample gain and panning.

Just a small button near the sample title would be suitable - or you could even make the sample title a button.

update for gtk3

Hello, Just tried getting this to compile on ubuntu 20.04 . I am a programmer but lacking in Maekfile black magic!

Any possibility this will get updated?
Id love to be able to use hydrogren directly in ardour. Esp if it could fan out to multi tracks hint hint..

Avail for testing etc

No UI in QT5 apps

Hi

This plugin is indispensable. It works in latest Qtractor build with QT4 but chokes on big Hydrogen banks and forgets its bank in between reloads, but othewise everything is OK. Thanks a lot, this is a really cool piece of plugin.

In Qtractor built with QT5, the UI is broken : See http://www.rncbc.org/drupal/comment/6453#comment-6453 and no access to the banks seem possible...

DrMr 16

Hi Nick!

I love DrMr and how easy it is to use within Qtractor (as opposed to Hydrogen...). However, I liked the multi-channel capabilities inside Hydrogen (comes in handy when you want to sidechain or add effects to only the hi-hats or whatever), so I did some ugly modifications and turned DrMr into a 16 channel sampler.

This is my first open source contribution, so I don't know if I'm breaking any rules/etiquette, so I would be glad if you checked DrMr 16 through. Feel free to snap me on the fingers if you notice anything bad (not mainly the code... I know it's an ugly solution), no harm intended!

Warm greetings
Håkan Bernhardsson

Fabla: Drmr replacement

Not to cut your grass Nick, but since Drmr hasn't seen much activity in a while, I thought I'd point out Harry Harren's Fabla: http://openavproductions.com/fabla/

It does basically the same thing as Drmr - very simple drum sampling, with basic controls per drum. It doesn't load hydrogen drumkits, as far as I know, but that may be possible in the future.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.