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&#174; 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

Reply via email to