AVAudioRecorder: пиковая и средняя мощность - PullRequest
2 голосов
/ 06 августа 2009

В чем разница между методами peakPowerForChannel и averagePowerForChannel в AVAudioRecorder?

А почему возвращаемое значение отрицательно? Разве это не должно быть 0 для отсутствия звука и повышаться, когда амплитуда звука возрастает? Как я могу конвертировать в более «читаемый» формат?

Спасибо.

Ответы [ 2 ]

14 голосов
/ 31 декабря 2009

Пиковая мощность означает взятие максимального значения из всех абсолютных значений всех выборок. Это полезно для предотвращения отсечения звука.

Средняя мощность - среднеквадратичное значение выборок. Это полезно, чтобы определить, насколько громкий звук звучит для человеческого слуха.

Значение является отрицательным, поскольку оно выражается в децибелах, где 0 дБ равно максимальному значению аудиосистемы. Это шкала log10, а формула для конвертации:

db = 10 * log10 (level);

где дБ - децибелы, а уровень - скалярное значение в диапазоне от 0,0 до 1,0. Поэтому, когда уровень равен 0,0 (без звука), результатом является отрицательная бесконечность.

Если вы хотите «читаемый» формат, вы можете использовать измеритель уровня (UIProgressView или ваш собственный), где максимальное значение равно 0,0, а минимальное равно -60,0 (вы можете настроить в зависимости от минимального уровня шума). Как только вы привыкли к децибелам, они имеют больше смысла, чем линейные уровни.

2 голосов
/ 06 августа 2009

Хотя я не смотрел на эти значения, поскольку они связаны с громкостью звука, я бы предположил, что она измеряется как изменение в децибелах.

0 - максимальная громкость, и все, что тише, чем это, можно выразить как падение в децибелах.

Позитивные и негативные значения не имеют. Просто помните, что это логарифмическая шкала, где вы измеряете разницу в громкости (или воспринимаемой громкости).

...