audio_render.cpp 1.7 KB

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