On Thu, 29 Apr 2010, Roman Haefeli wrote:
Reduced bit depth (which is what I think 'bit-crushing' means) can be achieved by dividing the signal by x, pass it through something like [int~], multiply it by x again. An [int~] can be implemented by using [wrap~] and [-~], which are both vanilla.
It is also worth considering adding a DC offset. Your [wrap~] solution implements a floor-function, that is, rounding downwards. You can make it round to closest, by adding x/2 before rounding downwards.
[expr int($v1)] is rounding zerowards (thus output zero corresponds to a twice bigger input range as any other input). Thus it will behave in a weird unequal way.
When the volume gets low, the _effective_ bits-per-sample gets very low, because the relative precision of integers is proportional to amplitude (which is not the case with floats). Therefore, even with 16-bit audio, if your amplitude is 0.0001 times the max, it will feel as if it were 3-bit audio. In such circumstances, the differences between the possible roundings will become quite audible.
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard, Montréal, Québec. téléphone: +1.514.383.3801