Уменьшение громкости звука

Discussion in 'WASM.AUDIO' started by Entropy, Aug 28, 2022.

  1. Entropy

    Entropy Member

    Blog Posts:
    0
    Joined:
    Aug 23, 2020
    Messages:
    185
    Как реализовано уменьшение громкости звука ? вот например имеется у нас 16-битный wav файл,как это файл нужно обработать что у меньшить громкость звука на 43 %,я думаю что план действий такой:
    из каждого отсчёта вычесть 43 %
     
  2. HoShiMin

    HoShiMin Well-Known Member

    Blog Posts:
    5
    Joined:
    Dec 17, 2016
    Messages:
    1,486
    Location:
    Россия, Нижний Новгород
    Да, всё верно. Только не забудь, что в сэмплах лежит амплитуда относительно "нижней" точки мембраны динамика, а тебе надо уменьшать относительно середины.
     
    Last edited: Aug 28, 2022
    Entropy likes this.
  3. Jin X

    Jin X Active Member

    Blog Posts:
    0
    Joined:
    Jan 15, 2009
    Messages:
    369
    Location:
    Кольца Сатурна
    Звук часто не на % уменьшается на на децибелы, т.к. % уменьшает звук неравномерно (ухо слышит изменение громкости нелинейно).
    Формула такая: 10dB/20, где dB – величина в децибелах.
    Т.е. чтобы уменьшать звук на 6 децибел, нужно умножить каждое значение на 10-6/20 = 0,501 (т.е. уменьшить примерно в 2 раза).

    Если семплы записаны в знаковом формате (обычно для 16 бит так и есть), но проблем нет.
    Если в беззнаковом, сначала переводим в знаковый, вычитая 32768, затем делаем манипуляции и снова прибавляем 32768.
    Учитываем также, что при увеличении громкости значение может выйти за пределы диапазона (-32768 ... 32767).
    Делал как-то на Delphi модуль и программу для преобразования разных величин громкости/амплитуды/мощности звука.
     

    Attached Files:

  4. Entropy

    Entropy Member

    Blog Posts:
    0
    Joined:
    Aug 23, 2020
    Messages:
    185
    Jin X, а как это выразить в процентах ?
    --- Сообщение объединено, Sep 27, 2022 ---
    Jin X, количетсво децибел делить на 100 ?
     
  5. Mikl___

    Mikl___ Супермодератор Staff Member

    Blog Posts:
    14
    Joined:
    Jun 25, 2008
    Messages:
    3,914
  6. Jin X

    Jin X Active Member

    Blog Posts:
    0
    Joined:
    Jan 15, 2009
    Messages:
    369
    Location:
    Кольца Сатурна
    Надо понимать, что вы подразумеваете под %.

    Если амплитуду, то это одно (просто умножаете на нужный процент и делите на 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 :)
     
  7. Entropy

    Entropy Member

    Blog Posts:
    0
    Joined:
    Aug 23, 2020
    Messages:
    185
    всё верно, именно это я и подразумевал под %
    --- Сообщение объединено, Oct 1, 2022 ---
    Jin X, просто когда я вижу ползунок громкости в GUI у меня возникает вопрос каким образом программа уменьшает звук,теперь я понимаю что может уменьшаться амплитуда