3 ms·
Compressing white noise and other "hissing" kinds of sounds is not something MP3 is good at. Compression perhaps can be split into frequency vectors and noise v
by tabtab 6y ago
Compressing white noise and other "hissing" kinds of sounds is not something MP3 is good at. Compression perhaps can be split into frequency vectors and noise vectors. Frequency vectors would be plotted lines of specific frequencies and intensity.
White noise could be represented by a grid with frequency. Or perhaps use vectors with less frequency precision. That way the same mechanism can be used for both types, but with frequency re-scaled for noise to reduce data size. A given noise vector would represent an approximate frequency range rather than a specific frequency.
A frequency vector would probably need about a quarter note step in precision for a typical compression level (but adjustable). If it allows interpolation between vector nodes[1], then it can handle frequency tremolo fairly well. A vector node can have flags saying whether to interpolate frequency and/or volume, or just do a direct step jump, which ever best fits the original. (Noise vectors can also have interpolation flags.)
The noise vectors may only need a half-octave or octave range of precision. I'm guestimating only 4 to 6 bits are needed for the default precision, whereas the frequency vectors need around 11 bits.
As far as how to process the sound to produce such vectors, the encoder would have to "look" at the time/frequency plot, and divide artifacts (areas) into frequency "lines" and noise lines. I'm not an expert on such algorithms, but it probably can be refined from experimentation. Maybe make a rough guess start, and use a genetic algorithm to breed a vector set that best recreates the original, given a data size constraint.
If there's a lot of sound going on in one spot, then precision can perhaps be reduced for that spot. Human ears can't typically isolate details when the rock band is going all out, for example. Maybe give more precision to the loudest vectors, but slack on the lessor ones to save space.
[1] I'm thinking of segmented lines. Each segment node would contain a frequency value, volume value, frequency interpolation flag, and a volume interpolation flag. The range and meaning of each value would depend on the type (voice vs. noise) and precision specified for that line. "Voice" vector may be a better term than "frequency" vector.