Как мне усилить звуки на указанное количество децибел в AS3? - PullRequest
2 голосов
/ 23 июня 2009

Несколько дней назад это был мой вопрос, и я нашел ответ. Может быть, это поможет кому-то еще.

A. Первая часть проблемы: можете ли вы усилить звук с помощью Flash? Документация AS3 для SoundTransform говорит об атрибуте громкости:

"Громкость: от 0 (тишина) до 1 (полная громкость).

По номинальной стоимости это означает, что вы можете делать звуки только тише. Фактически, если вы укажете значение больше единицы (1,0), звуки будут усиливаться. Вы рискуете насытить звук и получить плохое качество, но вы можете это сделать, а с голосом вам многое сойдет с рук. (Музыка менее прощающая, поэтому экспериментируйте. Этот метод не выполняет динамическое сжатие, которое лучше подходит для музыки.)

B. Вторая часть проблемы: порядок, в котором вы делаете вещи.

RIGHT:

soundTransform = new SoundTransform();
soundTransform.volume = volume * volumeAdjustment;
audioChannel.soundTransform = soundTransform;

НЕПРАВИЛЬНО:

soundTransform = new SoundTransform();
audioChannel.soundTransform = soundTransform;
soundTransform.volume = volume * volumeAdjustment;

Я провел несколько тестов в CS3 и CS4 и получил разные результаты. В CS3 я мог установить громкость на преобразовании ПОСЛЕ «audioChannel.soundTransform = soundTransform;» и все было хорошо. Но в CS4 это никак не отразилось. Я подозреваю, что CS3 использовал передачу по ссылке для установки soundTransform, а CS4 использует передачу по значению и копирует объект, переданный в него. Подход CS4 лучше разработан, но он сломал мой код, который отлично работал в CS3.

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

var multiplier:Number = Math.pow(10, decibels / 20); // Power vs. amplitude

Обратите внимание, что "децибелы" могут быть положительным числом (для усиления) или отрицательным числом (чтобы сделать тише). Если децибел равен нулю, никаких изменений не происходит.

Значение для децибел 3 будет (в близком приближении) удваивать амплитуду. Значение 10 децибел увеличит громкость в десять раз (точно).

1 Ответ

4 голосов
/ 23 июля 2009

Ваш расчет децибел должен на самом деле использовать 20, а не 10:

var multiplier:Number = Math.pow(10, decibels / 20);

Цифровой звук - это амплитуда, а не мощность (это представление звукового давления, а не мощности звука).

...