The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Левелер

Левелер

Предыдущая  Содержание  Следующая  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;

 }

}

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