static snd_pcm_t *handle;
static struct {
snd_pcm_format_t format;
+ snd_pcm_subformat_t subformat;
unsigned int channels;
unsigned int rate;
} hwparams, rhwparams;
"-t, --file-type TYPE file type (voc, wav, raw or au)\n"
"-c, --channels=# channels\n"
"-f, --format=FORMAT sample format (case insensitive)\n"
+" --subformat=SUBFORMAT sample subformat (case insensitive)\n"
"-r, --rate=# sample rate\n"
"-d, --duration=# interrupt after # seconds\n"
"-s, --samples=# interrupt after # samples per channel\n"
OPT_USE_STRFTIME,
OPT_DUMP_HWPARAMS,
OPT_FATAL_ERRORS,
+ OPT_SUBFORMAT,
};
/*
{"file-type", 1, 0, 't'},
{"channels", 1, 0, 'c'},
{"format", 1, 0, 'f'},
+ {"subformat", 1, 0, OPT_SUBFORMAT},
{"rate", 1, 0, 'r'},
{"duration", 1, 0 ,'d'},
{"samples", 1, 0, 's'},
chunk_size = -1;
rhwparams.format = DEFAULT_FORMAT;
+ rhwparams.subformat = SND_PCM_SUBFORMAT_STD;
rhwparams.rate = DEFAULT_SPEED;
rhwparams.channels = 1;
}
}
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':
tmp = parse_long(optarg, &err);
if (err < 0) {
show_available_sample_formats(params);
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);
if (err < 0) {
error(_("Channels count non available"));
}
}
hwparams.format = DEFAULT_FORMAT;
+ hwparams.subformat = SND_PCM_SUBFORMAT_STD;
hwparams.channels = 1;
hwparams.rate = DEFAULT_SPEED;
set_params();