Gate playback on the existence of /.tangara-tts/.

Also, clang-format previous changes in provider.hpp.
custom
Tursiae 2 months ago
parent 49e92c295e
commit eba8825d9f
  1. 4
      src/tangara/tts/player.cpp
  2. 33
      src/tangara/tts/provider.cpp
  3. 4
      src/tangara/tts/provider.hpp

@ -44,7 +44,11 @@ auto Player::playFile(const std::string& text, const std::string& file)
stream_playing_ = true; stream_playing_ = true;
} }
// Only attempt playback if the card contains samples.
// We gate this on directory existence to avoid spamming the logs.
if (Provider::SamplesOnSDCard()) {
openAndDecode(text, file); openAndDecode(text, file);
}
if (!stream_cancelled_) { if (!stream_cancelled_) {
events::Audio().Dispatch(audio::TtsPlaybackChanged{.is_playing = false}); events::Audio().Dispatch(audio::TtsPlaybackChanged{.is_playing = false});

@ -75,4 +75,37 @@ auto Provider::feed(const Event& e) -> void {
} }
} }
bool Provider::SamplesOnSDCard() {
// Does the /.tangara-tts/ path exist on the SD card?
FILINFO fi;
FRESULT status = f_stat(kTtsPath, &fi);
switch (status) {
case FR_NO_PATH:
case FR_NO_FILE:
case FR_NO_FILESYSTEM:
// If the SD card isn't mounted, or no matching file, then no samples.
return false;
case FR_OK:
// If /.tangara-tts exists, let's check it out first.
break;
default:
// If things look odd, then assume samples aren't present.
ESP_LOGW(kTag, "got unexpected %d status from f_stat(\"%s\")", status,
kTtsPath);
return false;
}
// If /.tangara-tts exists and is a directory, it probably contains samples.
if (fi.fattrib & AM_DIR)
return true;
// Otherwise, for example, if it's a file, assume no samples present.
ESP_LOGW(kTag, "got unexpected file attributes for %s: %d", kTtsPath,
fi.fattrib);
return false;
}
} // namespace tts } // namespace tts

@ -11,9 +11,9 @@
#include <string> #include <string>
#include <variant> #include <variant>
#include "drivers/nvs.hpp"
#include "tts/events.hpp" #include "tts/events.hpp"
#include "tts/player.hpp" #include "tts/player.hpp"
#include "drivers/nvs.hpp"
namespace tts { namespace tts {
@ -34,6 +34,8 @@ class Provider {
Provider(const Provider&) = delete; Provider(const Provider&) = delete;
Provider& operator=(const Provider&) = delete; Provider& operator=(const Provider&) = delete;
static bool SamplesOnSDCard();
private: private:
drivers::NvsStorage& nvs_; drivers::NvsStorage& nvs_;
std::unique_ptr<Player> player_; std::unique_ptr<Player> player_;

Loading…
Cancel
Save