如何用Qt制作平滑的电平(峰值)表

how to make smooth level(peak) meter with Qt

从频道获取峰值电平:

BASS_ChannelGetLevelEx(chan, levels, 0.02, BASS_LEVEL_STEREO    ); 

这个函数我在线程中以相同的频率调用

void Thread::run()
{ 

 while(!m_abort)
    {

        emit SetLevels();
        QThread::msleep(20);
    }
}

通过 QPainter 绘制电平表

就是这样

运行 疯狂地跳跃。但一定要顺利

如何让它平滑平滑?

当你的新峰值大于当前峰值时,就赋新值即可。如果小于,则像这样以对数方式减小当前值..

float factor = 0.10;
cur_left_value = cur_left_value - factor * (cur_left_value - new_left_value);

该系数越大,您的峰值仪表就会越快"fall"。您将必须有一个计时器或线程来 连续 使用上述逻辑分配最新(新)峰值。