From c88b2d170bbcd647b43636eb1124997f1fade282 Mon Sep 17 00:00:00 2001 From: badaix Date: Fri, 30 Apr 2021 10:39:45 +0200 Subject: [PATCH] Fix writing "PCM device not found" for file player --- client/player/file_player.cpp | 13 +++++++++++++ client/player/file_player.hpp | 3 +++ client/snapclient.cpp | 8 ++++++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/client/player/file_player.cpp b/client/player/file_player.cpp index fcebe7e12..78d42cb7c 100644 --- a/client/player/file_player.cpp +++ b/client/player/file_player.cpp @@ -33,6 +33,19 @@ namespace player static constexpr auto LOG_TAG = "FilePlayer"; static constexpr auto kDefaultBuffer = 50ms; +static constexpr auto kDescription = "Raw PCM file output"; + +std::vector FilePlayer::pcm_list(const std::string& parameter) +{ + auto params = utils::string::split_pairs(parameter, ',', '='); + string filename; + if (params.find("filename") != params.end()) + filename = params["filename"]; + if (filename.empty()) + filename = "stdout"; + return {PcmDevice{0, filename, kDescription}}; +} + FilePlayer::FilePlayer(boost::asio::io_context& io_context, const ClientSettings::Player& settings, std::shared_ptr stream) : Player(io_context, settings, stream), timer_(io_context), file_(nullptr) diff --git a/client/player/file_player.hpp b/client/player/file_player.hpp index fb2a7f851..d26eacd50 100644 --- a/client/player/file_player.hpp +++ b/client/player/file_player.hpp @@ -40,6 +40,9 @@ class FilePlayer : public Player void start() override; void stop() override; + /// List the dummy file PCM device + static std::vector pcm_list(const std::string& parameter); + protected: void requestAudio(); void loop(); diff --git a/client/snapclient.cpp b/client/snapclient.cpp index cf45fb795..1b87df811 100644 --- a/client/snapclient.cpp +++ b/client/snapclient.cpp @@ -59,6 +59,8 @@ static constexpr auto LOG_TAG = "Snapclient"; PcmDevice getPcmDevice(const std::string& player, const std::string& parameter, const std::string& soundcard) { + LOG(DEBUG, LOG_TAG) << "Trying to get PCM device for player: " << player << ", parameter: " + << ", card: " << soundcard << "\n"; #if defined(HAS_ALSA) || defined(HAS_PULSE) || defined(HAS_WASAPI) vector pcm_devices; #if defined(HAS_ALSA) @@ -73,6 +75,8 @@ PcmDevice getPcmDevice(const std::string& player, const std::string& parameter, if (player == player::WASAPI) pcm_devices = WASAPIPlayer::pcm_list(); #endif + if (player == player::FILE) + return FilePlayer::pcm_list(parameter).front(); try { int soundcardIdx = cpt::stoi(soundcard); @@ -386,8 +390,8 @@ int main(int argc, char** argv) #if defined(HAS_ALSA) if (settings.player.pcm_device.idx == -1) { - cout << "PCM device \"" << pcm_device << "\" not found\n"; - // exit(EXIT_FAILURE); + LOG(ERROR, LOG_TAG) << "PCM device \"" << pcm_device << "\" not found\n"; + // exit(EXIT_FAILURE); } #endif