Added: lowpass the output values

This commit is contained in:
Bob 2012-11-08 22:01:14 +01:00
parent d872a79a27
commit 19cbbee526
2 changed files with 12 additions and 2 deletions

View file

@ -39,6 +39,7 @@ CBitVis::CBitVis(int argc, char *argv[])
m_buf = NULL; m_buf = NULL;
m_bufsize = 0; m_bufsize = 0;
m_fftbuf = NULL; m_fftbuf = NULL;
m_displaybuf = NULL;
m_samplecounter = 0; m_samplecounter = 0;
m_nrffts = 0; m_nrffts = 0;
} }
@ -180,6 +181,7 @@ void CBitVis::ProcessAudio()
{ {
const int bins = 1024; const int bins = 1024;
const int lines = 46; const int lines = 46;
const float decay = 0.5;
int samplerate; int samplerate;
int samples; int samples;
if ((samples = m_jackclient.GetAudio(m_buf, m_bufsize, samplerate)) > 0) if ((samples = m_jackclient.GetAudio(m_buf, m_bufsize, samplerate)) > 0)
@ -191,6 +193,12 @@ void CBitVis::ProcessAudio()
memset(m_fftbuf, 0, bins * sizeof(float)); memset(m_fftbuf, 0, bins * sizeof(float));
} }
if (!m_displaybuf)
{
m_displaybuf = new float[lines];
memset(m_displaybuf, 0, lines * sizeof(float));
}
int additions = 0; int additions = 0;
for (int i = 1; i < lines; i++) for (int i = 1; i < lines; i++)
additions += i; additions += i;
@ -214,7 +222,7 @@ void CBitVis::ProcessAudio()
m_fftbuf[j] += cabsf(m_fft.m_outbuf[j]) / m_fft.m_bufsize; m_fftbuf[j] += cabsf(m_fft.m_outbuf[j]) / m_fft.m_bufsize;
} }
if (m_samplecounter % (samplerate / 20) == 0) if (m_samplecounter % (samplerate / 30) == 0)
{ {
m_fft.ApplyWindow(); m_fft.ApplyWindow();
fftwf_execute(m_fft.m_plan); fftwf_execute(m_fft.m_plan);
@ -232,7 +240,8 @@ void CBitVis::ProcessAudio()
for (int k = bin; k < bin + nrbins; k++) for (int k = bin; k < bin + nrbins; k++)
outval += m_fftbuf[k] / m_nrffts; outval += m_fftbuf[k] / m_nrffts;
out += string(Clamp(Round32(outval * 300.0f), 1, 100), '|'); m_displaybuf[j] = m_displaybuf[j] * decay + outval * (1.0f - decay);
out += string(Clamp(Round32(m_displaybuf[j] * 300.0f), 1, 100), '|');
out += '\n'; out += '\n';
start = next; start = next;

View file

@ -40,6 +40,7 @@ class CBitVis
float* m_buf; float* m_buf;
int m_bufsize; int m_bufsize;
float* m_fftbuf; float* m_fftbuf;
float* m_displaybuf;
int m_samplecounter; int m_samplecounter;
int m_nrffts; int m_nrffts;