У меня есть вопрос относительно математики, которую Apple использует в ней здесь, вот пример.
Небольшой фон: я знаю, что средняя мощность и максимальная мощность, возвращаемые AVAudioRecorder и AVAudioPlayer, находятся в дБ. Я также понимаю, почему мощность RMS находится в дБ и что ее необходимо преобразовать в усилитель с помощью pow(10, (0.5 * avgPower))
.
Мой вопрос:
Apple использует эту формулу для ее создания "Таблица счетчиков"
MeterTable::MeterTable(float inMinDecibels, size_t inTableSize, float inRoot)
: mMinDecibels(inMinDecibels),
mDecibelResolution(mMinDecibels / (inTableSize - 1)),
mScaleFactor(1. / mDecibelResolution)
{
if (inMinDecibels >= 0.)
{
printf("MeterTable inMinDecibels must be negative");
return;
}
mTable = (float*)malloc(inTableSize*sizeof(float));
double minAmp = DbToAmp(inMinDecibels);
double ampRange = 1. - minAmp;
double invAmpRange = 1. / ampRange;
double rroot = 1. / inRoot;
for (size_t i = 0; i < inTableSize; ++i) {
double decibels = i * mDecibelResolution;
double amp = DbToAmp(decibels);
double adjAmp = (amp - minAmp) * invAmpRange;
mTable[i] = pow(adjAmp, rroot);
}
}
Каковы все вычисления - точнее, что делают каждый из этих шагов? Я думаю, что mDecibelResolution
и mScaleFactor
используются для построения диапазона 80 дБ более 400 значений (если только я не ошибаюсь). Однако каково значение inRoot
, ampRange
, invAmpRange
и adjAmp
? Кроме того, почему i-я запись в таблице счетчиков "mTable[i] = pow(adjAmp, rroot);
"?
Любая помощь очень ценится!:)
Спасибо заранее и приветствую!