⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mixer_info.c

📁 在linux下多媒体开发实例linux下多媒体开发
💻 C
字号:
/* * mixer_info.c * Example program to display mixer settings. */#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <sys/ioctl.h>#include <fcntl.h>#include <linux/soundcard.h>/* utility function for printing status */void yes_no(int condition){  condition ? printf("  yes      ") : printf("  no       ");}int main(int argc, char *argv[]){  int fd;       /* file descriptor for mixer device */  int i;        /* loop counter */  int level;    /* volume setting */  char *device; /* name of device to report on */  int status;   /* status of system calls */  /* various device settings */  int recsrc, devmask, recmask, stereodevs, caps;  /* names of available mixer channels */  const char *sound_device_names[] = SOUND_DEVICE_LABELS;  /* get device name from command line or use default */    if (argc == 2)    device = argv[1];  else    device = "/dev/mixer";  /* open mixer, read only */  fd = open(device, O_RDONLY);  if (fd == -1) {    fprintf(stderr, "%s: unable to open `%s', ", argv[0], device);    perror("");    return 1;  }  /* get all of the information about the mixer */  status = ioctl(fd, SOUND_MIXER_READ_RECSRC, &recsrc);  if (status == -1)    perror("SOUND_MIXER_READ_RECSRC ioctl failed");  status = ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devmask);  if (status == -1)    perror("SOUND_MIXER_READ_DEVMASK ioctl failed");  status = ioctl(fd, SOUND_MIXER_READ_RECMASK, &recmask);  if (status == -1)    perror("SOUND_MIXER_READ_RECMASK ioctl failed");  status = ioctl(fd, SOUND_MIXER_READ_STEREODEVS, &stereodevs);  if (status == -1)    perror("SOUND_MIXER_READ_STEREODEVS ioctl failed");  status = ioctl(fd, SOUND_MIXER_READ_CAPS, &caps);  if (status == -1)    perror("SOUND_MIXER_READ_CAPS ioctl failed");  /* print results in a table */  printf(	 "Status of %s:\n\n"	 "Mixer      Device     Recording  Active     Stereo     Current\n"	 "Channel    Available  Source     Source     Device     Level\n"	 "---------  ---------  ---------  --------   ---------  ---------\n",	 device	 );  /* loop over all devices */  for (i = 0 ; i < SOUND_MIXER_NRDEVICES ; i++) {    /* print number and name */    printf("%2d %-7s", i, sound_device_names[i]);    /* print if available */    yes_no((1 << i) & devmask);    /* can it be used as a recording source? */    yes_no((1 << i) & recmask);    /* it it an active recording source? */    yes_no((1 << i) & recsrc);    /* does it have stereo capability? */    yes_no((1 << i) & stereodevs);    /* if available, display current level */    if ((1 << i) & devmask) {       /* if stereo, show both levels */      if ((1 << i) & stereodevs) {	status = ioctl(fd, MIXER_READ(i), &level);	if (status == -1)	  perror("SOUND_MIXER_READ ioctl failed");	printf("  %d%% %d%%", level & 0xff, (level & 0xff00) >> 8);      } else { /* only one channel */	status = ioctl(fd, MIXER_READ(i), &level);	if (status == -1)	  perror("SOUND_MIXER_READ ioctl failed");	printf("  %d%%", level & 0xff);      }  }     printf("\n");  }  printf("\n");  /* are recording sources exclusive? */  printf("Note: Choices for recording source are ");  if (!(caps & SOUND_CAP_EXCL_INPUT))    printf("not ");  printf("exclusive.\n");  /* close mixer device */  close(fd);  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -