Предполагая, что вы имеете в виду результат, чтобы остаться в дБ, вы просите простой линейной интерполяции:
f(x) = ymin + (x - xmin)*(ymax - ymin)/(xmax - xmin)
или в случае,
f(x) = 0 + (x + 100)*(255 - 0)/(-30 + 100)
f(-60 db) = 145.714
Если вместо этого вы говоря о преобразовании db в масштабный коэффициент, с помощью которого можно умножать аудиосигнал, тогда это немного сложнее. Например, для умножения аудиосигнала на 0 есть отрицательная бесконечность db. Итак, (по крайней мере), вы должны иметь специальный случай.
Чтобы уточнить, вы имеете в виду диапазон байтов и быть относительным db? Или вы хотите преобразовать его в множитель для сигнала (в линейном пространстве)? –
Идея состоит в том, чтобы имитировать то, что делает API WebAudio с помощью getByteFrequencyData, которая возвращает массив байтов. https://webaudio.github.io/web-audio-api/#smoothing-over-time Похоже, что фактическое отношение db теряется в процессе, когда он дает только линейный множитель, как вы предлагаете. Эквивалентная функция в FMOD, которую я использую, возвращает линейные значения от 0 до 1, и я просто ищу, чтобы интерполировать результат на 0-255. – neosettler
Вы можете уточнить свой вопрос, сообщив нам, что вы ожидаете от формулы для -60db. f (-60) =?. –