Sound Simulation

Try the JavaSound enabled version of this applet. You need a Java2 enabled browser or install the Java2 plug-in.

This applet should work anywhere except on the following platforms: MacG4, Mac OS 8.0, iMac (System 8.1), Mac OS 8.6, Mac OS 9.0.4.

General Description

This demo allows you to design your own object and render the sounds this makes under various interactions like hitting, plucking, and scraping. Eventually an object builder like this will be integrated into a simulation or animation environment, allowing you to assign sonic properties to an object. The sonic attributes will be designed and precomputed (whatever parameters the synthesis engine requires) in an object builder like this and then added to your animation/simulation environment.

All computations are based on physical modeling. Some of this is explained here .

In this demo, you can hit the object, pluck it, and scrape it by clicking on it with the mouse. You can set the basic frequency of the object, the "hardness" which governs the decay rates, the number of grid points, which determines how many different sound patches will be computed for the object, the sample time, which is the length of the sound you get from a mouse click, the scrape time, which is the relative time (compared to the sample duration) the objects is scraped after a mouse click, the pluck time, which is the absolute time to pull the object before release (a.k.a. "plucking"), and the hammer hardness, which determines how hard the hammer is for a hit interaction.

The computation time is proportional to the product of the number of grid-points (a sample is computed for each point), the sample duration, and inversely (or square of inversely) proportional to the base frequency (because more partials are audible for low frequency waves).

After choosing your settings, press the "build" button to create the sounds."Stop" will stop the computation, as might be expected. If nothing seems to happen you may have a slow Java interpreter. Reduce the sample length, choose a high frequency (500Hz, for example), choose the plate, choose a small grid size until you get reasonable performance.


Hit1: A smooth contact force profile.

Hit2: A less smooth contact force profile.

Pluck: Apply a gradually increasing force at some point and release.

Scrape: Apply a stochastic force to a point. You can vary the magnitude of the force by double clicking, triple clicking etc. For example try the string with sample length = 10 seconds, material hardness =400 (so it decays more slowly), and scrape time 0.1 (so that the force lasts 10*0.1 = 1 second). Rapidly clicking on a point will add the contributions from the individual clicks and allow you to have some control over the volume.

String: An ideal string.

Bar1: A rigid bar with clamped boundary conditions on both sides. The spectrum is much thinner than for the string.

Bar2: A rigid bar with clamped boundary conditions on the left, free on the right. At a base frequency of 200 Hz the sounds doesn't seem to change over the bar. This is because the higher harmonics are quite far away for this type of bar.

Circular plate: A circular plate with clamped boundary conditions.

Circular drum: A circular membrane with a very dense spectrum. As a consequence of the dense spectrum, this object takes a while to compute.

Pseudo string: An imaginary object with the same normal mode shapes as a string, but with random frequency spectrum. Will be different every time you build it.

Hardness: The material model for solids like the plate and the bar assumes the decay rate of the various partials can be described by this one parameter. The decay rate of a partial frequency is proportional to the frequency and inversely proportional to the hardness. A hardness of 10 gives a wooden sound, a hardness of 100 sounds more like metal. For the string and the membrane the hardness parameter doesn't have a direct interpretation as a material property.

Base freq.: Parameters like the string tension, the mass density, and the length together determine the frequency of the lowest partial.

Grid size: Determines how many different sounds will be computed on the object.

Duration: For each of the points on the object a sample this long (in seconds) will be precomputed after pressing "build".

Scrape time: When you click on an object, a scrape force will be applied for a duration (scrape time)*(sample duration). This allows you to hear the "ringing" sounds after the scrape. Continuous scraping can be achieved by repeatedly clicking. Note that the scrape time is a relative parameter.

Pluck time: Allows you to set the time (in seconds) during which a force is built up before release.

Hammer hardness: This is the inverse of the total contact time (in second) during a "hit" interaction. A large value like 10000 gives essentially an impulsive force.

hits since 9 April 1997