mirror of
https://github.com/alsa-project/alsa-utils
synced 2024-11-09 17:55:43 +01:00
aplay: Add option for specifying subformat
Make subformat first-class citizen by allowing users to specify it just like it is the case for the format. Default to SND_PCM_SUBFORMAT_STD so they are no surprises. Closes: https://github.com/alsa-project/alsa-utils/pull/228 Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
edff9652c0
commit
d55cd9fcd9
1 changed files with 18 additions and 0 deletions
|
@ -101,6 +101,7 @@ static char *command;
|
||||||
static snd_pcm_t *handle;
|
static snd_pcm_t *handle;
|
||||||
static struct {
|
static struct {
|
||||||
snd_pcm_format_t format;
|
snd_pcm_format_t format;
|
||||||
|
snd_pcm_subformat_t subformat;
|
||||||
unsigned int channels;
|
unsigned int channels;
|
||||||
unsigned int rate;
|
unsigned int rate;
|
||||||
} hwparams, rhwparams;
|
} hwparams, rhwparams;
|
||||||
|
@ -216,6 +217,7 @@ _("Usage: %s [OPTION]... [FILE]...\n"
|
||||||
"-t, --file-type TYPE file type (voc, wav, raw or au)\n"
|
"-t, --file-type TYPE file type (voc, wav, raw or au)\n"
|
||||||
"-c, --channels=# channels\n"
|
"-c, --channels=# channels\n"
|
||||||
"-f, --format=FORMAT sample format (case insensitive)\n"
|
"-f, --format=FORMAT sample format (case insensitive)\n"
|
||||||
|
" --subformat=SUBFORMAT sample subformat (case insensitive)\n"
|
||||||
"-r, --rate=# sample rate\n"
|
"-r, --rate=# sample rate\n"
|
||||||
"-d, --duration=# interrupt after # seconds\n"
|
"-d, --duration=# interrupt after # seconds\n"
|
||||||
"-s, --samples=# interrupt after # samples per channel\n"
|
"-s, --samples=# interrupt after # samples per channel\n"
|
||||||
|
@ -434,6 +436,7 @@ enum {
|
||||||
OPT_USE_STRFTIME,
|
OPT_USE_STRFTIME,
|
||||||
OPT_DUMP_HWPARAMS,
|
OPT_DUMP_HWPARAMS,
|
||||||
OPT_FATAL_ERRORS,
|
OPT_FATAL_ERRORS,
|
||||||
|
OPT_SUBFORMAT,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -491,6 +494,7 @@ int main(int argc, char *argv[])
|
||||||
{"file-type", 1, 0, 't'},
|
{"file-type", 1, 0, 't'},
|
||||||
{"channels", 1, 0, 'c'},
|
{"channels", 1, 0, 'c'},
|
||||||
{"format", 1, 0, 'f'},
|
{"format", 1, 0, 'f'},
|
||||||
|
{"subformat", 1, 0, OPT_SUBFORMAT},
|
||||||
{"rate", 1, 0, 'r'},
|
{"rate", 1, 0, 'r'},
|
||||||
{"duration", 1, 0 ,'d'},
|
{"duration", 1, 0 ,'d'},
|
||||||
{"samples", 1, 0, 's'},
|
{"samples", 1, 0, 's'},
|
||||||
|
@ -566,6 +570,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
chunk_size = -1;
|
chunk_size = -1;
|
||||||
rhwparams.format = DEFAULT_FORMAT;
|
rhwparams.format = DEFAULT_FORMAT;
|
||||||
|
rhwparams.subformat = SND_PCM_SUBFORMAT_STD;
|
||||||
rhwparams.rate = DEFAULT_SPEED;
|
rhwparams.rate = DEFAULT_SPEED;
|
||||||
rhwparams.channels = 1;
|
rhwparams.channels = 1;
|
||||||
|
|
||||||
|
@ -635,6 +640,13 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case OPT_SUBFORMAT:
|
||||||
|
rhwparams.subformat = snd_pcm_subformat_value(optarg);
|
||||||
|
if (rhwparams.subformat == SND_PCM_SUBFORMAT_UNKNOWN) {
|
||||||
|
error(_("wrong extended subformat '%s'"), optarg);
|
||||||
|
prg_exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
tmp = parse_long(optarg, &err);
|
tmp = parse_long(optarg, &err);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
|
@ -1372,6 +1384,11 @@ static void set_params(void)
|
||||||
show_available_sample_formats(params);
|
show_available_sample_formats(params);
|
||||||
prg_exit(EXIT_FAILURE);
|
prg_exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
err = snd_pcm_hw_params_set_subformat(handle, params, hwparams.subformat);
|
||||||
|
if (err < 0) {
|
||||||
|
error(_("Sample subformat not available"));
|
||||||
|
prg_exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
err = snd_pcm_hw_params_set_channels(handle, params, hwparams.channels);
|
err = snd_pcm_hw_params_set_channels(handle, params, hwparams.channels);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
error(_("Channels count non available"));
|
error(_("Channels count non available"));
|
||||||
|
@ -2404,6 +2421,7 @@ static void voc_play(int fd, int ofs, char *name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
hwparams.format = DEFAULT_FORMAT;
|
hwparams.format = DEFAULT_FORMAT;
|
||||||
|
hwparams.subformat = SND_PCM_SUBFORMAT_STD;
|
||||||
hwparams.channels = 1;
|
hwparams.channels = 1;
|
||||||
hwparams.rate = DEFAULT_SPEED;
|
hwparams.rate = DEFAULT_SPEED;
|
||||||
set_params();
|
set_params();
|
||||||
|
|
Loading…
Reference in a new issue