|  | #include <stdio.h> | 
|  | #include <string.h> | 
|  | #include "../include/asoundlib.h" | 
|  |  | 
|  | int main(void) | 
|  | { | 
|  | int idx, dev, err; | 
|  | snd_ctl_t *handle; | 
|  | snd_ctl_card_info_t *info; | 
|  | snd_pcm_info_t *pcminfo; | 
|  | snd_rawmidi_info_t *rawmidiinfo; | 
|  | char str[128]; | 
|  |  | 
|  | 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) { | 
|  | printf("HW info error: %s\n", snd_strerror(err)); | 
|  | continue; | 
|  | } | 
|  | printf("Soundcard #%i:\n", idx + 1); | 
|  | 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("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]); | 
|  | } | 
|  | 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; | 
|  | } | 
|  | 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("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); | 
|  | } | 
|  |  | 
|  | snd_config_update_free_global(); | 
|  | return 0; | 
|  | } |