OSDN Git Service

Updated to latest API
authorJaroslav Kysela <perex@perex.cz>
Fri, 7 Sep 2001 09:24:30 +0000 (09:24 +0000)
committerJaroslav Kysela <perex@perex.cz>
Fri, 7 Sep 2001 09:24:30 +0000 (09:24 +0000)
test/control.c

index 70682ba..9fec0ea 100644 (file)
@@ -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);
        }