On Mon, Feb 04, 2002 at 07:24:47 -0000, Paul Kellett wrote: > > input = (float)read_from_soundcard() / 32767.0f; > > input = run_plugin(input); > > ... > > write_to_soundcard((short)(input * 32767.0f)); > > > ... but please make that 32768.0f ! > > I forget the reasons, but there was a long argument about it either > on music-dsp or vst-plugins. It's a very small difference, but an > important one if for example you are performing noise shaping on a > float signal just before it is converted to 16 bits, or if you just > want an accurate "over" meter.
You're probably right, but I chose 32767.0f for the same reasons: 2's comp 16 bit integers go from 32767 to -32768, so if you scale by 32767 then subtract half a bit dither you should be inside the short range, at 0dBFS but not clipping. No-one should use a c cast in order to produce integer output either, it will cause crossover distortion. You should be using a rounding conversion. The code was just to make it obvious what was happening, rather than real source. - Steve
