Psychoacoustic Models in TwoLAME ================================ Introduction ------------ In MPEG audio encoding, a psychoacoustic model (PAM) is used to determine which are the sonically important parts of the waveform that is being encoded. The PAM looks for loud sounds which may mask soft sounds, noise which may affect the level of sounds nearby, sounds which are too soft for us to hear and should be ignored and so on. The information from the PAM is used to determine which parts of the spectrum should get more bits and thus be encoded at greater quality - and which parts are inaudible/unimportant and should thus get fewer bits. In MPEG Audio LayerII encoding, 1152 sound samples are read in - this constitutes a 'frame'. For each frame the PAM outputs just *32* values (The values are the Signal to Masking Ratio [SMR] in that subband). This is important! There are only 32 values to determine how to alloctate bits for 1152 samples - this is a pretty coarse technique. The different PAMs listed below use different techniques to decide on these 32 values. Some models are better than others - meaning that the 32 values chosen are pretty good at spreading the bits where they should go. Even with a really bad PAM (e.g. Model -1) you can still get satisfactory results a lot of the time. All of these models have strengths and weaknesses. The model 'you' end up using will be the one that produces the best sound for your ears, for your audio. Psychoacoustic Model -1 ----------------------- This PAM doesn't actually look at the samples being encoded to decide upon the output values. There is simply a set of 32 default values which are used, regardless of input. *Pros*: Faaaast. Low complexity. Surprisingly good. "Surprising" in that the other PAMs go to the effort of calculating FFTs and subbands and masking, and this one does absolutely *nothing*. Zip. Nada. Diddly Squat. This model might be the best example of why it is hard to make a good model - if having no computations sounds OK, how do you improve on it? *Cons*: Absolutely no attempt to consider any of the masking effects that would help the audio sound better. Psychoacoustic Model 0 ---------------------- This PAM looks at the sizes of the 'scalefactors' for the audio and combines it with the Absolute Threshold of Hearing (ATH) to make the 32 SMR values. *Pros*: Faaast. Low complexity. *Cons*: This model has absolutely no mathematical basis and does not use any perceptual model of hearing. It simply juggles some of the numbers of the input sound to determine the values. Feel free to hack the daylights out of this PAM - add multipliers, constants, log-tables *anything*. Tweak it until you begin to like the sound. Psychoacoustic Model 1 and 2 ---------------------------- These PAMs are from the ISO standard. Just because they are the standard, doesn't mean that they are any good. Look at LAME which basically threw out the MP3 standard psycho models and made their own (GPSYCHO). *Pros*: A reference for future PAMs *Cons*: Terrible ISO code, buggy tables, poor documentation. Psychoacoustic Model 3 ---------------------- A re-implementation of psychoacoustic model 1. ISO11172 was used as the guide for re-writing this PAM from the ground up. *Pros*: No more obscure tables of values from the ISO code. Hopefully a good base to work upon for tweaking PAMs *Cons*: At the moment, doesn't really sound any better than PAM1 Psychoacoustic Model 4 ---------------------- A cleaned up version of PAM2. *Pros*: Faster than PAM2. No more obscure tables of values from the ISO standard. Hopefully a good base to work from for improving the PAMs *Cons*: Still has the same "warbling"/"Davros" problems as PAM2. Future psychoacoustic models ---------------------------- There's a heap that could be done. Unfortunately, I've got a set of tin ears, crappy speakers and a noisy computer room. If you've got the capability to do proper PAM testing then please feel free to do so. Otherwise, I'll just keep plodding along with new ideas as they arise, such as: - Temporal masking (there's no pre-echo or anything in TwoLAME) - Left Right Masking - A PAM that's fully tuneable from the command line? - Graphical output of SMR values etc. Would allow better debugging of PAMs - Re-sampling routines - Low/High pass filtering