Noise and sound

Published September 20, 2005
Advertisement
In my various projects thus far, whenever I've implemented sound effects, I've always gone with simply whatever .WAV files I could google and/or generate on my own using my crude haxor foley artist skills and a microphone. Consequently, my sound effects have generally been very asstastic.

Quite awhile ago, I picked up the Game Programming Gems 3 book and in it there was an article, "The Stochastic Synthesis of Complex Sounds" by Phil Burke. It was an awesome read, and it opened my mind to the possibilities of sound synthesis as an answer to my problem of pathetic foley art kung-fu. The source code on the CD for that chapter is a little bit messy (uses a few macros, ugh, and public data members for the generator outputs, bleargh) but it does provide the source to a whole lot of units for filters, noise generators, etc... Which I can hack to my nefarious purposes.

A few months ago, as part of the continuing development on the Accidental Engine, I wrapped up the libnoise library for exposure to Lua. Now, I'm looking at doing the same thing to Burke's unit classes. I like the idea of chaining various units as libnoise does, and since Perlin noise and sound-noise are virtually identical, I assume the approach should work as well for the sound-noise units. It'll take a bit of restructuring, and I haven't yet gone through all the headers to see what I'm up against, but I should be able to set things up so that the sound generation works similarly to libnoise (and possibly merge the two code-bases into one library, since the crossover potential between them is so potentially extensive).

Ideally, I'd like to expose variants of Burke's unit generators to Lua script, to more easily allow experimentation. The book source includes sample generators for all sorts of cool sounds (rocket engines, falling rain, helicopter rotors, etc...) all generated 'on the fly' so to speak, rather than sampled via microphone. Neat as hell, if you ask me. It'd be nice to have a clean interface for creating unit generators and experimenting with chaining them together in an interpreted environment, to avoid the need for recompilation every time I change a filter setting or modify a parameter.

Anyway, that is what is going to occupy my brain for the remainder of this evening, and possibly several evenings to come (depending on how many wrinkles I have to iron out).

Although, I'm not sure if the golem project will utilize noise generated on the fly, or if I will simply load .WAVs of synthesized sounds. It all depends on the kind of performance I can squeeze out of the generation code.
Previous Entry Yar!
Next Entry Sweet.
0 likes 2 comments

Comments

noaktree
Sounds fucking neeto keen dude.
September 20, 2005 10:48 PM
JTippetts
Indeed it is. I've got the basic framework in the works (with the base class interface done), and I'm in the process of implementing the various generator classes as derived modules. Currently, I've got the White noise, Red Noise, Constant Value, Adder (adds two generators, my own addition to implement summing of noise sources and operators), and Slew Rate Limiter modules re-worked and exposed to the lua interface as modules. I've successfully re-created the rocket-engine generator that Burke implements as part of the chapter sample code, as chained-together modules in a style similar to how libnoise works. Nifty keen. [grin]
September 20, 2005 11:31 PM
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Profile
Author
Advertisement
Advertisement