From Audacity Wiki
Revision as of 18:35, 8 October 2007 by Galeandrews (talk | contribs) (tidy , add TOC)
Jump to: navigation, search
This is a page for technical questions about the algorithms used in Audacity's programming code. An algorithm can be defined as a finite list of instructions for accomplishing a task that, given an initial state, will terminate in a defined end-state.

If you have questions about how Audacity works, please post them here and the developers will answer them!

Eventually we will get a lot more organised and have explanations of the Audacity algorithms in Doxygen  format, where they can be both in the source code for Audacity and on a web page like here.

Related articles:

Not yet answered

Q: How many frequency bands does the noise gate use?


Q: I'd like to know which resampling algorithm does audacity use. I`m studying resampling for my thesis and I`m testing Audacity resampler` influence on perceived audio quality..

A: Audacity uses the resampling algorithm from Julius Orion Smith's Resample project. Audacity also contains code to use libsamplerate, but we can't distribute librample with Audacity because of licensing issues.

For more information on our choice of resampling algorithms:

Noise Removal

Q: How do you actually remove noise? What is the algorithm? What causes the 'tinkling' artefacts, and what steps can and have been taken to remove them?

A: The noise removal algorithm uses Fourier analysis : it finds the spectrum of pure tones that make up the background noise in the quiet sound segment that you selected - that's called the "frequency spectrum" of the sound. That forms a fingerprint of the static background noise in your sound file. When you remove noise from the music as a whole, the algorithm finds the frequency spectrum of each short segment of sound in your music. Any pure tones that aren't enough louder than the fingerprint are greatly reduced in volume. That way, (say) a guitar note or an overtone of the singer's voice are preserved, but hiss, hum, and even crowd noises can be minimized. The tinkly artifacts happen when individual pure tones are near the threshold to be preserved -- they are small pieces of the background soundscape that survived the thresholding, perhaps because the background noise is slightly different from the fingerprint or because the main sound has overtones that are imperceptible but that boost them slightly over the threshold.

That technique is called spectral noise gating  and it is great for reducing the effect of static or hum in a recording.

While the Audacity noise gating algorithm could perhaps be improved, any Fourier-based noise removal algorithm will have some artifacts like the "tinkle-bells". They are a symptom of the problem of discrimination - deciding whether a particular analogue signal is above or below a decision threshold - that is central to the fields of digital data processing and information theory. In general the tinkle-bell artifacts are quieter than the original noise. The real question is whether they are more noticeable than the original noise. (For example, noise-gating the Beatles' Sun King track off the Abbey Road album is a bad idea, because the soft brushed cymbal sounds merge smoothly into the tape hiss on the original master recording, so tinkle bells and a related problem -- fluttering -- are prominent in noise-gated versions of that track.)

You can reduce the effect of tinkle bells by noise gating sounds that are well separated (either in volume or frequency spectrum) from the background noise, or by mixing a small amount of the original noisy track back into the noise gated sound. Then the muted background noise tends to mask the tinkle bells. That technique works well for (e.g.) noisy microcassette recordings, where the noise floor might only be 20 dB below the loudest sounds on the tape. You can get about 10dB of noise reduction that way, without excessive tinkly artifacts.