Как реализовано уменьшение громкости звука ? вот например имеется у нас 16-битный wav файл,как это файл нужно обработать что у меньшить громкость звука на 43 %,я думаю что план действий такой: из каждого отсчёта вычесть 43 %
Да, всё верно. Только не забудь, что в сэмплах лежит амплитуда относительно "нижней" точки мембраны динамика, а тебе надо уменьшать относительно середины.
Звук часто не на % уменьшается на на децибелы, т.к. % уменьшает звук неравномерно (ухо слышит изменение громкости нелинейно). Формула такая: 10dB/20, где dB – величина в децибелах. Т.е. чтобы уменьшать звук на 6 децибел, нужно умножить каждое значение на 10-6/20 = 0,501 (т.е. уменьшить примерно в 2 раза). Если семплы записаны в знаковом формате (обычно для 16 бит так и есть), но проблем нет. Если в беззнаковом, сначала переводим в знаковый, вычитая 32768, затем делаем манипуляции и снова прибавляем 32768. Учитываем также, что при увеличении громкости значение может выйти за пределы диапазона (-32768 ... 32767). Делал как-то на Delphi модуль и программу для преобразования разных величин громкости/амплитуды/мощности звука.
Jin X, а как это выразить в процентах ? --- Сообщение объединено, 27 сен 2022 --- Jin X, количетсво децибел делить на 100 ?
Entropy, db-10-6-3136102040%31,65070,7100141200316100010000Измерения. Единицы измерения. Децибелы - универсальная мера
Надо понимать, что вы подразумеваете под %. Если амплитуду, то это одно (просто умножаете на нужный процент и делите на 100, т.е. 30% = 0.3 и т.д.). Если нужно дБ перевести в %, см. формулу выше, только там в долях, а вам нужно перевести в % (-6 дБ = 0.5 = 50%; -10 дБ = 0.316 = 31.6%). Если субъективное восприятие громкости, то это уже другое. Во-первых, есть индивидуальные особенности (которые нам учесть не получится для всех), а во-вторых, считается, что звук тише в 2 раза при уменьшении громкости на 10 дБ (Вики: При увеличении уровня на каждые 10 дБ значение громкости в сонах увеличивается вдвое). Но опять же, восприятие звука разных частот неодинаково, более того чувствительность к разным частотам меняется и при изменении громкости. Сглаживание этой "неровности" называется тонкомпенсацией и реализовано в некоторых программах типа AIMP (при включении настройки) и в аппаратуре. Но это отдельная заморочка. Короче, по простому: если нужно уменьшить субъективного воспринимаемую громкость до X%, умножаем амплитуду (значение семпла) на: (X/100)1.660964047443681173935, что аналогично (X/100)log2(10)/2. К примеру, нужно тише в 2 раза (50%), умножаем на (50/100)log2(10)/2 = 0.3162277660168 (т.е. уменьшаем значения семплов примерно в 3 раза). Нужно тише в 5 раз (20%), умножаем на (20/100)log2(10)/2 = 0.06902969468933 (т.е. уменьшаем значения семплов примерно в 14.5 раз). Нужно довести до 0%, умножаем на (0/100)log2(10)/2 = 0
всё верно, именно это я и подразумевал под % --- Сообщение объединено, 1 окт 2022 --- Jin X, просто когда я вижу ползунок громкости в GUI у меня возникает вопрос каким образом программа уменьшает звук,теперь я понимаю что может уменьшаться амплитуда