На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Правила раздела "Программирование звука"
0) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с записью, обработкой, воспроизведением звука. Перед созданием темы подумайте, не будет ли она уместнее в разделах Разработка и тестирование программ, Наши исходники, а особенно Разовые заказы и подработки
1) На Раздел распространяются все Правила форума.Огромная просьба с ними внимательно ознакомиться.
2) Запрещается давать бессмысленные ответы вроде: "Снеси Мастдай", "ХП рулит", "Поставь Линукс" и т.д.
3) Запрещается создавать темы, в которых Вы намереваетесь получить ссылку на кряки, серийники и т.п. Также запрещено любое обсуждение p2p (peer-to-peer) сетей (BitTorrent, eDonkey и т.д.).
4) Реклама всякого рода пресекается беспощадно.
5) Используйте тэг [CODE] для выделения кода программы (непременно с указанием языка программирования - выбрать из списка. В противном случае бессмысленно!). Уважайте тех, кто будет читать ваш код!
6) Если решение вашей проблемы найдено, то не забываем помечать тему специальной функцией "Вопрос решён". Вам всего лишь требуется при написании последнего ответа поставить одну единственную галочку прямо над формой ответа.
7) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе

8) Если не прикрепляются/не скачиваются файлы, читаем Не прикрепляется / не скачивается файл. Любые обсуждения в данном разделе проблем с приложением файлов считаются оффтопиком! Со всеми вытекающими.

9) NEW! Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно. Попытки накрутки количества тематических сообщений за счёт поднятия древних неактуальных тем ("некрофилия") будут наказываться по велению левой пятки модераторского состава (см. пп.12, 13 Правил)



Нарушение Правил может повлечь наказание со стороны модераторов.



user posted imageFAQ Раздела user posted imageПоиск в Разделе user posted imageMSDN Library Online | Ваше мнение о модераторах: user posted imageBarazuk user posted imageRikkie
Модераторы: barazuk
  
> ФНЧ и ревербератор, фильтр нижних частот и ревербератор
    Повстречался ревербератор
    http://i.imgur.com/i5mpZrB.png

    Исходный код можно прочитать тут
    https://git.cinelerra-cv.org/gitweb?p=Cinel...ef750fd;hb=HEAD

    "Уровень исходного сигнала"
    мсек. Предзадержка"
    "Уровень первых отражений"
    "Уровень последних отражений"
    "Число отражений"
    "мсек. Время реверберации"

    Не пойму что означают параметры: `Start band for lowpass` и `End band for lowpass`

    Насколько я понимаю, речь идет о фильтре нижних частот (lowpass). Но вот эти вот "приставки" Start band * End band *
    Что это может означать ? Подскажите пожалуйста.
    Ведь lowpass пропуск н.ч. то-бишь фильтр нижних частот работает в диапазоне от 0 до границы среза.
    А тут вроде как получается мы можем задавать нижнюю (отличную от нуля) и верхнюю границу полосы
    пропускания фильтра нижних частот ?

    Я задавал этот вопрос многим пользователям, но похоже, что точку в вопросе может поставить только тот, кто прочитает исходный код.

    Мы смотрели действие эффекта по спектрограмме, выдвигались разные предположения и мнения
    Ниже - цитаты:

    -- что это " на самом деле не ФНЧ, а ПФ (полосовой фильтр)"

    - что это действительно "ФНЧ, но в эффекте их не один, а два, но с разным действием" (кстати, в коде они так и числятся как LOWPASS 1 LOWPASS 2)

    - была идея, что " 2 частоты задают крутизну спада фильтра(то есть: start band - это аналог cutoff frequency - начальная частота, с которой фильтр начнёт работу, а end band for lowpass - это ширина (по оси Х) участка с затуханием), но оказалось, что они меняются независимо и могут быть в "неправильном" порядке.
    Если end < start то спектрограмма показывает, что это обычный band pass фильтр, а не lowpass filter.
    Получается, что это или так и было задумано, или это логическая ошибка. Потому что в "нормальных" условиях ( случай, когда выставляются значения start < end ) спектрограмма подтверждает гипотезу, что разница между end и start определяет интенсивность затухания. Видно, что полоса затухающих частот становится уже или шире
    ."

    - выдвигалось предположение, что "ФНЧ здесь имеет изменяемую полосу. Сначала полоса больше, Start Band, а с каждым отражением уменьшается, вплоть до End Band."

    -- ".. это не тривиальный фильтр. Их там много на самом деле, в зависимости от количества отражений. Частоты задают границы изменения частоты фильтров. Возможно он даже LP-типа (я по коду не возьмусь определить), но их там несколько, с разными частотами для каждого отражения, если я правильно уловил что внутри происходит. "

    -- и вот ниже пользователь пробовал читать исходный код:


    237 // set changing levels
    238 ref_levels[j] = db.fromdb(config.ref_level1 + (config.ref_level2 - config.ref_level1) / (config.ref_total - 1) * (j - 2));
    239 //ref_levels[i][j] /= 100;
    240
    241 // set changing lowpass as linear
    242 ref_lowpass[i][j] = (int64_t)(config.lowpass1 + (double)(config.lowpass2 - config.lowpass1) / (config.ref_total - 1) * (j - 2));
    243 lowpass_in1[i][j] = 0;
    244 lowpass_in2[i][j] = 0;
    [I]

    j - номер отражения

    ref_lowpass заполняется равномерно частотами из интервала [lowpass1, lowpass2]

    Осталось понять, что именно делает фильтр:


    int ReverbEngine::process_overlay(double *in, double *out, double &out1, double &out2, double level, int64_t lowpass, int64_t samplerate, int64_t size)
    467 {
    468 // Modern niquist frequency is 44khz but pot limit is 20khz so can't use
    469 // niquist
    470 if(lowpass == -1 || lowpass >= 20000)
    471 {
    472 // no lowpass filter
    473 for(int i = 0; i < size; i++) out += in[i] * level;
    474 }
    475 else
    476 {
    477 double coef = 0.25 * 2.0 * M_PI * (double)lowpass / (double)plugin->project_sample_rate;
    478 double a = coef * 0.25;
    479 double b = coef * 0.50;
    480
    481 for(int i = 0; i < size; i++)
    482 {
    483 out2 += a * (3 * out1 + in[i] - out2);
    484 out2 += b * (out1 + in[i] - out2);
    485 out2 += a * (out1 + 3 * in[i] - out2);
    486 out2 += coef * (in[i] - out2);
    487 out1 = in[i];
    488 out[i] += out2 * level;
    489 }
    490 }
    491 }
    [I]
    Тут какая-то фильтрация с MAGIC_NUMBERS и без комментариев.
    Короче, эти 2 частоты каким-то образом влияют на фильтрацию применительно к отражениям сигнала.
    Затруднительно сказать как именно...
    .. надо найти специалиста по фильтрации, которые объяснит, что делает фильтр

    если F2< F1 (F1 > F2) частоты фильтров для отражений распределяются в обратном порядке.
    Не знаю как это влияет на результат.


    --------------
    Вот такая вот головоломка.
    Сообщение отредактировано: mnm-a -
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script Execution time: 0,0647 ]   [ 17 queries used ]   [ Generated: 18.11.17, 04:23 GMT ]