mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-06 13:30:01 -05:00
pwcat: Add volume control option.
Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
This commit is contained in:
parent
588e9562f9
commit
f0d5d7ec09
1 changed files with 31 additions and 1 deletions
|
|
@ -51,6 +51,7 @@
|
|||
#define DEFAULT_RATE 48000
|
||||
#define DEFAULT_CHANNELS 2
|
||||
#define DEFAULT_FORMAT "s16"
|
||||
#define DEFAULT_VOLUME 1.0
|
||||
|
||||
enum mode {
|
||||
mode_none,
|
||||
|
|
@ -99,6 +100,8 @@ struct data {
|
|||
|
||||
enum spa_audio_format spa_format;
|
||||
|
||||
float volume;
|
||||
|
||||
fill_fn fill;
|
||||
|
||||
uint32_t target_id;
|
||||
|
|
@ -435,11 +438,25 @@ on_state_changed(void *userdata, enum pw_stream_state old,
|
|||
enum pw_stream_state state, const char *error)
|
||||
{
|
||||
struct data *data = userdata;
|
||||
int ret;
|
||||
|
||||
if (data->verbose)
|
||||
printf("stream state changed %s -> %s\n",
|
||||
pw_stream_state_as_string(old),
|
||||
pw_stream_state_as_string(state));
|
||||
|
||||
if (state == PW_STREAM_STATE_STREAMING) {
|
||||
if (data->verbose)
|
||||
printf("stream node %"PRIu32"\n",
|
||||
pw_stream_get_node_id(data->stream));
|
||||
ret = pw_stream_set_control(data->stream,
|
||||
SPA_PROP_volume, 1, &data->volume,
|
||||
0);
|
||||
if (data->verbose)
|
||||
printf("set stream volume to %.3f - %s\n", data->volume,
|
||||
ret == 0 ? "success" : "FAILED");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -544,6 +561,7 @@ enum {
|
|||
OPT_RATE,
|
||||
OPT_CHANNELS,
|
||||
OPT_FORMAT,
|
||||
OPT_VOLUME,
|
||||
};
|
||||
|
||||
static const struct option long_options[] = {
|
||||
|
|
@ -566,6 +584,8 @@ static const struct option long_options[] = {
|
|||
{"channels", required_argument, NULL, OPT_CHANNELS },
|
||||
{"format", required_argument, NULL, OPT_FORMAT },
|
||||
|
||||
{"volume", required_argument, NULL, OPT_VOLUME },
|
||||
|
||||
{NULL, 0, NULL, 0 }
|
||||
};
|
||||
|
||||
|
|
@ -602,8 +622,9 @@ static void show_usage(const char *name, bool is_error)
|
|||
" --rate Sample rate (req. for rec) (default %u)\n"
|
||||
" --channels Number of channels (req. for rec) (default %u)\n"
|
||||
" --format Sample format %s (req. for rec) (default %s)\n"
|
||||
" --volume Stream volume 0-1.0 (default %.3f)\n"
|
||||
"\n",
|
||||
DEFAULT_RATE, DEFAULT_CHANNELS, STR_FMTS, DEFAULT_FORMAT);
|
||||
DEFAULT_RATE, DEFAULT_CHANNELS, STR_FMTS, DEFAULT_FORMAT, DEFAULT_VOLUME);
|
||||
|
||||
if (!strcmp(name, "pwcat")) {
|
||||
fprintf(fp,
|
||||
|
|
@ -646,6 +667,9 @@ int main(int argc, char *argv[])
|
|||
else
|
||||
data.mode = mode_none;
|
||||
|
||||
/* negative means no volume adjustment */
|
||||
data.volume = -1.0;
|
||||
|
||||
while ((c = getopt_long(argc, argv, "hvprR:", long_options, NULL)) != -1) {
|
||||
|
||||
switch (c) {
|
||||
|
|
@ -733,6 +757,10 @@ int main(int argc, char *argv[])
|
|||
format = sf_str_to_fmt(optarg);
|
||||
break;
|
||||
|
||||
case OPT_VOLUME:
|
||||
data.volume = atof(optarg);
|
||||
break;
|
||||
|
||||
default:
|
||||
fprintf(stderr, "error: unknown option '%c'\n", c);
|
||||
goto error_usage;
|
||||
|
|
@ -762,6 +790,8 @@ int main(int argc, char *argv[])
|
|||
data.rate = DEFAULT_RATE;
|
||||
if (!data.channels)
|
||||
data.rate = DEFAULT_CHANNELS;
|
||||
if (data.volume < 0)
|
||||
data.volume = DEFAULT_VOLUME;
|
||||
if (data.mode == mode_record && !format)
|
||||
format = sf_str_to_fmt(DEFAULT_FORMAT);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue