This is some fun I'm having at generating sound with perl. ------ When it comes down to it, digital sound can be represented as a series of floating numbers from -1 to 1. These correspond to the physical position of your speaker. Quite literally, -1 is when your speaker is pulled in on itself, 1 is when it is pushed out as far as it will go, and 0 is when it is in the middle. Each of these numbers is called a "sample". Since it is represented as a digital floating point it has a fixed number of bits. Old nintendos were 8-bit, for example. I typically work with 32-bit. The speed that you send these samples to a speaker is the "sample rate". For example, a CD uses 44,100 samples per second. So what we have to do is simple! Just generate these numbers and shove them out to the speaker at the correct speed. I'm using Audio::PortAudio which makes this easy, as far as the speed goes. If I send it numbers too fast then it will block me from sending more until it is ready. If I send them too slow, however, I just get nasty noise from my speakers :) So now we need to figure out what samples to send. The basic concept is that of "unit generators", which are pretty much the foundation for how digital sound was originally created, and how it is often still created. The idea is to make a function, so that each time you call the function you get the next sample. But to make them more interesting, you "instantiate" each generator by calling a function, which returns the generator. This initial call can have all sorts of parameters and such. ...