}
if (!cardname) {
- unsigned int card_mask, idx;
+ unsigned int card, first = 1;
- card_mask = snd_cards_mask();
- if (!card_mask) {
- error("No soundcards found...");
- return 1;
- }
- for (idx = 0; idx < 32; idx++) {
- if (card_mask & (1 << idx)) { /* find each installed soundcards */
- if ((err = get_controls(idx, config))) {
- return err;
+ card = -1;
+ /* find each installed soundcards */
+ while (1) {
+ if (snd_card_next(&card) < 0)
+ break;
+ if (card < 0) {
+ if (first) {
+ error("No soundcards found...");
+ return 1;
}
+ break;
}
+ first = 0;
+ if ((err = get_controls(card, config)))
+ return err;
}
} else {
int cardno;
}
if (!cardname) {
- unsigned int card_mask, idx;
+ unsigned int card, first = 1;
- card_mask = snd_cards_mask();
- if (!card_mask) {
- error("No soundcards found...");
- return 1;
- }
- for (idx = 0; idx < 32; idx++) {
- if (card_mask & (1 << idx)) { /* find each installed soundcards */
- if ((err = set_controls(idx, config))) {
- return err;
+ card = -1;
+ /* find each installed soundcards */
+ while (1) {
+ if (snd_card_next(&card) < 0)
+ break;
+ if (card < 0) {
+ if (first) {
+ error("No soundcards found...");
+ return 1;
}
+ break;
}
+ first = 0;
+ if ((err = set_controls(card, config)))
+ return err;
}
} else {
int cardno;
case '?':
case 'h':
fprintf (stderr, "%s %s\n", PRGNAME_UPPER, VERSION);
- fprintf (stderr, "Usage: %s [-c <card: 0...%i>] [-z]\n", PRGNAME, snd_cards () - 1);
+ fprintf (stderr, "Usage: %s [-c <card: 0...7>] [-z]\n", PRGNAME);
mixer_abort (ERR_NONE, "", 0);
case 'c':
card_id = optarg;
{
snd_ctl_t *handle;
int card, err, dev, idx;
- unsigned int mask;
snd_ctl_hw_info_t info;
snd_pcm_info_t pcminfo;
- mask = snd_cards_mask();
- if (!mask) {
+ card = -1;
+ if (snd_card_next(&card) < 0 || card < 0) {
error("no soundcards found...");
return;
}
- for (card = 0; card < SND_CARDS; card++) {
+ while (card >= 0) {
char name[32];
- if (!(mask & (1 << card)))
- continue;
sprintf(name, "hw:%d", card);
if ((err = snd_ctl_open(&handle, name)) < 0) {
error("control open (%i): %s", card, snd_strerror(err));
snd_ctl_close(handle);
continue;
}
- for (dev = 0; dev < info.pcmdevs; dev++) {
+ dev = -1;
+ while (1) {
+ if (snd_ctl_pcm_next_device(handle, &dev)<0)
+ error("snd_ctl_pcm_next_device");
+ if (dev < 0)
+ break;
pcminfo.device = dev;
pcminfo.stream = -stream - 1;
pcminfo.subdevice = -1;
}
}
snd_ctl_close(handle);
+ if (snd_card_next(&card) < 0) {
+ error("snd_card_next");
+ break;
+ }
}
}