Great breakdown Andy! Thanks for the mini-lecture. Is there a toot on your site that uses these techniques?
~Kyle
On 11/15/06, padawan12 padawan12@obiwannabe.co.uk wrote:
On Wed, 15 Nov 2006 13:00:55 +0100 renaud.herne@belgacom.be wrote:
Martin,
We can imagine applications of multidimensional noise.
Yes, the concept is clear enough, for example static on a black and white television screen is 3D noise (x, y, brightness) and for a colour picture we can add two or three more depending on the encoding.
But you need to be rigorous in defining a few things...
I was thinking about a melodic line piloted by a one dimensional Perlin
noise.
No problem. In d1 you have only a number line on which new values appear with a magnitude given by a probability inherent in the noise spectrum. In this case there is no difference between noise and a walk. If the random signal is bipolar then adding a new value to the previous one (a one dimentional vector with a sign if you like) then the result is not distinguishable from simply using the random signal values. The view of the noise as a spectrum, and the view of the noise as a walk, which on balance will have an average of 0 and always return to the origin, coincide. With an infinite number of vectors you will cross the origin an infinite number of times regardless of your scale.
In d2 we have to look at things in a clearer way. Now it really makes more sense to look at it as a walk on a 2D surface (and it helps to switch between cartesian pairs and polar pairs so that we can control direction and magnitude independently too) Why? Well consider the jumps that would occur if you just used an x and y value as two independent random values. On one step it could occupy an extreme corner, say 255,255 and on the next step it might go to 0,0. For a melodic contour with sensible deviations you need to take the last x,y coords and add a scaled (small) x, y offset to it on each step.
I think this is what you mean by track when you say...
But the second will still able to "track" the first one, to come closer,
to
go away and then back close to the initial pattern.
You can see experimentally and from proofs that it will still return to the origin for any number of iterations. Practically it makes sense to wrap your d2 plane (into a sphere/torus or reflected onto aliases of itself) because real life random numbers you might want to use to perform music and the theoretical ones we are discussing are different worlds. In a gig you probably want the numbers constrained in spacetime in a reasonable way so that the audience don't have to wait millions of years for it to come back to a useful range.
Also because the noise (chaos in fact) generated by libnoise is
deterministic,
one can also experiment with two patterns in advance (or delayed)
respectively
from one to another.
Your chances of perceiving those relationships are small. Even though it's pseudo-noise you would be best to treat it as real noise for all practical purposes. Which leads us to the concept of noise in d3. Given an infinite number of random vectors in d1 and d2 the probability of returning to the origin is 1. In other words the walk occupies a bounded spacetime, even if it is unbounded in either space or time separately. But in d3 the probability of it returning to O is not one, not even with infinite time, it's about 0.3 afair according to Polya. This is profound and has many implications, not least of all for space travel. I haven't really considered what that implies for music, but you still have to coax or coerce your random 3D walks into a space you are happy with, which is non trivial in 3D.
In other words, I would use it as a "control" rather than as a "signal"
Yep, as a control signal rather than an audio/visual signal. Which means choosing a mapping of your parameter space onto the control space, for example in a trumpet melody, d1=pitch, d2=embrochure d3=dynamic, d4=mute
d1 is constrained to a small range but free to move in fairly unconstrained jumps d2 and d3 are codependent, there are values of pairs d2,d3 that don't exist in reality (or for your synthesis model) so they have to be "linked" in a sensible way. d4 is probably a boolean or only occupies a few values, the mute is either on, partially on, or off (disclaimer: I'm not a trumpet player so I'm guessing this).
So as you see, the control space you may have and the parameter space you wish to navigate may not be congruous (I think that's the right word)... they don't fit over each other nicely because some dimentions are stretched. If you can normalise your spaces you can do musically interesting things, like rotating a gesture in the pitch-dynamic plane etc../
Hope this makes some sense, it really is a subject that benefits from pictures and diagrams more than most.
-----Original Message----- From: martin.peach@sympatico.ca [mailto:martin.peach@sympatico.ca] Sent: 14 November 2006 18:17 To: renaud.herne@belgacom.be; czhenry@gmail.com; pd-list@iem.at Subject: Re: RE: [PD] Pure coherent noise (Perlin noise)
You can make coherent noise by adding filtered noise~ objects. See the
attached patch. This is similar to one-dimensional Perln noise. Would two- or three- dimensional noise be useful in pd?
Martin
From: renaud.herne@belgacom.be Date: 2006/11/14 Tue AM 10:11:25 EST To: czhenry@gmail.com, pd-list@iem.at Subject: RE: [PD] Pure coherent noise (Perlin noise)
Thanks for your enthusiasm Chuck
I was thinking about something like this. The tutorial made by johannes m zmölnig (http://iem.at/pd/externals-HOWTO/ ) seems explicit enough But I
wanted to be sure that it does not exist first.
I try to avoid reinventing the wheeel (although mine will be rounder than what already exists ;-)
I am just amazed that there is no (not yet?) such thing as Perlin
noise in PD.
It could be useful to add some correlated variations of user input and
be the source of various effects.
I used to link to libnoise for some DemoGL applications (a framework to develop OpenGL appications in C++ http://www.sd.nl/demogl/) If it
sounds as good as it looks there must be interesting things to do.
I'll let you know
Renaud
-----Original Message----- From: Charles Henry [mailto:czhenry@gmail.com]
Sent: 13 November 2006 18:05 To: renaud.herne@belgacom.be Subject: Re: [PD] Pure coherent noise (Perlin noise)
Hey, Renaud, If you've got libnoise, then you might as well build a pd external,
which is a kind of "wrapper" where you can supply arguments to your functions, and include methods for changing the arguments in real time.
It's not hard, although the first one (external) usually is hard to
understand. See IOHannes' Howto build an external documentation first
off. Then, simply "rip off" pan~ and supply your own code to the perform routine, change the name, include your library headers, change
the makefile to include your library, and you're off and running. To understand more functionality of making a pd external, read through m_pd.h--all of the Pd-specific functions you can use in an external are there for you.
There are also many "tiny" details you will need to learn to get
just what you want. Good luck, and feel free to ask any questions.
There was a previous post regarding Perlin noise, although I don't
think it was resolved. Search the Pd-list archives to find out more.
Chuck
On 11/13/06, renaud.herne@belgacom.be renaud.herne@belgacom.be
wrote:
Hello,
Do someone know if there is a class that generates coherent (Perlin)
noise in Pure Data? OK, I could build it myself by interpolating random numbers or linking
to libnoise but if it already exists... Thank you
Renaud
**** DISCLAIMER **** http://www.belgacom.be/maildisclaimer
PD-list@iem.at mailing list UNSUBSCRIBE and account-management ->
**** DISCLAIMER **** http://www.belgacom.be/maildisclaimer
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
**** DISCLAIMER **** http://www.belgacom.be/maildisclaimer
PD-list@iem.at mailing list UNSUBSCRIBE and account-management ->
http://lists.puredata.info/listinfo/pd-list
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list