Keenan Crane
Synthesizing the Sounds of Splashing
September 2007

Here's a little experiment I tried one weekend after reading "Synthesizing Sounds from Physically Based Motion." Very roughly, the idea in that paper (which focuses on solid objects) is that sound can be generated for physically-based animation by computing the pressure distribution over a surface mesh and propagating this signal to a receiver. My thought then, of course, was, "why not try applying the same method to surface meshes generated with liquid simulation?"

A couple of practical considerations need to be taken into account, though. First, the pressure signal needs to be filtered with a low-pass and DC filter to remove high frequencies and a constant DC component. In the original paper, the signal is filtered on a per-triangle basis -- this formulation is problematic for fluid meshes since their topology is constantly changing (hence there isn't any obvious correspondence between triangles in consecutive time steps). Since fluid animation is often simulated at a much lower (temporal) frequency than solid animation, filtering out high frequencies isn't really an issue. To deal with the DC filter, I simply played a few tricks with the formulation by making some additional assumptions (e.g., placing the receiver at infinity, ignoring self-occlusion) which allowed me to perform the filter on a single signal integrated over the entire surface. (A better solution in the future might be to simply track particles at the surface in order to sample the pressure distribution.)

The other practical issue is that (as mentioned above) fluid animation is often simulated at relatively low frequencies (e.g., 24 Hz), whereas high-quality audio is sampled at around 22KHz or higher. Although it is possible to upsample audio to a target frequency, the result sounds dull since medium and high frequencies are effectively been filtered out. Since I was mostly interested in simply seeing whether the general approach would work, I went the brute-force route and computed the signal at 500 Hz and then 4 KHz. The results can be found below.

For comparison, here's a real recording of a rock being thrown into a tank of water.

In addition to the lower sampling rate, there are a few notable differences between the recording and the synthesized audio. First (of course) the synthesized audio lacks an initial "sploosh" since the tank in the simulation is initially empty. Also, the sound of small drops of water hitting the surface is notably absent. My suspicion is that these sounds are absent because the simulation does not take into account small bubbles forming near the surface. Small bubbles contribute significantly to the overall sound of, e.g., crashing waves. Overall I doubt this approach is quite right for synthesizing sound for fluid animation, but it seems like synthesizing this kind of audio isn't totally out of the question...

The liquid simulation was computed using Bart Adams et al's terrific solver and the video was rendered in modo. Armadillo courtesy of the Stanford 3D Scanning Repository.