diff --git a/client/player/file_player.cpp b/client/player/file_player.cpp index fcebe7e1..78d42cb7 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 fb2a7f85..d26eacd5 100644 --- a/client/player/file_player.hpp +++ b/client/player/file_player.hpp @@ -40,6 +40,9 @@ public: 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 cf45fb79..1b87df81 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