 # Convert midi value to db

Maybe this is not the correct forum but I try anyway…

I’m desperately searching for the mathematical formula for converting the linear 14 bit fader value sent by Cubase in Mackie Control emulation to the corresponding logarithmic db value shown in Cubase.

14bit max value is 16383 (assuming unsigned integer values), so
`db(x) = 10*log(x/16383)`
where
`db(16383) = 0`
and
`db(0) = -infinity`
of course any generic calculator will tell you that `db(0) ` is not defined, so for conversion I’d either catch this with an if/else clause or clamp x to 1-16383:
`db(x) = 10*log(max(1, x)/16383)`

EDIT:
Fixed formula from Bel to dB, my bad. Also:
db(1) = -42,143934312552058279471034783116
would be the lowest you can go with the “max” adjusted formula

Thanks…but that formula doesn’t work. I know it is a standard formula for calculating db, but it will not even come close to giving the same results as in Cubase I am afraid.

The min value I can see in Cubase is -111.1db and max value is +6db. Also, for some reason Cubase never goes above 15281 when the fader is at max.

so…
db(0) = -infinity
db(1) = -111.1 (…or actually: db(39)=-111.1, it’s the lowest value I’ve managed to get before Cubase shows -infinity)
db(12864) = 0
db(15281) = +6

Well, looks like the 14 bit value is not linear. If it were then you’d expect `10*log(12864/15281)` to be -6db, which it isn’t.
In that case you can only guess. I know it’s pain staking but what I would do if I were really desperate is to just create a midi part with multiple values and then note the db values Cubase spits out. You can then use these value pairs and try to fit a curve against it using least mean squares, something like `10*log(a*x + b) +c`.

If you try like this?

db(x) = 10*log(x/12864)

That makes the 0db position correct but everything else is way off…

Yes getting the 14 bit value is no problem. The problem is that this value defines the physical position of the fader in x/16383 physical steps calculated from the total physical length of the fader. To actually get the db value this represents requires some calculation that seems to be quite impossible 