suppose your RNG generates between 1 and 1000 you can feed that number to a function that reformats the distribution.e.g. float x = random(1,1000);float y = 1 + 100*exp(x/500); // 101 .. 739float z = exp(10/x); // 22000 .. 1to get another distribution. float x = random(1,1000);float y = x + (x/2?10*sin(x):1000/x; // usefulness of this one has to be investigated get the idea?
I'm not sure what you intend the bandpass filter to do, but the rest of what you're describing is achievable by applying a transform to the uniform random number in your input domain to convert it into your output domain. Conceptually, if you were to plot the input and output values of that transform then the slope of the plot at a given output value would give you the probability density at that output value - if you see what I mean?