mirror of
				https://github.com/alsa-project/alsa-lib.git
				synced 2025-11-03 09:01:52 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			81 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include <stdio.h>
 | 
						|
#include <string.h>
 | 
						|
#include "../include/asoundlib.h"
 | 
						|
 | 
						|
int main(void)
 | 
						|
{
 | 
						|
	int idx, idx1, cards, 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;
 | 
						|
	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) {
 | 
						|
			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("  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("  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);
 | 
						|
		}
 | 
						|
		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;
 | 
						|
			}
 | 
						|
			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));
 | 
						|
				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);
 | 
						|
		}
 | 
						|
		snd_ctl_close(handle);
 | 
						|
	}
 | 
						|
	return 0;
 | 
						|
}
 |