Левелер |
Предыдущая Содержание Следующая |
|
Левелер используется для поддержания среднего уровня сигнала постоянным.
Параметрами левелера являются: средний уровень, который необходимо поддерживать усиление - максимальное усиление левелера, либо минимальный уровень, на котором начинает работать левелер время атаки - как быстро реагирует на повышение уровня время спада - как быстро реагирует на понижение уровня РеализацияПростой левелер.
Вариант параметров: dBlevel = -18 dBgain = 6 attackMS = 1000 releaseMS = 1000
/** * Аудио левелер * */ public class Leveler { private int m_maxLevel = 32768; private double m_gain = 0.0; private double m_level = 0.0; private int m_attack = 1000; private int m_release = 1000; private double m_prevLevel = 0.0;
public Leveler() { } public void init(int dBlevel, int dBgain, int attackMS, int releaseMS, int bitsPerSample, int sampleRate) { m_maxLevel = 1 << (bitsPerSample - 1); m_gain = Math.pow( 10.0, dBgain / 20.0 ); m_level = Math.pow( 10.0, dBlevel / 20.0 ) * m_maxLevel;//32768.0; m_attack = ( attackMS * sampleRate / 1000 + 1 ); m_release = ( releaseMS * sampleRate / 1000 + 1 ); } public double proc(double sample) { double s = sample > 0 ? sample : -sample; s -= m_prevLevel; if( s >= 0 ) m_prevLevel += s / m_attack; else m_prevLevel += s / m_release;
if( m_gain * m_prevLevel > m_level ) sample = sample * m_level / m_prevLevel; else sample = sample * m_gain;
return sample; } } |
Предыдущая Содержание Следующая |