Make audio backend "file" configurable

This commit is contained in:
badaix 2020-10-05 22:42:56 +02:00
parent db5482b0fb
commit 541d803452
14 changed files with 112 additions and 15 deletions

View file

@ -134,12 +134,11 @@ int main(int argc, char** argv)
auto sample_format = op.add<Value<string>>("", "sampleformat", "resample audio stream to <rate>:<bits>:<channels>", "");
#endif
// audio backend
#if defined(HAS_OBOE) && defined(HAS_OPENSL)
op.add<Value<string>>("", "player", "audio backend (oboe, opensl)", "oboe", &settings.player.player_name);
#else
op.add<Value<string>, Attribute::hidden>("", "player", "audio backend (<empty>, file)", "", &settings.player.player_name);
#endif
auto supported_players = Controller::getSupportedPlayerNames();
string supported_players_str;
for (const auto& supported_player : supported_players)
supported_players_str += (!supported_players_str.empty() ? "|" : "") + supported_player;
op.add<Value<string>>("", "player", supported_players_str + "[:<options>|?]", supported_players.front(), &settings.player.player_name);
// sharing mode
#if defined(HAS_OBOE) || defined(HAS_WASAPI)
@ -318,6 +317,22 @@ int main(int argc, char** argv)
settings.player.sharing_mode = (sharing_mode->value() == "exclusive") ? ClientSettings::SharingMode::exclusive : ClientSettings::SharingMode::shared;
#endif
settings.player.player_name = utils::string::split_left(settings.player.player_name, ':', settings.player.parameter);
if (settings.player.parameter == "?")
{
if (settings.player.player_name == "file")
{
cout << "Options are a comma separated list of:\n"
<< " \"filename:<filename>\" - with <filename> = \"stdout\", \"stderr\" or a filename\n"
<< " \"mode:[w|a]\" - w: write (discarding the content), a: append (keeping the content)\n";
}
else
{
cout << "No options available for \"" << settings.player.player_name << "\n";
}
exit(EXIT_SUCCESS);
}
string mode = utils::string::split_left(mixer_mode->value(), ':', settings.player.mixer.parameter);
if (mode == "software")
settings.player.mixer.mode = ClientSettings::Mixer::Mode::software;