Forums > MaxMSP

Listogram? (help with data management)

December 18, 2006 | 11:01 pm

Hello everybody. I am trying to create a live sampling patch for a course I am on which interacts with a hand percussionist, and was hoping for some help.

My current hang up is this:
I am using various objects to gather spectral aspects of the sound- for now I am keeping it relatively simple and using centroid~, segment~, and maybe noisiness~ to give me the spectral average, attack count, and aperiodicity respectively.

I am attempting to gather this coninuous stream of data and pack it into a lists of exactly 128 steps of length, each of which I will scale into a value between 0-8.

The reason I am doing this is to have step sequence patterns which correlate to a sort of histogram of various aspects of performance- time between attacks, volume, etc, which then playback in response to the player.

I am easily able to collate a list of 128 values using zl group, scale them to 0-8 using a list scale object, which feeds a multislider, which feeds a sequencer…

However, what I really need is something that will take a history of data that is an arbitrary length, say a list of 582 values for example- and ‘quantize’ them into a list that is 128 values long and between 0-8 values high that resembles the larger list, albeit more ‘stepped’, and I need to be able to do it with a "bang", when the current playing sequence ends.

Any guidance, magic object suggestions, vague hints, or different approaches would be greatly appreciated.

Cheers, Jeremy


December 19, 2006 | 2:18 pm

> Any guidance, magic object suggestions, vague hints, or different
> approaches would be greatly appreciated.

Hello,

Did you have a look at histo and table objects?
Or, if you have jitter: jit.histogram

Hope this helps,
nesa


December 20, 2006 | 12:56 pm

Thnak you for your reply. Yes, I’ve looked at table- I am pretty much using multi slider in the same way- I’ve looked at histogram, but I can’t see how it might solve my problem, unless I’m missing something.
I need to take running tab of incoming values of an arbitrary length, and squash them down into a list of 128 values at any given moment, when a bang is recieved…That list need to be a quantized representation of the longer list…. I have figured out how to scale the values vertically (using mxj ej.lscale), but I can’t figure out how to do it horizontally- that is the problem….


December 20, 2006 | 7:42 pm

hi Jeremy – here’s how I’d do it:

First step would be storing the arbitrarily long list, then, when a bang is received, use [zl len] to get the length, and then divide that number by the length of the list you want to end up with.

- say you’re list was 356 members long, you would get 356/128 = roughly 2.78. Round that up to nearest int, and split the list into chunks of that size (3), run it through [mean] and pack it back down as a list (uzi?)

What you end up with is a patch that quantizes and averages at the same time, spewing out close-enough looking 128-long lists.

This is of course of the top of my head, so there could be stuff missing, but that’s the way I would go, at least.


December 20, 2006 | 9:26 pm

Excellent! That is the ticket. That is exactly what I want- a quantized semblance of the shape over time.
This solution should work perfectly for what I want it to do. I will experiment with zl length and perhaps slice and see what I come up with..I have a feeling I can pack it all back using zl group….
Thank you very much for the insight!
Cheers, Jeremy


Viewing 5 posts - 1 through 5 (of 5 total)