Multiple grain generators – is there an advantage?
I’ve been building a granulator of late, it’s nothing revolutionary but has been an interesting journey for me. The core of the oscillator is based on the tried and tested combination of two play~ objects with a Gaussian envelope.
It sounds great, but I’m now wondering how I could develop or expand it. Now, before building this I was using the (fantastic) grainstretch~ external by Timo Rozendal. It has an option of using multiple grains (2,4,8,16). I’m curious to how this works and whether it is worth me trying to implement. I’m presuming this option adds more grain generators mixed together at once? Am I right, is this a commonly used technique. If so, how does one go about windowing more than 2 sources smoothly.
Hope that makes sense! Let me know if not, I’ll try to explain it better.
the only "penalty" I can think of is the obvious one: more voices = more CPU demands. Practically, you would want to assign unique phase-offsets (grain start) to each voice. Artistically, however, I can’t think of many granular playback, or granulation synthesis algorithms that emphasise fewer rather than multiple voices. Whether you’re pursuing rich dispersed grain clouds or smooth freezing and re-pitching, you’re probably going to need multiple voices. Only Jean Francois Charles, Monolake, and Timo Rosendal (I love making dangerous – and plain wrong – generalisations!! Please prove me wrong. Please) seem to have overcome this time-domain stretchy freezy granulation thing recently.
As a wild guess, I would suggest that Timo perhaps has a fixed number of voices, with unneeded voices turned off as required, rather than a truly dynamic voice number. Again, guesswork.
I’d like to see you’re own engine, if you’re happy to reveal.
<code>-- Pasted Max Patch, click to expand. --Copy all of the following text. Then, in Max, select New From Clipboard.----------begin_max5_patcher---------- 810.3ocyX9saZCCEF+5To9NXEoc0XTamDHr61KwtopB4jX.2ErirML5pVe1m +CzAUkRbJDwMXkicr+xu74ywgmu8ln3BwFpJF7cv8fnnmMQhbwrQh1EHJdIY SYMQ4FXLm9aQwiwC11mltQ6h2PI+50nyDbMmrj554GRFo90tXUtfl43aH3qQ 4qVx30TsaMv6h1PzkKX74SkzRsWlI3QCgC.nQ41lT2EX3PH3g8lJwJ8t4JYe IoX+wIID1baai6Gq9oFpeAhYbc7fCZ.O3F6eu8FaqoYPqoUoX4RpcldKtrR4 tFl446tZQIQyDbvRhdgBP0kfETI806olwokhUb8ArocHFm79HF8AHFMNyQ0I dRmjZar+dLFCOEimImW3F3PXmI4w7cFc7B.EnyCiBGKXnGDYN5jldJm2Iohh rlVM0HGyRLkn0RVwJse6Xz+oPTrsqo6LR1mfXeOao340W1rfnn.wrYJyiAfH ofJVolnoUfhm.5ETf4orfJMCArVvJoJ.iCtuQT+zKO79V1j.e2.C+cSxDW5. TVpuw+JJ+J0xpAEfYglqLuCTAuM8Xhy3hGl8wNVbv4JKH741rjypEjOUdxig p6.ngARpIgWTA6sO3DjsYD7TfBELntX.RBzB8OM2aXP5HtIXKp7l3XUF5T4+ BGRWB9n5FeF24caHnmOIct9vYmAFuWkemZPLXTGpQ52HkA2tO5raQbOFW.ah dAS4pgEHix5LixczIK+TLB+YN.6EfTeI7Sak1gLx9CagyF6Jcke9cRJ1btQt W.B80PMQIcmOXX6JseMwGy4EC975c935YSb.BdQpVcMbR9i983lCxKjgZEQc 1JhftSDjk1eaU8qf6iMd6ehgSm1NdC5ThUxxcy6t+CBvdZshpzLt66w2eT4G NpErpJJ+fp3ULEonl5P4GTBu0BKuU5B165B0Fckz+xxxKzoz0jCGTeoKXazU +xKbqrW8trRZirR6cYk0FYM95TV8u2ZTajUVuKqIsMyU2yPrshDooYMUp1Ny dEYpZ+nPZudz.+0Lt+ZeAwXIcMa2sj4CQjlhsZSk1URec6M4irGYvsfle9mS HUDv -----------end_max5_patcher-----------
I’ll try to put something postable together – it’s all tied up with the interface at the moment which is… unusual. Happy to share it though, I built it by looking at the work of others, including your tutorial Brendan (which was helpful, thanks!) so it is probably not that different. I’ve some interesting phase modulation stuff and an unusual control system working though, so that may be of interest.
On the windowing side of things, to expand on my question a bit – if you have more grain generators do you then have more overlap with all of them playing at one time. See the (very crude!) attached picture which may help. Is this useful for smoother sounding granulation?
The best recent advice I’ve got is to either use a global phasor outside the poly~, and use phase offsets as I described above, or to use one-shot ramps with similarly unique phases.
Subjectively at least, more overlaps sounds smoother. But handling those phase positions whilst also juggling numerous dynamic parameters has proved to be something of headache for me, simply because of my very limited experience in ‘classical’ programming and audio DSP.
I’ll try to post some examples soon
I just threw this together in twenty minutes, so it’s not annotated, but it demonstrates overlapping grain windows. Just change the voice# argument to poly~. I haven’t stress tested it yet, but perhaps best to avoid stupid numbers, like 200!
Forums > MaxMSP