1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- #ifndef PLAYER_H
- #define PLAYER_H
- #include <vector>
- #include <string>
- #include <functional>
- #include <atomic>
- #include <mutex>
- #include "Utils.h"
- #include "MercuryManager.h"
- #include "TrackReference.h"
- #include "Session.h"
- #include "SpotifyTrack.h"
- #include "AudioSink.h"
- #include <mutex>
- #include "Queue.h"
- #include "Task.h"
- class Player : public bell::Task {
- private:
- std::shared_ptr<MercuryManager> manager;
- std::shared_ptr<SpotifyTrack> currentTrack = nullptr;
- std::shared_ptr<AudioSink> audioSink;
- std::mutex loadTrackMutex;
- // @TODO: Use some actual structure here
- bell::Queue<std::shared_ptr<SpotifyTrack>> trackQueue;
- void runTask();
- public:
- Player(std::shared_ptr<MercuryManager> manager, std::shared_ptr<AudioSink> audioSink);
- std::function<void()> endOfFileCallback;
- int volume = 255;
- uint32_t logVolume;
- std::atomic<bool> isRunning = false;
- trackChangedCallback trackChanged;
- std::mutex runningMutex;
- void setVolume(uint32_t volume);
- void handleLoad(std::shared_ptr<TrackReference> track, std::function<void()> &trackLoadedCallback, uint32_t position_ms, bool isPaused);
- void pause();
- void cancelCurrentTrack();
- void seekMs(size_t positionMs);
- void feedPCM(std::vector<uint8_t> &data);
- void play();
- void stop();
- };
- #endif
|