Левелер

Предыдущая  Содержание  Следующая  V*D*V

Левелер используется для поддержания среднего уровня сигнала постоянным.

 

Параметрами левелера являются:

средний уровень, который необходимо поддерживать

усиление - максимальное усиление левелера, либо минимальный уровень, на котором начинает работать левелер

время атаки - как быстро реагирует на повышение уровня

время спада - как быстро реагирует на понижение уровня

Реализация

Простой левелер.

 

Вариант параметров:

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;

 }

}

Предыдущая  Содержание  Следующая