From 3e6f42350144d9592b611cbc61aa4f2790523dcc Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Fri, 7 Sep 2001 09:24:30 +0000 Subject: [PATCH] Updated to latest API --- test/control.c | 129 +++++++++++++++++++++++++++++-------------------- 1 file changed, 76 insertions(+), 53 deletions(-) diff --git a/test/control.c b/test/control.c index 70682bad..9fec0ea7 100644 --- a/test/control.c +++ b/test/control.c @@ -4,76 +4,99 @@ int main(void) { - int idx, idx1, cards, err; + int idx, dev, err; snd_ctl_t *handle; - snd_ctl_card_info_t info; - snd_pcm_info_t pcminfo; - snd_mixer_info_t mixerinfo; - snd_rawmidi_info_t rawmidiinfo; + snd_ctl_card_info_t *info; + snd_pcm_info_t *pcminfo; + snd_rawmidi_info_t *rawmidiinfo; char str[128]; - cards = snd_cards(); - printf("Detected %i soundcard%s...\n", cards, cards != 1 ? "s" : ""); - if (cards <= 0) { - printf("Giving up...\n"); - return 0; - } - for (idx = 0; idx < cards; idx++) { - if ((err = snd_ctl_open(&handle, idx)) < 0) { + snd_ctl_card_info_alloca(&info); + snd_pcm_info_alloca(&pcminfo); + snd_rawmidi_info_alloca(&rawmidiinfo); + + idx = -1; + while (1) { + if ((err = snd_card_next(&idx)) < 0) { + printf("Card next error: %s\n", snd_strerror(err)); + break; + } + if (idx < 0) + break; + sprintf(str, "hw:CARD=%i", idx); + if ((err = snd_ctl_open(&handle, str, 0)) < 0) { printf("Open error: %s\n", snd_strerror(err)); continue; } - if ((err = snd_ctl_card_info(handle, &info)) < 0) { + if ((err = snd_ctl_card_info(handle, info)) < 0) { printf("HW info error: %s\n", snd_strerror(err)); continue; } printf("Soundcard #%i:\n", idx + 1); - printf(" type - %i\n", info.type); - printf(" pcm devs - %i\n", info.pcmdevs); - printf(" mixer devs - %i\n", info.mixerdevs); - printf(" midi devs - %i\n", info.mididevs); - memset(str, 0, sizeof(str)); - strncpy(str, info.id, sizeof(info.id)); - printf(" id - '%s'\n", str); - printf(" abbreviation - '%s'\n", info.abbreviation); - printf(" name - '%s'\n", info.name); - printf(" longname - '%s'\n", info.longname); - for (idx1 = 0; idx1 < info.pcmdevs; idx1++) { - printf("PCM info, device #%i:\n", idx1); - if ((err = snd_ctl_pcm_info(handle, idx1, &pcminfo)) < 0) { + printf(" card - %i\n", snd_ctl_card_info_get_card(info)); + printf(" id - '%s'\n", snd_ctl_card_info_get_id(info)); + printf(" driver - '%s'\n", snd_ctl_card_info_get_driver(info)); + printf(" name - '%s'\n", snd_ctl_card_info_get_name(info)); + printf(" longname - '%s'\n", snd_ctl_card_info_get_longname(info)); + printf(" mixername - '%s'\n", snd_ctl_card_info_get_mixername(info)); + printf(" components - '%s'\n", snd_ctl_card_info_get_components(info)); + dev = -1; + while (1) { + snd_pcm_sync_id_t sync; + if ((err = snd_ctl_pcm_next_device(handle, &dev)) < 0) { + printf(" PCM next device error: %s\n", snd_strerror(err)); + break; + } + if (dev < 0) + break; + snd_pcm_info_set_device(pcminfo, dev); + snd_pcm_info_set_subdevice(pcminfo, 0); + snd_pcm_info_set_stream(pcminfo, SND_PCM_STREAM_PLAYBACK); + if ((err = snd_ctl_pcm_info(handle, pcminfo)) < 0) { printf(" PCM info error: %s\n", snd_strerror(err)); continue; } - printf(" type - %i\n", pcminfo.type); - printf(" flags - 0x%x\n", pcminfo.flags); - printf(" id - '%s'\n", pcminfo.id); - printf(" name - '%s'\n", pcminfo.name); - printf(" playback - %i\n", pcminfo.playback); - printf(" capture - %i\n", pcminfo.capture); + printf("PCM info, device #%i:\n", dev); + printf(" device - %i\n", snd_pcm_info_get_device(pcminfo)); + printf(" subdevice - %i\n", snd_pcm_info_get_subdevice(pcminfo)); + printf(" stream - %i\n", snd_pcm_info_get_stream(pcminfo)); + printf(" card - %i\n", snd_pcm_info_get_card(pcminfo)); + printf(" id - '%s'\n", snd_pcm_info_get_id(pcminfo)); + printf(" name - '%s'\n", snd_pcm_info_get_name(pcminfo)); + printf(" subdevice name - '%s'\n", snd_pcm_info_get_subdevice_name(pcminfo)); + printf(" class - 0x%x\n", snd_pcm_info_get_class(pcminfo)); + printf(" subclass - 0x%x\n", snd_pcm_info_get_subclass(pcminfo)); + printf(" subdevices count - %i\n", snd_pcm_info_get_subdevices_count(pcminfo)); + printf(" subdevices avail - %i\n", snd_pcm_info_get_subdevices_avail(pcminfo)); + sync = snd_pcm_info_get_sync(pcminfo); + printf(" sync - 0x%x,0x%x,0x%x,0x%x\n", sync.id32[0], sync.id32[1], sync.id32[2], sync.id32[3]); } - for (idx1 = 0; idx1 < info.mixerdevs; idx1++) { - printf("MIXER info, device #%i:\n", idx1); - if ((err = snd_ctl_mixer_info(handle, idx1, &mixerinfo)) < 0) { - printf(" MIXER info error: %s\n", snd_strerror(err)); - continue; + dev = -1; + while (1) { + if ((err = snd_ctl_rawmidi_next_device(handle, &dev)) < 0) { + printf(" RAWMIDI next device error: %s\n", snd_strerror(err)); + break; } - printf(" type - %i\n", mixerinfo.type); - printf(" elements - %i\n", mixerinfo.elements); - printf(" groups - %i\n", mixerinfo.groups); - printf(" attrib - 0x%x\n", mixerinfo.attrib); - printf(" id - '%s'\n", mixerinfo.id); - printf(" name - '%s'\n", mixerinfo.name); - } - for (idx1 = 0; idx1 < info.mididevs; idx1++) { - printf("RAWMIDI info, device #%i:\n", idx1); - if ((err = snd_ctl_rawmidi_info(handle, idx1, &rawmidiinfo)) < 0) { - printf(" MIXER info error: %s\n", snd_strerror(err)); + if (dev < 0) + break; + snd_rawmidi_info_set_device(rawmidiinfo, dev); + snd_rawmidi_info_set_subdevice(rawmidiinfo, 0); + snd_rawmidi_info_set_stream(rawmidiinfo, SND_RAWMIDI_STREAM_OUTPUT); + if ((err = snd_ctl_rawmidi_info(handle, rawmidiinfo)) < 0) { + printf(" RAWMIDI info error: %s\n", snd_strerror(err)); continue; } - printf(" type - %i\n", rawmidiinfo.type); - printf(" flags - 0x%x\n", rawmidiinfo.flags); - printf(" id - '%s'\n", rawmidiinfo.id); - printf(" name - '%s'\n", rawmidiinfo.name); + printf("RAWMIDI info, device #%i:\n", dev); + printf(" device - %i\n", snd_rawmidi_info_get_device(rawmidiinfo)); + printf(" subdevice - %i\n", snd_rawmidi_info_get_subdevice(rawmidiinfo)); + printf(" stream - %i\n", snd_rawmidi_info_get_stream(rawmidiinfo)); + printf(" card - %i\n", snd_rawmidi_info_get_card(rawmidiinfo)); + printf(" flags - 0x%x\n", snd_rawmidi_info_get_flags(rawmidiinfo)); + printf(" id - '%s'\n", snd_rawmidi_info_get_id(rawmidiinfo)); + printf(" name - '%s'\n", snd_rawmidi_info_get_name(rawmidiinfo)); + printf(" subname - '%s'\n", snd_rawmidi_info_get_subdevice_name(rawmidiinfo)); + printf(" subdevices count - %i\n", snd_rawmidi_info_get_subdevices_count(rawmidiinfo)); + printf(" subdevices avail - %i\n", snd_rawmidi_info_get_subdevices_avail(rawmidiinfo)); } snd_ctl_close(handle); } -- 2.47.1