From 648bbe53e6beb362d84d8bd243ce99ba524b138a Mon Sep 17 00:00:00 2001 From: Simon Weidacher Date: Mon, 3 Jan 2022 23:33:23 +0100 Subject: [PATCH] Wip. --- device/main/AudioPlayer.cpp | 12 ++++++++++-- device/main/AudioPlayer.hpp | 4 +++- device/main/Tag.cpp | 13 +++++++++++++ device/main/Tag.hpp | 3 +++ device/main/TagPlayerControl.cpp | 14 ++++++++++---- device/main/TagPlayerControl.hpp | 3 +++ 6 files changed, 42 insertions(+), 7 deletions(-) diff --git a/device/main/AudioPlayer.cpp b/device/main/AudioPlayer.cpp index e24f29f..dd796d1 100644 --- a/device/main/AudioPlayer.cpp +++ b/device/main/AudioPlayer.cpp @@ -12,12 +12,12 @@ AudioPlayer::AudioPlayer() { esp_audio_vol_set(playerHandle, 50); } -void AudioPlayer::play(std::string uri) { +void AudioPlayer::play(std::string uri, int position = 0) { if (isLastUri(uri)) { esp_player_music_resume(); } else { esp_player_music_stop(); - esp_player_sdcard_music_play(uri.c_str(), 0); + esp_player_sdcard_music_play(uri.c_str(), position); lastUri = std::string(uri); } } @@ -28,4 +28,12 @@ void AudioPlayer::pause() { bool AudioPlayer::isLastUri(std::string uri) { return lastUri == uri; +} + +int AudioPlayer::getPosition() { + int position; + + esp_player_pos_get(&position); + + return position; } \ No newline at end of file diff --git a/device/main/AudioPlayer.hpp b/device/main/AudioPlayer.hpp index cfd5719..3938a69 100644 --- a/device/main/AudioPlayer.hpp +++ b/device/main/AudioPlayer.hpp @@ -8,8 +8,10 @@ class AudioPlayer { public: AudioPlayer(); - void play(std::string uri); + + void play(std::string uri, int position); void pause(); + int getPosition(); private: bool isLastUri(std::string uri); diff --git a/device/main/Tag.cpp b/device/main/Tag.cpp index 29cbe2d..935dafd 100644 --- a/device/main/Tag.cpp +++ b/device/main/Tag.cpp @@ -21,6 +21,8 @@ * } */ +Tag::Tag() {} + Tag::Tag(char* tagId): Tag(std::string(tagId)) { } @@ -29,6 +31,15 @@ Tag::Tag(std::string tagId): tagId(tagId) { this->playlist = std::vector(); } +void Tag::setCurrentPosition(uint32_t fileIndex, uint32_t position) { + this->currentFileIndex = fileIndex; + this->currentFilePosition = position; +} + +int Tag::getCurrentPosition() { + return this->currentFilePosition; +} + std::string Tag::getNextLink() { return this->playlist.at(this->currentFileIndex); } @@ -90,6 +101,8 @@ void Tag::read() { void Tag::write() { std::string contents = createFileContents(); + std::cout << contents << std::endl; + std::string filePath = getFilePath(); std::ofstream file(filePath); diff --git a/device/main/Tag.hpp b/device/main/Tag.hpp index 9df1e51..5606484 100644 --- a/device/main/Tag.hpp +++ b/device/main/Tag.hpp @@ -11,12 +11,15 @@ class Tag { uint32_t currentFilePosition{0}; public: + Tag(); Tag(std::string tagId); Tag(char* tagId); void read(); void write(); bool isLinked(); std::string getNextLink(); + void setCurrentPosition(uint32_t fileIndex, uint32_t position); + int getCurrentPosition(); private: std::string createFileContents(); diff --git a/device/main/TagPlayerControl.cpp b/device/main/TagPlayerControl.cpp index 484700a..6b60f88 100644 --- a/device/main/TagPlayerControl.cpp +++ b/device/main/TagPlayerControl.cpp @@ -20,16 +20,22 @@ void TagPlayerControl::onTagChanged(char* tagId) { if (tagId == NULL) { // tag has been removed. stop playback audioPlayer->pause(); + storePosition(); } else { playTag(tagId); } } void TagPlayerControl::playTag(char* tagId) { - Tag tag(tagId); - tag.read(); + currentTag = Tag(tagId); + currentTag.read(); - if (tag.isLinked()) { - audioPlayer->play(tag.getNextLink()); + if (currentTag.isLinked()) { + audioPlayer->play(currentTag.getNextLink(), currentTag.getCurrentPosition()); } +} + +void TagPlayerControl::storePosition() { + currentTag.setCurrentPosition(0, audioPlayer->getPosition()); + currentTag.write(); } \ No newline at end of file diff --git a/device/main/TagPlayerControl.hpp b/device/main/TagPlayerControl.hpp index e24271a..8e249e0 100644 --- a/device/main/TagPlayerControl.hpp +++ b/device/main/TagPlayerControl.hpp @@ -2,9 +2,11 @@ #include #include "AudioPlayer.hpp" +#include "Tag.hpp" class TagPlayerControl { std::shared_ptr audioPlayer; + Tag currentTag; public: TagPlayerControl(std::shared_ptr player); @@ -13,4 +15,5 @@ class TagPlayerControl { private: void playTag(char* tagId); + void storePosition(); }; \ No newline at end of file