mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-12-23 08:56:47 -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_RATE 48000
|
||||||
#define DEFAULT_CHANNELS 2
|
#define DEFAULT_CHANNELS 2
|
||||||
#define DEFAULT_FORMAT "s16"
|
#define DEFAULT_FORMAT "s16"
|
||||||
|
#define DEFAULT_VOLUME 1.0
|
||||||
|
|
||||||
enum mode {
|
enum mode {
|
||||||
mode_none,
|
mode_none,
|
||||||
|
|
@ -99,6 +100,8 @@ struct data {
|
||||||
|
|
||||||
enum spa_audio_format spa_format;
|
enum spa_audio_format spa_format;
|
||||||
|
|
||||||
|
float volume;
|
||||||
|
|
||||||
fill_fn fill;
|
fill_fn fill;
|
||||||
|
|
||||||
uint32_t target_id;
|
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)
|
enum pw_stream_state state, const char *error)
|
||||||
{
|
{
|
||||||
struct data *data = userdata;
|
struct data *data = userdata;
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (data->verbose)
|
if (data->verbose)
|
||||||
printf("stream state changed %s -> %s\n",
|
printf("stream state changed %s -> %s\n",
|
||||||
pw_stream_state_as_string(old),
|
pw_stream_state_as_string(old),
|
||||||
pw_stream_state_as_string(state));
|
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
|
static void
|
||||||
|
|
@ -544,6 +561,7 @@ enum {
|
||||||
OPT_RATE,
|
OPT_RATE,
|
||||||
OPT_CHANNELS,
|
OPT_CHANNELS,
|
||||||
OPT_FORMAT,
|
OPT_FORMAT,
|
||||||
|
OPT_VOLUME,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct option long_options[] = {
|
static const struct option long_options[] = {
|
||||||
|
|
@ -566,6 +584,8 @@ static const struct option long_options[] = {
|
||||||
{"channels", required_argument, NULL, OPT_CHANNELS },
|
{"channels", required_argument, NULL, OPT_CHANNELS },
|
||||||
{"format", required_argument, NULL, OPT_FORMAT },
|
{"format", required_argument, NULL, OPT_FORMAT },
|
||||||
|
|
||||||
|
{"volume", required_argument, NULL, OPT_VOLUME },
|
||||||
|
|
||||||
{NULL, 0, NULL, 0 }
|
{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"
|
" --rate Sample rate (req. for rec) (default %u)\n"
|
||||||
" --channels Number of channels (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"
|
" --format Sample format %s (req. for rec) (default %s)\n"
|
||||||
|
" --volume Stream volume 0-1.0 (default %.3f)\n"
|
||||||
"\n",
|
"\n",
|
||||||
DEFAULT_RATE, DEFAULT_CHANNELS, STR_FMTS, DEFAULT_FORMAT);
|
DEFAULT_RATE, DEFAULT_CHANNELS, STR_FMTS, DEFAULT_FORMAT, DEFAULT_VOLUME);
|
||||||
|
|
||||||
if (!strcmp(name, "pwcat")) {
|
if (!strcmp(name, "pwcat")) {
|
||||||
fprintf(fp,
|
fprintf(fp,
|
||||||
|
|
@ -646,6 +667,9 @@ int main(int argc, char *argv[])
|
||||||
else
|
else
|
||||||
data.mode = mode_none;
|
data.mode = mode_none;
|
||||||
|
|
||||||
|
/* negative means no volume adjustment */
|
||||||
|
data.volume = -1.0;
|
||||||
|
|
||||||
while ((c = getopt_long(argc, argv, "hvprR:", long_options, NULL)) != -1) {
|
while ((c = getopt_long(argc, argv, "hvprR:", long_options, NULL)) != -1) {
|
||||||
|
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
|
@ -733,6 +757,10 @@ int main(int argc, char *argv[])
|
||||||
format = sf_str_to_fmt(optarg);
|
format = sf_str_to_fmt(optarg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case OPT_VOLUME:
|
||||||
|
data.volume = atof(optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "error: unknown option '%c'\n", c);
|
fprintf(stderr, "error: unknown option '%c'\n", c);
|
||||||
goto error_usage;
|
goto error_usage;
|
||||||
|
|
@ -762,6 +790,8 @@ int main(int argc, char *argv[])
|
||||||
data.rate = DEFAULT_RATE;
|
data.rate = DEFAULT_RATE;
|
||||||
if (!data.channels)
|
if (!data.channels)
|
||||||
data.rate = DEFAULT_CHANNELS;
|
data.rate = DEFAULT_CHANNELS;
|
||||||
|
if (data.volume < 0)
|
||||||
|
data.volume = DEFAULT_VOLUME;
|
||||||
if (data.mode == mode_record && !format)
|
if (data.mode == mode_record && !format)
|
||||||
format = sf_str_to_fmt(DEFAULT_FORMAT);
|
format = sf_str_to_fmt(DEFAULT_FORMAT);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue