Am Sat, 13 Mar 2010 06:11:26 -0600 (CST) schrieb "Gabriel M. Beddingfield" <gabr...@teuton.org>:
> While I am not lobbying for 2D instruments... it really > wouldn't be any extra overhead to process the notes. > Hydrogen still picks ONE sample to render. The only > difference is that instead of: > > sample_to_use = func(velocity); > > It becomes: > > sample_to_use = func(velocity, param); Well, if it's so... then let's go ahead and make hydrogen full 2D;-) That matches quite well with my recent observation of what my Roland drumbrain actually emits: Every note has two dimensions! I forgot that somehow, because it's really only relevant to the more expensive electronic gear, that usually features drumbrains with rather decent synthesis built-in. For my Roland, each pad has position sensing. Though the generated values don't look very reliable to me (might be improved through sensor tuning), the theory is like that: The drum brain uses two controllers, by default controller 4 for the hihat (expression) pedal and controller 16 for position info. When I hit on a drum, it looks like that (output from aseqdump, clock and "active sensing" messages cut out): 20:0 Control change 9, controller 16, value 0 20:0 Note on 9, note 38, velocity 38 20:0 Note off 9, note 38 20:0 Control change 9, controller 16, value 88 20:0 Note on 9, note 38, velocity 27 20:0 Note off 9, note 38 20:0 Control change 9, controller 16, value 0 20:0 Note on 9, note 38, velocity 32 20:0 Note off 9, note 38 20:0 Control change 9, controller 16, value 72 20:0 Note on 9, note 38, velocity 26 20:0 Note off 9, note 38 20:0 Control change 9, controller 16, value 0 20:0 Note on 9, note 38, velocity 30 20:0 Note off 9, note 38 20:0 Control change 9, controller 16, value 120 20:0 Note on 9, note 38, velocity 14 20:0 Note off 9, note 38 That's the case for about any drum pad, or also the rim of a pad, which is a separate note (but the position info is not really useful for the rim). So, controller 16 is the second dimension for about everything... including the hihat.. Well, the hihat surface (bow)... 20:0 Control change 9, controller 16, value 8 20:0 Note on 9, note 42, velocity 39 20:0 Note off 9, note 42 20:0 Control change 9, controller 16, value 0 20:0 Note on 9, note 42, velocity 29 20:0 Note off 9, note 42 20:0 Control change 9, controller 16, value 24 20:0 Note on 9, note 42, velocity 51 20:0 Note off 9, note 42 The rim of the hihat is a different note, like for other pads, and controller 4 is the important one here (I'd suggest controller 16 being ignored for any rim note). Turns out that the pedal at least is able to produce quite a few more values than the steps I assume the drum brain to use: 20:0 Note on 9, note 26, velocity 127 20:0 Control change 9, controller 4, value 6 20:0 Note off 9, note 26 20:0 Control change 9, controller 4, value 8 20:0 Active Sensing 20:0 Control change 9, controller 4, value 10 20:0 Active Sensing 20:0 Control change 9, controller 4, value 12 20:0 Control change 9, controller 4, value 14 20:0 Note on 9, note 26, velocity 119 20:0 Control change 9, controller 16, value 24 20:0 Note on 9, note 46, velocity 59 20:0 Control change 9, controller 4, value 16 20:0 Note off 9, note 26 20:0 Note off 9, note 46 20:0 Control change 9, controller 4, value 18 20:0 Control change 9, controller 4, value 20 20:0 Control change 9, controller 4, value 22 20:0 Control change 9, controller 4, value 24 20:0 Control change 9, controller 16, value 8 20:0 Note on 9, note 46, velocity 58 20:0 Note off 9, note 46 20:0 Control change 9, controller 16, value 24 20:0 Note on 9, note 46, velocity 87 20:0 Note off 9, note 46 20:0 Control change 9, controller 4, value 26 20:0 Control change 9, controller 4, value 28 20:0 Control change 9, controller 4, value 30 20:0 Control change 9, controller 4, value 32 20:0 Control change 9, controller 4, value 34 20:0 Control change 9, controller 4, value 38 20:0 Control change 9, controller 4, value 45 20:0 Control change 9, controller 4, value 52 20:0 Control change 9, controller 4, value 59 20:0 Control change 9, controller 4, value 66 20:0 Note on 9, note 26, velocity 127 20:0 Control change 9, controller 4, value 69 20:0 Control change 9, controller 4, value 71 20:0 Note off 9, note 26 20:0 Control change 9, controller 4, value 73 20:0 Control change 9, controller 4, value 77 20:0 Control change 9, controller 4, value 82 20:0 Control change 9, controller 4, value 89 20:0 Note on 9, note 44, velocity 11 20:0 Control change 9, controller 4, value 96 20:0 Control change 9, controller 4, value 103 20:0 Note off 9, note 44 20:0 Control change 9, controller 4, value 107 20:0 Control change 9, controller 4, value 111 20:0 Control change 9, controller 4, value 114 20:0 Control change 9, controller 4, value 118 20:0 Control change 9, controller 4, value 124 20:0 Note on 9, note 26, velocity 127 20:0 Control change 9, controller 4, value 125 20:0 Control change 9, controller 4, value 127 20:0 Note off 9, note 26 20:0 Control change 9, controller 4, value 125 20:0 Control change 9, controller 4, value 122 20:0 Control change 9, controller 4, value 118 20:0 Note on 9, note 26, velocity 127 20:0 Control change 9, controller 4, value 115 20:0 Control change 9, controller 4, value 113 20:0 Note off 9, note 26 20:0 Control change 9, controller 4, value 115 20:0 Control change 9, controller 4, value 122 20:0 Control change 9, controller 4, value 127 20:0 Note on 9, note 22, velocity 127 20:0 Note off 9, note 22 20:0 Note on 9, note 22, velocity 127 20:0 Note off 9, note 22 20:0 Note on 9, note 22, velocity 127 20:0 Note off 9, note 22 20:0 Control change 9, controller 4, value 125 20:0 Control change 9, controller 4, value 118 20:0 Control change 9, controller 4, value 111 20:0 Control change 9, controller 4, value 104 20:0 Control change 9, controller 4, value 97 20:0 Control change 9, controller 4, value 90 20:0 Control change 9, controller 4, value 83 20:0 Control change 9, controller 4, value 76 20:0 Control change 9, controller 4, value 68 20:0 Control change 9, controller 4, value 59 20:0 Control change 9, controller 4, value 52 20:0 Note on 9, note 26, velocity 123 20:0 Control change 9, controller 4, value 51 20:0 Control change 9, controller 16, value 24 20:0 Note on 9, note 46, velocity 55 20:0 Control change 9, controller 4, value 52 20:0 Control change 9, controller 4, value 60 When the pedal is totally closed, the note of the hihat changes. I try to summarize: Bow has controller 16 for positional sensing (and the values look quite noisy... not too useful). Open, bow: note 46. Open, edge: note 26. Between open and closed: same as above, just with controller 4 having values > 0. Closed, bow: note 42 Closed, edge: note 22 Pedal closing: controller reaches 127, note 44 is sent. Special effect of drum brain: Hitting and releasing pedal quickly tiggers hihat splash (or however you'd call it). This is not apparent from the MIDI data, it would need heuristic from the drum software to detect the timing. Same goes for the drums where you want to trigger a rim shot, you need to detect simultaneous playing of drumhead and rim. So... I'm not a jazzer, I usually hit the edge of the hihat when varying the pedal. But, for completeness' sake, we got a 3D instrument here: Bow of hihat with velocity + controller 16 + controller 4. Then, there is this goodie: 20:0 Polyphonic aftertouch 9, note 57, value 127 20:0 Polyphonic aftertouch 9, note 52, value 127 That's choking of the pad that sends notes 57 and 52 (surface and rim). Since Hydrogen does muting already, this actually shouldn't be too tricky to add. That is, if you really plan to show Roland that you can make a better use of their electronic kit than the firmware on their multi-thousand-dollar drum brains;-) Though, the single pads are expensive enough, too. I must admit that my primary concern for using hydrogen is use with the simpler hardware from Alesis, because this is about being able to play very small gigs in very small rooms. My Roland eDrum set somewhat approaches the dimensions and weight of a regular set (perhaps needs half the room, not a tenth;-). Of course it would still be interesting to make it produce the sound of my "real" set. As I see it, when we want to go for 2D, we should go for nD. I mean, you could play a drum while changing the tension of the drum head... so the sample selection would not be sample_to_use = func(velocity, param); but sample_to_use = func(dimension_values); with dimension_values being an array, with the first entry being velocity, then any number of controllers that are relevant to this instrument. Oh, and there's the separate issue of choking via polyphonic aftertouch... or whatever effect one wants to cause. Choking/muting is an effect hydrogen already can do, so this might be a simple thing to add... a checkbox named "use aftertouch to mute note" right aside "ignore note off". What I am asking myself now: Is there room for the simple hihat on/off handling my little program provides as external filter to be merged into hydrogen? This is something very basic, easy to setup (just have open and closed hihat as separate instruments) ... not comparable to the sophistication to create 2D or even 3D instruments. It's a little extra function to the generic note mapping that is a outstanding feature request for hydrogen anyway... Alrighty then, Thomas. PS: Blasphemic side remark: I am wary of using hydrogen as live performance drum sampler with the GUI running in X11, because I had lot of trouble with Xorg in the past because of driver bugs causing random freezes after some time of use... especially on the laptop. Because of that I tried to investigate linuxsampler, which presumably supports multiple dimensions per instrument. The main engine runs as daemon in the background, GUIs only being optional means to communicate with it. I rather like that. But: I was unable to create a drumkit with it, partially because it's rather complex... and because basic failure and frustration because the software fails to inform me about it not liking my samples (32bit float format not supported... which is strange when working with JACK). Hydrogen has the "just works" advantage... but I wonder, would it be imaginable to have console-only version running the MIDI sampling engine as alternative to the graphical GUI? But then, there is the question if one shouldn't better invest into making linuxsampler more mature for that purpose... Hydrogen seems to have a lead there, reliably doing what it does. ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ Hydrogen-devel mailing list Hydrogen-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hydrogen-devel