AudioPlayer.hpp 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #pragma once
  2. #include <QObject>
  3. #include <QMediaPlayer>
  4. #include "api.hpp"
  5. #include "ID.hpp"
  6. class AudioPlayer : public QObject
  7. {
  8. Q_OBJECT
  9. public:
  10. ~AudioPlayer();
  11. explicit AudioPlayer(QObject *parent = nullptr);
  12. Q_ENUM(QMediaPlayer::State)
  13. Q_PROPERTY(QMediaPlayer::State state READ state NOTIFY stateChanged)
  14. Q_PROPERTY(float progress READ progress WRITE setProgress NOTIFY progressChanged)
  15. Q_PROPERTY(qint64 progress_ms READ progress_ms WRITE setProgress_ms NOTIFY progressChanged)
  16. Q_PROPERTY(qint64 duration READ duration NOTIFY durationChanged)
  17. Q_PROPERTY(Track* currentTrack READ currentTrackPtr NOTIFY currentTrackChanged)
  18. Q_PROPERTY(QString formatProgress READ formatProgress NOTIFY progressChanged)
  19. Q_PROPERTY(QString formatDuration READ formatDuration NOTIFY durationChanged)
  20. Q_PROPERTY(double volume READ volume WRITE setVolume NOTIFY volumeChanged)
  21. Q_PROPERTY(bool muted READ muted WRITE setMuted NOTIFY mutedChanged)
  22. Q_PROPERTY(Settings::LoopMode loopMode READ loopMode WRITE setLoopMode NOTIFY loopModeChanged)
  23. Q_PROPERTY(Settings::NextMode nextMode READ nextMode WRITE setNextMode NOTIFY nextModeChanged)
  24. float progress();
  25. qint64 progress_ms();
  26. refTrack currentTrack();
  27. Track* currentTrackPtr();
  28. QString formatProgress();
  29. QString formatDuration();
  30. qint64 duration();
  31. QMediaPlayer::State state();
  32. double volume();
  33. bool muted();
  34. Settings::LoopMode loopMode();
  35. Settings::NextMode nextMode();
  36. inline static refTrack noneTrack{new Track()};
  37. static AudioPlayer* instance;
  38. public slots:
  39. void play(refTrack track);
  40. void play(refPlaylist playlist);
  41. void play(ID id);
  42. void play(QString id);
  43. void play(Track* track);
  44. void play(Playlist* playlist);
  45. void play(); // resume
  46. void pause();
  47. void pause_or_play();
  48. void stop();
  49. bool next();
  50. bool prev();
  51. void setProgress(float progress);
  52. void setProgress_ms(int progress);
  53. void setVolume(double volume);
  54. void setMuted(bool muted);
  55. void setLoopMode(Settings::LoopMode loopMode);
  56. void setNextMode(Settings::NextMode nextMode);
  57. signals:
  58. void progressChanged(qint64 ms);
  59. void currentTrackChanged(Track* track);
  60. void durationChanged(qint64 duration);
  61. void stateChanged(QMediaPlayer::State state);
  62. void volumeChanged(double volume);
  63. void mutedChanged(bool muted);
  64. void loopModeChanged(Settings::LoopMode loopMode);
  65. void nextModeChanged(Settings::NextMode nextMode);
  66. private slots:
  67. void setMedia(QMediaContent media);
  68. void onMediaAborted();
  69. void updatePlaylistGenerator();
  70. private:
  71. void _unsubscribeCurrentTrack();
  72. void _subscribeCurrentTrack();
  73. QString formatTime(int t);
  74. QMediaPlayer* player;
  75. refTrack _currentTrack;
  76. refRadio _radio;
  77. double _volume;
  78. Settings::LoopMode _loopMode;
  79. Settings::NextMode _nextMode;
  80. };