1 #include "config.h"
2 #include <stdio.h>
3 #include <string.h>
4 #include "../include/asoundlib.h"
5
main(void)6 int main(void)
7 {
8 int idx, dev, err;
9 snd_ctl_t *handle;
10 snd_ctl_card_info_t *info;
11 snd_pcm_info_t *pcminfo;
12 snd_rawmidi_info_t *rawmidiinfo;
13 char str[128];
14
15 snd_ctl_card_info_alloca(&info);
16 snd_pcm_info_alloca(&pcminfo);
17 snd_rawmidi_info_alloca(&rawmidiinfo);
18
19 idx = -1;
20 while (1) {
21 if ((err = snd_card_next(&idx)) < 0) {
22 printf("Card next error: %s\n", snd_strerror(err));
23 break;
24 }
25 if (idx < 0)
26 break;
27 sprintf(str, "hw:CARD=%i", idx);
28 if ((err = snd_ctl_open(&handle, str, 0)) < 0) {
29 printf("Open error: %s\n", snd_strerror(err));
30 continue;
31 }
32 if ((err = snd_ctl_card_info(handle, info)) < 0) {
33 printf("HW info error: %s\n", snd_strerror(err));
34 continue;
35 }
36 printf("Soundcard #%i:\n", idx + 1);
37 printf(" card - %i\n", snd_ctl_card_info_get_card(info));
38 printf(" id - '%s'\n", snd_ctl_card_info_get_id(info));
39 printf(" driver - '%s'\n", snd_ctl_card_info_get_driver(info));
40 printf(" name - '%s'\n", snd_ctl_card_info_get_name(info));
41 printf(" longname - '%s'\n", snd_ctl_card_info_get_longname(info));
42 printf(" mixername - '%s'\n", snd_ctl_card_info_get_mixername(info));
43 printf(" components - '%s'\n", snd_ctl_card_info_get_components(info));
44 dev = -1;
45 while (1) {
46 snd_pcm_sync_id_t sync;
47 if ((err = snd_ctl_pcm_next_device(handle, &dev)) < 0) {
48 printf(" PCM next device error: %s\n", snd_strerror(err));
49 break;
50 }
51 if (dev < 0)
52 break;
53 snd_pcm_info_set_device(pcminfo, dev);
54 snd_pcm_info_set_subdevice(pcminfo, 0);
55 snd_pcm_info_set_stream(pcminfo, SND_PCM_STREAM_PLAYBACK);
56 if ((err = snd_ctl_pcm_info(handle, pcminfo)) < 0) {
57 printf(" PCM info error: %s\n", snd_strerror(err));
58 continue;
59 }
60 printf("PCM info, device #%i:\n", dev);
61 printf(" device - %i\n", snd_pcm_info_get_device(pcminfo));
62 printf(" subdevice - %i\n", snd_pcm_info_get_subdevice(pcminfo));
63 printf(" stream - %i\n", snd_pcm_info_get_stream(pcminfo));
64 printf(" card - %i\n", snd_pcm_info_get_card(pcminfo));
65 printf(" id - '%s'\n", snd_pcm_info_get_id(pcminfo));
66 printf(" name - '%s'\n", snd_pcm_info_get_name(pcminfo));
67 printf(" subdevice name - '%s'\n", snd_pcm_info_get_subdevice_name(pcminfo));
68 printf(" class - 0x%x\n", snd_pcm_info_get_class(pcminfo));
69 printf(" subclass - 0x%x\n", snd_pcm_info_get_subclass(pcminfo));
70 printf(" subdevices count - %i\n", snd_pcm_info_get_subdevices_count(pcminfo));
71 printf(" subdevices avail - %i\n", snd_pcm_info_get_subdevices_avail(pcminfo));
72 sync = snd_pcm_info_get_sync(pcminfo);
73 printf(" sync - 0x%x,0x%x,0x%x,0x%x\n", sync.id32[0], sync.id32[1], sync.id32[2], sync.id32[3]);
74 }
75 dev = -1;
76 while (1) {
77 if ((err = snd_ctl_rawmidi_next_device(handle, &dev)) < 0) {
78 printf(" RAWMIDI next device error: %s\n", snd_strerror(err));
79 break;
80 }
81 if (dev < 0)
82 break;
83 snd_rawmidi_info_set_device(rawmidiinfo, dev);
84 snd_rawmidi_info_set_subdevice(rawmidiinfo, 0);
85 snd_rawmidi_info_set_stream(rawmidiinfo, SND_RAWMIDI_STREAM_OUTPUT);
86 if ((err = snd_ctl_rawmidi_info(handle, rawmidiinfo)) < 0) {
87 printf(" RAWMIDI info error: %s\n", snd_strerror(err));
88 continue;
89 }
90 printf("RAWMIDI info, device #%i:\n", dev);
91 printf(" device - %i\n", snd_rawmidi_info_get_device(rawmidiinfo));
92 printf(" subdevice - %i\n", snd_rawmidi_info_get_subdevice(rawmidiinfo));
93 printf(" stream - %i\n", snd_rawmidi_info_get_stream(rawmidiinfo));
94 printf(" card - %i\n", snd_rawmidi_info_get_card(rawmidiinfo));
95 printf(" flags - 0x%x\n", snd_rawmidi_info_get_flags(rawmidiinfo));
96 printf(" id - '%s'\n", snd_rawmidi_info_get_id(rawmidiinfo));
97 printf(" name - '%s'\n", snd_rawmidi_info_get_name(rawmidiinfo));
98 printf(" subname - '%s'\n", snd_rawmidi_info_get_subdevice_name(rawmidiinfo));
99 printf(" subdevices count - %i\n", snd_rawmidi_info_get_subdevices_count(rawmidiinfo));
100 printf(" subdevices avail - %i\n", snd_rawmidi_info_get_subdevices_avail(rawmidiinfo));
101 }
102 snd_ctl_close(handle);
103 }
104
105 snd_config_update_free_global();
106 return 0;
107 }
108