For various projects of mine I need to be able to synthesize sound, so I
decided to take a quick dabble in the realm of Digital Signal Processing. I
mean, how hard could it be, right?
After some fooling around with the Sampled Audio Subsystem of the Java Virtual
Machine I was able to hear sinusoidal waveforms of various frequencies from my
speakers, and I was starting to think that I am probably almost done, until I
tried to play square waveforms. That's when I realized that I had barely
scratched the surface. The square waveforms sounded pretty awful at any
frequency, and especially at high octaves they sounded like random notes.
Triangular waveforms, sawtooth waveforms, really anything except sinusoidal
waveforms all suffered from the same problem.
A bit of googling around soon revealed the name of the source of my
troubles: aliasing.
|
A naïvely sampled square wave,
exhibiting a bad case of aliasing. Note how some of the peaks and valleys consist of 3 samples, while some consist of only 2 samples. |