На практике, как музыкант, много раз сталкивался с разными плагинами и железками, но когда попытался смоделировать в MATLAB и сравнить с теми же плагинами - появилось много вопросов. Наверняка здесь есть люди, разбирающиеся в этой тематике.
1. По какому принципу компрессор из состояния компрессии переходит в состояние релиза? Сколько-то времени ждет, чтобы амплитуда сигнала опустилась ниже порога и не поднималась обратно? Не очень ясно, как он отслеживает амплитуду - ведь сигнал может быть низкочастотный, например - синусоида 20гц. Период большой, пол периода сигнал с низкими значениями по y, тем не менее компрессор не переходит в релиз в этот момент. На данный момент реализовал как проверку - если N подряд идущих значений не превышают порог, то компрессор идет в релиз. Но не уверен, что это корректная реализация=)
2. Как осуществляется пересчет значения сигнала в момент компрессии? Всегда думал, что в соответствии с ratio уменьшается tmp = (cur_y - threshold), а потом new_y = threshold + tmp. Но в таком виде компрессор трещит. Кроме этого, стал сравнивать с Waves RComp - он вообще масштабирует сигнал так, что максимальный уровень равен порогу. Как же принято пересчитывать сигнал на практике?
3. Нужно построить эффект типа "эксайтер". В интернете есть статья Михаила Чернецкого, где он рассказывает в общих чертах об устройстве эксайтеров. Там есть загадочный блок генерации гармоник (
http://rus.625-net.ru/archive/z0899/6.htm). Занимался ли кто-нибудь подобными алгоритмами? У меня только одно предположение - FFT, нахождение основного тона и подмешивание синусоиды с частотой в два раза больше. Но такая реализация при работе в реальном времени будет подмешивать гармоники от предыдущего фрагмента сигнала к последующему, что, видимо, не совсем правильно. Как должна реализовываться эта генерация гармоник?