mirror of
				https://github.com/alsa-project/alsa-lib.git
				synced 2025-10-29 05:40:25 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			60 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <stdio.h>
 | |
| #include <string.h>
 | |
| #include "../include/asoundlib.h"
 | |
| 
 | |
| static void mixer_test( int card, int device )
 | |
| {
 | |
|   int err, channels;
 | |
|   void *handle;
 | |
|   snd_mixer_info_t info;
 | |
|   
 | |
|   if ( (err = snd_mixer_open( &handle, card, device)) < 0 ) {
 | |
|     printf( "Mixer open error: %s\n", snd_strerror( err ) );
 | |
|     return;
 | |
|   }
 | |
|   printf( "Mixer %i/%i open ok...\n", card, device );
 | |
|   channels = snd_mixer_channels( handle );
 | |
|   if ( channels < 0 ) {
 | |
|     printf( "Mixer channels error: %s\n", snd_strerror( channels ) );
 | |
|     return;
 | |
|   }
 | |
|   printf( "  Mixer have %i channel%s.\n", channels, channels > 1 ? "s" : "" );
 | |
|   if ( (err = snd_mixer_info( handle, &info )) < 0 ) {
 | |
|     printf( "Mixer info error: %s\n", snd_strerror( err ) );
 | |
|     return;
 | |
|   }  
 | |
|   printf( "  Info:\n" );
 | |
|   printf( "    type - %i\n", info.type );
 | |
|   printf( "    channels - %i\n", info.channels );
 | |
|   printf( "    caps - 0x%x\n", info.caps );
 | |
|   printf( "    id - '%s'\n", info.id );
 | |
|   printf( "    name - '%s'\n", info.name );
 | |
|   snd_mixer_close( handle );
 | |
| }
 | |
| 
 | |
| void main( void )
 | |
| {
 | |
|   int idx, idx1, cards, err;
 | |
|   void *handle;
 | |
|   struct snd_ctl_hw_info info;
 | |
|   
 | |
|   cards = snd_cards();
 | |
|   printf( "Detected %i soundcard%s...\n", cards, cards > 1 ? "s" : "" );
 | |
|   if ( cards <= 0 ) {
 | |
|     printf( "Giving up...\n" );
 | |
|     return;
 | |
|   }
 | |
|   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_hw_info( handle, &info )) < 0 ) {
 | |
|       printf( "HW info error: %s\n", snd_strerror( err ) );
 | |
|       continue;
 | |
|     }
 | |
|     for ( idx1 = 0; idx1 < info.mixerdevs; idx1++ )
 | |
|       mixer_test( idx, idx1 );
 | |
|     snd_ctl_close( handle );
 | |
|   }
 | |
| }
 | 
