audio_render.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "audio_render.h"
  2. #include <QPainter>
  3. AudioRender::AudioRender(QLabel* parent)
  4. : QLabel(parent)
  5. {}
  6. void AudioRender::setLevel(float volume)
  7. {
  8. float val = 0;
  9. if (volume < 0) {
  10. volume = -volume;
  11. }
  12. if (volume > 0.001) {
  13. val = (20.0f * log10(volume) + 60.0f) / 60.0f;
  14. }
  15. float diff = val - _lastShowVal;
  16. if (diff < -0.015f) {
  17. diff = -0.015f;
  18. }
  19. _lastShowVal += diff;
  20. }
  21. void AudioRender::paintEvent(QPaintEvent* event)
  22. {
  23. int val = _lastShowVal * width();
  24. QPainter painter(this);
  25. QPen pen(Qt::green, height());
  26. painter.setPen(pen);
  27. painter.drawLine(0, 0, val, 0);
  28. pen.setColor(Qt::gray);
  29. painter.setPen(pen);
  30. painter.drawLine(val, 0, width(), 0);
  31. }
  32. RenderArea::RenderArea(QWidget* parent)
  33. : QLabel(parent)
  34. {
  35. setBackgroundRole(QPalette::Base);
  36. setAutoFillBackground(true);
  37. // setMinimumHeight(10);
  38. // setMaximumHeight(30);
  39. // setMinimumWidth(100);
  40. // setMaximumWidth(200);
  41. }
  42. void RenderArea::paintEvent(QPaintEvent* /* event */)
  43. {
  44. QPainter painter(this);
  45. painter.setPen(Qt::black);
  46. painter.drawRect(QRect(painter.viewport().left() + 10,
  47. painter.viewport().top() + 10,
  48. painter.viewport().right() - 20,
  49. painter.viewport().bottom() - 20));
  50. if (m_level == 0.0)
  51. return;
  52. int pos = ((painter.viewport().right() - 20) - (painter.viewport().left() + 11)) * m_level;
  53. painter.fillRect(painter.viewport().left() + 11,
  54. painter.viewport().top() + 10,
  55. pos,
  56. painter.viewport().height() - 21,
  57. Qt::red);
  58. }
  59. void RenderArea::setLevel(qreal value)
  60. {
  61. m_level = value;
  62. update();
  63. }