Group Humanizer
Two or more tracks can be "group humanized" so that their ...
- Type
- MIDI Effect
- Author
- humanize
- Version
- 1.7
- License
- AttributionNonCommercialNoDerivatives
- Live version
- 11
- Max version
- 8.3
- Downloads
- 41,433
- Updated
- 2022-08-11
Description
Two or more tracks can be "group humanized" so that their timing resembles musicians playing in the same room together. For example, a bass and a drum sequence will adapt to each others delays in a "humanized" way.
m4l patches by James Holden
This suite of max for live plugins implements the method of group humanizing MIDI described in the article by Holger Hennig, "Synchronization in human musical rhythms and mutually interacting complex systems" in the journal PNAS (2014). Free article download:
www.nld.ds.mpg.de/~holgerh/download.html
Suite content
1) "group humanizer SETTINGS.amxd"
2) "group humanizer PLAYER.amxd"
3) "group humanizer PLAYER + velocity humanisation.amxd"
4) "group humanizer HUMAN INPUT.amxd"
4) "group humanizer HUMAN INPUT audio version.amxd" (*requires you to install the 'bonk~' external yourself)
*** To "group humanize" two or more tracks, only the SETTINGS and PLAYER plugins are needed. The HUMAN INPUT plugin is a very early beta version provided as-is, although it has shown very promising results so far. ***
The version of the PLAYER plugin with velocity humanisation is based on a later paper by Hennig et al looking at loudness fluctuations in Jeff Pocaro's drum part for 'I Keep Forgettin':
https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0127902
See documentation "group humanizer documentation.txt" for further details.
Updated to 1.7 11/08/2022 - I think the communication issue is fixed now: the settings plugin value entry boxes now have the right text colour and the settings plugin now regularly talks to the other ones to make sure they're all enumerated. Wait a second or two after reordering / adding channels and it'll catch up.
Updated to 1.6 04/05/2022 - a live update had broken the settings transfer between devices, this is fixed now. thanks to everyone who provided feedback!
Updated to 1.5 08/06/2020 - removed and replaced outdated and exclusionary nomenclature for the individual plugins. The terms used previously didn't even adequately describe the role of the devices, and yet I used them without a second thought.
Also added the velocity humanisation version of the PLAYER plugin.
Updated to 1.4 05/10/2019 - fixed to work with Live 10 / Max 8 - although it seems to work now I'm a bit confused why it went wrong (!) so if you uncover issues with this please do let me know (via twitter is best)
Updated to 1.3 22/01/2015 - bugfixes, audio version of human input plugin now included (requires bonk~ external be properly installed).
Updated to 1.2 16/12/2014 - fix for the bug reported in comments below, ui improvements (more help, now supports 10 slaves, better graphing), swing now taken into account by human input module. console window output now tidier. MEAN FOLLOWER plugin included to use on a click track when using HUMAN INPUT plugin. demo project included.
Updated to 1.1 10/11/2014 - many bugfixes.
Comments (49)
QUESTION: Is the "group humanizer HUMAN INPUT AUDIO VERSION" supposed to be put on the channel with the incoming audio from the human player? Might seem like a stupid question, but when I put it on the drummer's channel, no audio goes through the device i.e. the channel becomes muted by the device.
Or maybe the "group humanizer HUMAN INPUT AUDIO VERSION" is only supposed to be put on one of two channels with the drummer input - muting the channel while the other drummer channel plays the input, thereby acting as simply a "master clock" for the "band" and not compensating the incoming audio.
Is that correct?
it seems the communication between devices is broken in live 10.
if I open for editing the 'MASTER' device and play/stop a couple of times the communication seems to work again?
if anyone manages to work out what's going wrong please get in touch (@mrjamesholden on twitter is the best way)
PEACE TO ALL
JH
Thanks @jamesholden. I'm so happy this device exists and works so well.
When I add PLAYERs, they appear in the SETTINGS (I've put each effect on a separate MIDI channel as instructed), but changing the timing parameters in the settings view results in no visual or auditory changes even with extreme values.
Interestingly, I just noticed that if I save the project and re-load, the saved parameters take effect. Changing those parameters has no effect until I save and reload again,
I had to go back to the oppressive version. I hope I won't have too many flashback of a time when my serf ancestors had to live in abject misery and to give away their crops to feed christian theocratic monarchs.
Is there a way to download an older version?
Anyway, thanks so much for making this available! I ran across the Hennig stuff too and was all set to create a thing for Logic. But now that I've switched back to Live, (cuz, YaY, finally take recording and comping in Live 11)... Surprise! Someone already did the work! Thank you!
P.S.
Noticed there's an s instead of a z in the second "humaniser" device name: "group humanizer PLAYER + velocity humaniser"
https://quod.lib.umich.edu/cgi/p/pod/dod-idx/towards-a-model-for-the-humanisation-of-pitch-drift.pdf?c=icmc;idno=bbp2372.2011.112;format=pdf
Have you thought about adding pitch drift humanization? Because that would be amazing if we could get it all in the same plugin. And maybe even humanization arbitrary CC's. That would be amazing to have all that rolled into a single plugin.
I'll try v1.5 now. I can't believe I missed the release.
"Repeated notes with no space between note-off and next note-on may also cause problems - the PLAYER plugins may delay the note-off more than the next note-on, causing the previous note's off to end the current note prematurely.
The solution to this is to make sure there is a gap of at least 2x the timing error standard deviation setting between the end of a note an the start of the next one in the input MIDI. This only applies when the same note is repeated - different notes can overlap without issue."
i'm interested in how wind/vocal/string players naturally adapt their pitch towards making simple ratios with other player's pitches, i think this relates to that somehow.
(thinking aloud, i think a humaniser-like feedback/correction algorithm, when applied to pitch, would generate both the kind of statistical results in that paper and the natural stretching of the tuning system towards simple ratios. implementing it is beyond me though, sadly)
you might find 'hermode tuning' (i think some softsynths/samplers support it - kontakt maybe does?) interesting in terms of a more human style of pitching.
- what platform?
- does the demo song work? do you see/hear different behaviour for the different settings clips in the first channel?
- does the settings plugin show one graph column + one settings row per player plugin that you have loaded?
- if you delete the settings plugin and then hit undo, does that fix it?
I add the Settings to a midi track as per the directions and a player to each of the instrument tracks. However, no rows appear for any of the instruments in the Settings device. I have adjusted all the envelopes without seeing any effects in the Settings devices.
Deleting the settings and undoing does not fix the issue.
My assumption based on this is that the Settings and Player devices are not communicating and that it is not just a display issue.
When I load
It works perfectly!
But somehow it seems to be responsible for crashing live 11.2 on Mac Catalina 10.15.7 constantly..
Willing to pay for this as it is sooo good and I tried a lot before.
this is the thread that crashes all the time:
Thread 8 Crashed:: AudioCalc
0 libsystem_c.dylib 0x00007fff69b6cfca __chk_fail_overflow.cold.1 + 16
1 libsystem_c.dylib 0x00007fff69b6a214 __chk_fail_overflow + 9
2 libsystem_c.dylib 0x00007fff69b6a5ff __strcat_chk + 121
3 com.cycling.MaxPlugLib 0x00000001a8f7a75e aeval + 1294
4 com.cycling.MaxPlugLib 0x00000001a8f7a1fe atombuf_eval + 142
5 com.cycling74.message 0x00000001b0daca17 jmessage_atombuf_eval + 567
6 com.cycling74.message 0x00000001b0daa68f jmessage_int + 175
7 com.cycling.MaxPlugLib 0x00000001a8fae858 outlet_int + 1560
8 com.cycling74.zl 0x00000001b0ceba90 zl_genout + 128
9 com.cycling74.zl 0x00000001b0cec0be zl_dosect + 574
10 com.cycling74.zl 0x00000001b0ce9acf zl_int + 63
11 com.cycling.MaxPlugLib 0x00000001a8faeb88 outlet_int + 2376
12 com.cycling.MaxPlugLib 0x00000001a8fadf30 outlet_bang + 1856
13 com.cycling74.metro 0x00000001b0edead7 metro_tick + 135
14 com.cycling.MaxPlugLib 0x00000001a8ffc123 time_tick + 51
15 com.cycling.MaxPlugLib 0x00000001a8fe775a scheduler_run_flags + 506
16 com.cycling74.MaxAudioAPIImpl 0x00000001a9ea4d18 plugrunner_servicescheduler + 456
17 com.cycling74.MaxAudioAPIImpl 0x00000001a9e98518 plugrunner_process + 200
18 com.cycling74.patcher 0x00000001aa631d67 Wires::Process(plug_DeviceRef*, int, int const*, int const*, float const* const*, float* const*, __t_epii_REChunk*, __t_epii_REChunk*, __t_epii_MEChunk*, __t_epii_MEChunk**, __t_epii_REChunk**) + 887
19 com.ableton.live 0x000000010a310606 0x108081000 + 36238854
20 com.ableton.live 0x000000010a30fa3f 0x108081000 + 36235839
21 com.ableton.live 0x000000010919879f 0x108081000 + 17921951
22 com.ableton.live 0x00000001091b857d 0x108081000 + 18052477
23 com.ableton.live 0x000000010919c28a 0x108081000 + 17937034
24 com.ableton.live 0x000000010919c5ce 0x108081000 + 17937870
25 com.ableton.live 0x0000000108bc5e0e 0x108081000 + 11816462
26 com.ableton.live 0x0000000108bc60ce 0x108081000 + 11817166
27 libsystem_pthread.dylib 0x00007fff69ca2109 _pthread_start + 148
28 libsystem_pthread.dylib 0x00007fff69c9db8b thread_start + 15
Otherwise it works fine and there are no crashes using GH 1.7.
i would much rather just have this for individual tracks.
I'm not getting this with any other type of track in the same set, including leads. It's probably about the rhythmical relationship between the troubled players. One way to alleviate this is to make the a percussion player listen more strictly, but so far it haven't sound really good until I move the percussion to the drums track. I'll have to experiment more.