1#include "config.h" 2#include <stdio.h> 3#include <string.h> 4#include "../include/asoundlib.h" 5 6int 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