Алгоритм индикатора уровня звука

Тема в разделе "WASM.A&O", создана пользователем nds, 7 авг 2008.

  1. nds

    nds Member

    Публикаций:
    0
    Регистрация:
    16 июл 2007
    Сообщения:
    157
    Собствено надо реализовать индикацию уровня звука в реальном времени как например соундфордже
    проблема в том что непонятно как именно считать этот уровень
    в идеале былобы получить еще и уровни низких/средних/высоких частот
     
  2. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    "Уровень звука" - средняя амплитуда - усредняем по некоторому времени модуль... напряжения (не знаю как лучше обозвать). Потом можно прологарифмировать и привести к дециБелам если нужно.
    Если нужен спектральный анализатор - делаем быстрое (дискретное) преобразование Фурье (БПФ). В инете много статей и исходников.
     
  3. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    уровень - через СКЗ, относительно например максимального значения -3дБ
    уровни в полосах частот - через фильтры
     
  4. nds

    nds Member

    Публикаций:
    0
    Регистрация:
    16 июл 2007
    Сообщения:
    157
    можете подсказать формулу подсчета скз гугль чтото ничего не выдает
     
  5. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Среднеквадратичное значение.
     
  6. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Тут зависит от того в каком формате доступны данные и сколько уровней отображения.
    Ну на пример PCM 16 бит и 16 уровней:
    Всё просто, индикатор уровня заполнить до номера последнего значащего бита в усредненном значении звука.
    Среднее значение бери за N последних отсчетов.

    Код:
    0000100101010000
    Уровень:
    ----##########

    Чем больше N, тем медленее будет нарастать и спадать индикатор.
    Можно также проверять значение текущего уровня со средним.
    Еесли текущий больше, тогда пропустить усреднение и присвоить его среднему, иначе считать среднее значение.
    В таком случае индикатор будет нарастать мгновенно, а спадать медленно.

    Конечно всё крайне нелинейно и ... но просто. Если не нужна точность, а тольно визуальное отображение, то и так сойдет.
     
  7. nds

    nds Member

    Публикаций:
    0
    Регистрация:
    16 июл 2007
    Сообщения:
    157
    S_Alex
    Данные поступают с стереомикса в формате моно 44100 гц 16 бит
    точность не важна (у индикатора всего девять позиций) но важна минимальная задержка (в идеале должна быть незаметна)
    скз показывает реальное значение если смотреть по амплитуде но оно не совпадает с слуховым восприятием тоесть от изменения спектра громкость не меняется а человек слышит резкое изменение
    буду курить БПФ :)
     
  8. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    тогда фильтрами в октавы\третьоктавы и взвешивать по А
    бпф - лишнее
     
  9. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    http://ru.wikipedia.org/wiki/Громкость_звука