Высококачественный алгоритм реверберации

11

Я немного поискал на этом сайте, но, что удивительно, я не нашел много соответствующей информации, и мои знания о DSP очень и очень ограничены.

Моя цель довольно проста: я хочу запрограммировать алгоритмическую реверберацию на C ++, которая звучит очень хорошо. Точнее, лучшим вариантом было бы позволить конечному пользователю выбрать компромисс между качеством и использованием процессора.

Из того, что я обнаружил до сих пор, является то, что для создания реверберации вы должны передать сухой сигнал в алгоритм ранних отражений, а затем в алгоритм поздних отражений. Это верно ?

Теперь я нашел обширную статью о поздних отражениях, используя сеть с задержкой обратной связи ( СНИЖЕНИЕ ТРЕБОВАНИЙ К ИСКУССТВЕННОЙ РЕВЕРБЕРАЦИИ С ИСПОЛЬЗОВАНИЕМ ВРЕМЕННО-ВАРИАНТНЫХ СЕТЕЙ ЗАДЕРЖКИ ОБРАТНОЙ СВЯЗИ ). Из того, что я прочитал, FDN - это высококачественный, не слишком дорогой (смоделированный) способ моделирования поздних отражений. Кроме того, я думаю, вы можете контролировать компромисс между качеством и процессором, изменяя количество линий задержки.

Однако я абсолютно не знаю, как запрограммировать алгоритм ранних размышлений (помните? Я действительно не осведомлен в области DSP).

Для меня было бы логично использовать разновидность мульти-задержки, которая имеет преимущество в том, что она проста в программировании и недорогой в вычислительном отношении. Но это звучит слишком просто, чтобы быть правдой.

Кроме того, мой инстинкт подсказывает мне, что один или несколько фильтров должны быть включены где-то на пути прохождения сигнала.

Может, кто-нибудь прояснит мне эту тему?

Две заметки:

  • Я не после сверточной реверберации вообще. Меня не особо волнует реализм реверберации, но вместо этого я хочу хорошее звучание, настраиваемое, а не процессоро-голодная реверберация.
  • Кроме того, часть кода не беспокоит меня, в противном случае я бы спросил о stackoverflow. Это действительно часть DSP, и именно та часть, за которой я следую :)
Dinaiz
источник

Ответы:

10

Вы должны генерировать ранние отражения с несколькими нажатиями задержек (= свертка с суммой горстки дираков); и «хвост» с тем, что обычно реализуется с помощью сети универсальных (AP) и гребенчатых фильтров.

Первая часть тривиальна для реализации, но ее трудно получить, чтобы звучать правильно. Это может помочь взглянуть на расположение пиков во главе предварительно записанных импульсных откликов, чтобы получить представление о том, какие отклики являются «естественными». Трудно сделать его легко параметрируемым с помощью нескольких настроек, хотя вы можете обойтись без него, предложив кучу пресетов для этой части, чтобы получить «гибридный» ревербератор в стиле Virsyn Reflect.

Хвост - это то место, где блестят алгоритмические реверберации (без каламбура), поскольку его легко параметризовать. Дедушка алгоритмических ревербераторов - Шредералгоритм. Обратите внимание, что он генерирует только «хвост», а не ранние отражения - вы можете увеличить его с помощью нескольких нажатий задержек, чтобы придать ему импульс. Это звучит не очень хорошо (очень "зернисто"), но это неплохое начало - с этим вам есть, с чем связываться, и это помогает понять влияние каждого параметра. Многие похвальные алгоритмические ревербераторы, особенно из 80-х (Lexicon, Eventide, Publison), представляют собой просто тонко настроенные топологии всепроходных фильтров и гребенчатых фильтров. Я подозреваю, что это было связано с большим количеством проб и ошибок обученными ушами, которые очень хорошо понимали, как будут звучать изменения параметров или топологии, а не каким-либо научным подходом. Вот еще одно интересное чтение- отображение любимой топологии реверберации Кейта Барра. Оригинальная midiverb, возможно, не является вашим определением «высококачественной алгоритмической реверберации», но звучит очень мило, и это дает перспективу узнать, что она была сделана только с «dsp», способным к MAC с коэффициентами 0,5 ...

Комната Valhalla - моя любимая программная алгоритмическая реверберация - найдите время, чтобы почитать блог своего разработчика, чтобы найти вдохновение о том, что помогает сделать его правильным.

pichenettes
источник
2
Забыл упомянуть Freeverb как более современный вариант (с доступным кодом, можно найти, например, в csound или ladspa codebase) алгоритма Шредера.
pichenettes
Очень интересно ! Я тоже люблю продукты Valhalla (ValhallaShimmer сияет, каламбур тоже не предназначен :)). Почему вы упоминаете свертку для раннего отражения? Достаточно ли задержать обычную задержку?
Dinaiz
1
Я упомянул свертку, потому что «задержка с несколькими касаниями» - это просто особый вид свертки (с несколькими ненулевыми коэффициентами, поэтому он может быть вычислен наивным способом и без артиллерии, связанной с «плотными» свертками). В любом случае, как указал Хильмар, задержка в нескольких касаниях может быть слишком наивной и после нескольких отражений, поэтому временное распространение (= фильтрация нижних частот) эхо будет звучать более естественно. Это можно сделать с задержкой в ​​несколько касаний с простым LP для каждого касания; или путем непосредственного вычисления всей части ранних отражений реверберации с помощью механизма свертки и предварительно настроенных ИК-сигналов.
pichenettes
8

Создание хорошего звучания реверберации НЕ легко. Сети с задержкой обратной связи, безусловно, путь. Оригинальные алгоритмы Шредера со всеми проходами и гребенчатыми фильтрами страдают от "спектрального утонения", что делает его металлическим звучанием. Вам необходимо набрать зависящее от частоты затухание на разных линиях задержки, которые представляют время реверберации (как функцию частоты). Ранние отражения могут быть сделаны через линию задержки с постукиванием также с некоторым частотно-зависимым затуханием и несколькими рассеивателями для их декорреляции. Выполнение стерео также требует некоторых средств декорреляции.

Существует довольно хорошая реализация с открытым исходным кодом, она называется GVerb и используется, например, в Audacity. Поиск в Google должен получить (легальную) копию исходного кода.

Hilmar
источник
Из твоего поста это звучит просто! Ну, по крайней мере, я могу понять это, за исключением части о де-корреляции. Что именно вы подразумеваете под этим? Что касается частотно-зависимого ослабления, я думаю, вы имеете в виду выбрасывание некоторых фильтров и точную настройку на слух частот для каждой линии. О каком фильтре идет речь? HP? LP? БП? Спасибо !
Динаиз