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

Тема в разделе "WASM.AUDIO", создана пользователем Entropy, 28 авг 2022.

  1. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    175
    Как реализовано уменьшение громкости звука ? вот например имеется у нас 16-битный wav файл,как это файл нужно обработать что у меньшить громкость звука на 43 %,я думаю что план действий такой:
    из каждого отсчёта вычесть 43 %
     
  2. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.427
    Адрес:
    Россия, Нижний Новгород
    Да, всё верно. Только не забудь, что в сэмплах лежит амплитуда относительно "нижней" точки мембраны динамика, а тебе надо уменьшать относительно середины.
     
    Последнее редактирование: 28 авг 2022
    Entropy нравится это.
  3. Jin X

    Jin X Active Member

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

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

    Вложения:

    • svrc_1.36.zip
      Размер файла:
      40,7 КБ
      Просмотров:
      126
  4. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    175
    Jin X, а как это выразить в процентах ?
    --- Сообщение объединено, 27 сен 2022 ---
    Jin X, количетсво децибел делить на 100 ?
     
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
  6. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    369
    Адрес:
    Кольца Сатурна
    Надо понимать, что вы подразумеваете под %.

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

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    175
    всё верно, именно это я и подразумевал под %
    --- Сообщение объединено, 1 окт 2022 ---
    Jin X, просто когда я вижу ползунок громкости в GUI у меня возникает вопрос каким образом программа уменьшает звук,теперь я понимаю что может уменьшаться амплитуда