I reckon the overall volume level should be changed. I know in my car I change the volume about 10dB from stopped to highway speeds (and that's with the windows up). Hmmm, although I guess 12dB is only two bits of accuracy in the sample magnitudes. But it would mean that you're losing this accuracy when you need it most (i.e. the ambient noise is lowest).

I was thinking that any volume changes ought to be visible to the user. If you initially had it at -20dB, your speed controlled compensation is changing it to -15dB, then you really do only have 15dB of room to play with. 0dB is still the normal output from the player with no attenuation. So I reckon that the user should see -15dB in this case, because it's the only thing that makes sense.

On the other hand, if the volume control showed positive dBs then it would make more sense to leave it alone. For instance, if the volume showed 10dB, which meant that the music was ten times more powerful than the ambient noise, then that should be the same no matter what any speed based compensation was doing to the actual gain. (Even if the system was unable to provide that level, because it was already maxed out.)

Also, if you did it this way then all the speed compensation needs to do is have some sort of curve (customisable of course!) relating speed to ambient noise. Plus, you could use the input from the microphone as a factor in calculating ambient noise if you wanted. All of this has the advantage that the compensation doesn't need to store any state in the flash, so it won't get confused when (for instance) you turn the empeg off while travelling at speed, and then turn it on again when you're stopped.

(I realise we could use the existing volume in this way, like Tony was suggesting, but like I said before, to me it doesn't make sense in the real world (what does -20dB mean in that case?).)

My goal would be to have something like this, plus have the ambient noise (calculated or measured, or a combination of both) feed into voladj, so that you didn't get so much compression happening when you were stopped.

Actually, I'm planning to do a bit more work on voladj soon (after a loooong time!), so while I'm at it I might see if I can put in some infrastructure to allow changing the parameters based on some external parameter. Then it will be all ready to be plugged in when someone has the speed data available.

Richard.