Player.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #ifndef PLAYER_H
  2. #define PLAYER_H
  3. #include <vector>
  4. #include <string>
  5. #include <functional>
  6. #include <atomic>
  7. #include <mutex>
  8. #include "Utils.h"
  9. #include "MercuryManager.h"
  10. #include "TrackReference.h"
  11. #include "Session.h"
  12. #include "SpotifyTrack.h"
  13. #include "AudioSink.h"
  14. #include <mutex>
  15. #include "Queue.h"
  16. #include "Task.h"
  17. class Player : public bell::Task {
  18. private:
  19. std::shared_ptr<MercuryManager> manager;
  20. std::shared_ptr<SpotifyTrack> currentTrack = nullptr;
  21. std::shared_ptr<AudioSink> audioSink;
  22. std::mutex loadTrackMutex;
  23. // @TODO: Use some actual structure here
  24. bell::Queue<std::shared_ptr<SpotifyTrack>> trackQueue;
  25. void runTask();
  26. public:
  27. Player(std::shared_ptr<MercuryManager> manager, std::shared_ptr<AudioSink> audioSink);
  28. std::function<void()> endOfFileCallback;
  29. int volume = 255;
  30. uint32_t logVolume;
  31. std::atomic<bool> isRunning = false;
  32. trackChangedCallback trackChanged;
  33. std::mutex runningMutex;
  34. void setVolume(uint32_t volume);
  35. void handleLoad(std::shared_ptr<TrackReference> track, std::function<void()> &trackLoadedCallback, uint32_t position_ms, bool isPaused);
  36. void pause();
  37. void cancelCurrentTrack();
  38. void seekMs(size_t positionMs);
  39. void feedPCM(std::vector<uint8_t> &data);
  40. void play();
  41. void stop();
  42. };
  43. #endif