I'd like to write a simulation of a Cymatic Tonoscope.
I plan to create a physical model of a circular membrane, sand will be sprinkled on top of it. When a person speaks into a microphone the membrane will vibrate causing the sand to form standing wave patterns.
Obviously this will be done in real time.
Any ideas guys? I really want to write this :)
All the best,
Carl.
Amazing idea for a project Carl.
The way I see it you have two routes.
and measure the amplitude at many points on the surface. The sand falls into minima nodes iirc .
waves of various modes but missing out the "actually building a physical model" part.
The latter is more feasible for a real-time simulation, but possibly more difficult than using the model. You'll need a much better mathematician than me to help you work out the mapping.
In the worst case you could "sample" the data, do a frequency sweep and fit an equation to each standing pattern which is indexed by the frequency input from your voice.
Hope that helps. Imho it's quite a challenging project to pull off, so best of luck.
On Tue, 27 Mar 2007 15:23:34 +0100 "Carl Knott" iamfromspacebaby@gmail.com wrote:
I'd like to write a simulation of a Cymatic Tonoscope.
I plan to create a physical model of a circular membrane, sand will be sprinkled on top of it. When a person speaks into a microphone the membrane will vibrate causing the sand to form standing wave patterns.
Obviously this will be done in real time.
Any ideas guys? I really want to write this :)
All the best,
Carl.
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Hallo, padawan12 hat gesagt: // padawan12 wrote:
Amazing idea for a project Carl.
The way I see it you have two routes.
- Do a full finite element physical model of a circular lamina
and measure the amplitude at many points on the surface. The sand falls into minima nodes iirc .
- Cheat. Create the visuals by mapping the known standing
waves of various modes but missing out the "actually building a physical model" part.
Actually approach 2) might be less cheating than approach 1) because with a finite element simulation, maybe made with msd, your grid topology may introduce unwanted distortions, especially with a circular membrane. Interesting question.
Frank Barknecht _ ______footils.org_ __goto10.org__
On 3/27/07, Frank Barknecht fbar@footils.org wrote:
Hallo, padawan12 hat gesagt: // padawan12 wrote:
Amazing idea for a project Carl.
Yeah. Cool!
The way I see it you have two routes.
- Do a full finite element physical model of a circular lamina
and measure the amplitude at many points on the surface. The sand falls into minima nodes iirc .
This might be overkill. How about finite-difference methods instead? Instead of doing the precise finite element method, use a fixed grid of points (say arranged in a circular pattern), and use an update equation. The visual difference should be negligible, since people would not be able to verify the frequency of the simulation. In either case, the solutions of finite-element or finite-difference methods are given as solutions to a matrix equation, dependent on boundary conditions. Instead of solving matrix equations, you can just use update equations, which will be faster and less precise. It will still represent the standing waves pretty well.
- Cheat. Create the visuals by mapping the known standing
waves of various modes but missing out the "actually building a physical model" part.
Actually approach 2) might be less cheating than approach 1) because with a finite element simulation, maybe made with msd, your grid topology may introduce unwanted distortions, especially with a circular membrane. Interesting question.
Sort of like having a couple of band-pass filters to break up the speech frequencies, and then map them onto the corresponding Chaladni figures super-imposed on each other.
The sand still could be tricky... you would maybe have the individual particles at random locations, initially, and compute a gradient of the vibrations to determine movements. A different visual effect would be to move the sand particles in random directions, by an amount proportional to the amplitude. The sand would still seem to move randomly, just faster over the vibrating surfaces.
Chuck
Martin Peach wrote:
Charles Henry wrote:
The sand still could be tricky... you would maybe have the individual particles at random locations, initially, and compute a gradient of the vibrations to determine movements.
When I saw the sand arranging itself I thought "cellular automaton".
Martin
I thought that the patterns and the various configurations in chladni figures depend on the materials used.
Am I wrong?
c.
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Cesare Marilungo wrote:
Martin Peach wrote:
Charles Henry wrote:
The sand still could be tricky... you would maybe have the individual particles at random locations, initially, and compute a gradient of the vibrations to determine movements.
When I saw the sand arranging itself I thought "cellular automaton".
Martin
I thought that the patterns and the various configurations in chladni figures depend on the materials used.
Am I wrong?
c.
The patterns probably depend on the stiffness of the plate/membrane as well as its shape, and the grain size and density of the sand. By analogy with the Karplus-Strong vibrating string, which is a one-dimensional CA, usually the stiffness of the string is ignored. Also, the grain size would be the same as the pixel size and the density would be ignored. I see it as being like 2D version of the KS waveguide, with the superimposed grains moving in each time step towards the neighbour whose vertical acceleration is the lowest among 8 neighbours. Apart from the difficulty of doing a 2D KS, there is the further complication of an external frequency forcing (maybe introduced at the edges of the plate?).
Martin
The patterns probably depend on the stiffness of the plate/membrane as well as its shape, and the grain size and density of the sand.
It should depend on stiffness, density and shape. The speed of sound in a material is sqrt(stiffness/density). The partial differential equation for waves depends on these two constants, and the amplitude of forcing. The units are a little tricky (and they are different depending on the number of dimensions) I have been engrossed by this idea, since I read it on the list :) I'm sure you'll have a lot to research to make this work, and I really hope you make something cool!
By analogy with the Karplus-Strong vibrating string, which is a one-dimensional CA, usually the stiffness of the string is ignored. Also, the grain size would be the same as the pixel size and the density would be ignored. I see it as being like 2D version of the KS waveguide, with the superimposed grains moving in each time step towards the neighbour whose vertical acceleration is the lowest among 8 neighbours. Apart from the difficulty of doing a 2D KS, there is the further complication of an external frequency forcing (maybe introduced at the edges of the plate?).
Martin
I see the edges as being different kinds of boundary conditions, Dirichlet, Neumann, and Robin. Dirichlet -> amplitude is zero at the boundary (reflected waves are 180 deg out of phase) Neuman -> 1st deriviative is zero at the boundary (reflected waves are in phase with incoming waves) Robin -> 1st order differential equation (specifies a constant phase difference between incoming/reflected waves)
Maybe this helps. ElectricPete offers a shortcut to the first two modes of a rectangular plate in terms of density, elasticity and two material constants.
http://www.eng-tips.com/viewthread.cfm?qid=150916&page=12
On Wed, 28 Mar 2007 10:12:32 -0500 "Charles Henry" czhenry@gmail.com wrote:
Robin -> 1st order differential equation (specifies a constant phase difference between incoming/reflected waves)
for accuracy sake.... the phase difference is dependent on frequency (it works like an impedance)
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Am 28.03.2007 um 16:32 schrieb Martin Peach:
The patterns probably depend on the stiffness of the plate/membrane as well as its shape, and the grain size and density of the sand. By
actually dr. hans jenny used a special pollen (lycopodium spores),
not sand. because sand has a crystalline structure while the pollen
is a perfect sphere. (by the way lycopodium is also a homeopathic
substance associated with the male sexuality, comes up on google...)
check out those vids (round membrane here, nasty sound) :
http://www.harmonyera.com/videos/HJenny01.avi http://www.harmonyera.com/videos/HJenny02.avi http://www.harmonyera.com/videos/HJenny03.avi http://www.harmonyera.com/videos/HJenny04.avi
max
Frank Barknecht wrote:
Hallo, padawan12 hat gesagt: // padawan12 wrote:
Amazing idea for a project Carl.
The way I see it you have two routes.
- Do a full finite element physical model of a circular lamina
and measure the amplitude at many points on the surface. The sand falls into minima nodes iirc .
- Cheat. Create the visuals by mapping the known standing
waves of various modes but missing out the "actually building a physical model" part.
Actually approach 2) might be less cheating than approach 1) because with a finite element simulation, maybe made with msd, your grid topology may introduce unwanted distortions, especially with a circular membrane. Interesting question.
Ciao
To me this whole idea seems rather difficult, if not impossible, to implement. We are talking about interactions happening at the atomic level of matter here.
And it would be far more interesting to sample real cymatic figures in the physical world and reuse them for synthesis or whatever.
Just my two cents.
Ciao,
c.
To me this whole idea seems rather difficult, if not impossible, to implement. We are talking about interactions happening at the atomic level of matter here.
It's not really the atomic level that we have to implement. You can actually treat the material as continuous, and sampled at discrete points so that the wavelengths are much, much larger than the distance between points, and the steps in time are small compared to the size of the wavelength/(wave speed). In the limit as the difference between spatial samples and temporal samples goes to 0, you get something that represents the real physics of the problem. The real question is just what's good enough?
And it would be far more interesting to sample real cymatic figures in the physical world and reuse them for synthesis or whatever.
I really liked the video link you posted for the figures. The rectangular plate has some cool symmetries, that would be better than a circular membrane. Plus, it's easier to do simulations of partial differential equations in rectangular coords rather than polar coords.
Cesare Marilungo wrote:
Frank Barknecht wrote:
Hallo, padawan12 hat gesagt: // padawan12 wrote:
Amazing idea for a project Carl.
The way I see it you have two routes.
- Do a full finite element physical model of a circular lamina
and measure the amplitude at many points on the surface. The sand falls into minima nodes iirc .
- Cheat. Create the visuals by mapping the known standing
waves of various modes but missing out the "actually building a physical model" part.
Actually approach 2) might be less cheating than approach 1) because with a finite element simulation, maybe made with msd, your grid topology may introduce unwanted distortions, especially with a circular membrane. Interesting question.
Ciao
To me this whole idea seems rather difficult, if not impossible, to implement. We are talking about interactions happening at the atomic level of matter here.
And it would be far more interesting to sample real cymatic figures in the physical world and reuse them for synthesis or whatever.
Just my two cents.
Ciao,
c.
Interesting project.
Here is a Gem version of the basics.
Also I'm trying to make one with [pix_sig2pix~]
mhv/ Steffen Leve Poulsen
Carl Knott skrev:
I'd like to write a simulation of a Cymatic Tonoscope.
I plan to create a physical model of a circular membrane, sand will be sprinkled on top of it. When a person speaks into a microphone the membrane will vibrate causing the sand to form standing wave patterns.
Obviously this will be done in real time.
Any ideas guys? I really want to write this :)
All the best,
Carl.
ooooooopppppppps
attached Chladni.pd
Carl Knott skrev:
I'd like to write a simulation of a Cymatic Tonoscope.
I plan to create a physical model of a circular membrane, sand will be sprinkled on top of it. When a person speaks into a microphone the membrane will vibrate causing the sand to form standing wave patterns.
Obviously this will be done in real time.
Any ideas guys? I really want to write this :)
All the best,
Carl.
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
#N canvas 518 5 629 456 10; #X obj 376 149 v m; #X obj 424 151 v n; #X text 24 16 http://local.wasp.uwa.edu.au/~pbourke/surfaces_curves/chladni/index.html ; #N canvas 506 26 778 737 calc 0; #X obj 98 111 v L; #X obj 43 160 v pi; #X obj 98 41 loadbang; #X obj 304 362 expr cos(n*pi*x/L)*cos(m*pi*y/L)-cos(m*pi*x/L)*cos(n*pi*y/L) ; #X obj 43 78 1; #X obj 304 171 until; #X obj 425 255 + 1; #X obj 339 232 v x; #X obj 425 325 + 1; #X obj 339 326 v y; #X obj 419 149 v x; #X obj 304 143 4096; #X obj 279 40 inlet; #X obj 279 100 t b b b; #X obj 349 530 t l; #X obj 240 519 list; #X obj 304 502 list; #X obj 240 599 outlet; #X obj 240 566 list trim; #X obj 215 362 t b b; #X obj 449 149 v y; #X obj 304 201 t b b; #X obj 279 67 del 100; #X obj 253 65 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #N canvas 0 0 454 304 pi 0; #X obj 76 79 inlet; #X obj 76 153 outlet; #X obj 76 102 atan; #X obj 76 127 * 4; #X connect 0 0 2 0; #X connect 2 0 3 0; #X connect 3 0 1 0; #X restore 43 99 pd pi; #X obj 339 277 t f f; #X obj 98 80 64; #X obj 339 255 mod 64; #X obj 339 303 select 0; #X obj 419 117 0; #X connect 2 0 4 0; #X connect 2 0 26 0; #X connect 3 0 16 0; #X connect 4 0 24 0; #X connect 5 0 21 0; #X connect 6 0 7 0; #X connect 7 0 27 0; #X connect 8 0 9 0; #X connect 9 0 8 0; #X connect 11 0 5 0; #X connect 12 0 22 0; #X connect 13 0 19 0; #X connect 13 1 11 0; #X connect 13 2 29 0; #X connect 14 0 16 1; #X connect 15 0 18 0; #X connect 16 0 14 0; #X connect 16 0 15 1; #X connect 18 0 17 0; #X connect 19 0 16 1; #X connect 19 1 15 0; #X connect 21 0 3 0; #X connect 21 1 7 0; #X connect 22 0 13 0; #X connect 23 0 13 0; #X connect 24 0 1 0; #X connect 25 0 28 0; #X connect 25 1 6 0; #X connect 26 0 0 0; #X connect 27 0 25 0; #X connect 28 0 9 0; #X connect 29 0 20 0; #X connect 29 0 10 0; #X restore 352 220 pd calc; #X floatatom 376 127 5 0 0 0 - - -; #X floatatom 424 128 5 0 0 0 - - -; #X obj 279 220 gemhead; #X obj 196 223 loadbang; #X msg 196 246 grey; #X obj 279 263 pix_set 64 64; #X obj 279 297 pix_texture; #X obj 30 128 gemwin; #X obj 352 199 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 279 319 square; #X msg 42 101 0 , destroy; #X msg 30 72 create , 1; #X obj 376 91 unpack; #X msg 376 56 5 2; #X msg 406 56 3 2; #X msg 437 55 4 3; #X text 104 72 <- 1; #X text 312 56 2 ->; #X msg 463 55 5 1; #X msg 196 272 repeat 0; #X msg 491 54 13 11; #N canvas 0 0 454 304 (subpatch) 0; #X text 167 33 Chladni implementation; #X text 170 59 by Steffen Leve Poulen 2007; #X restore 32 163 pd; #X connect 3 0 9 1; #X connect 4 0 0 0; #X connect 4 0 12 0; #X connect 5 0 1 0; #X connect 6 0 9 0; #X connect 7 0 8 0; #X connect 8 0 9 0; #X connect 8 0 23 0; #X connect 9 0 10 0; #X connect 10 0 13 0; #X connect 12 0 3 0; #X connect 14 0 11 0; #X connect 15 0 11 0; #X connect 16 0 4 0; #X connect 16 1 5 0; #X connect 17 0 16 0; #X connect 18 0 16 0; #X connect 19 0 16 0; #X connect 22 0 16 0; #X connect 23 0 10 0; #X connect 24 0 16 0;