Linux音频编程指南
来源:优易学  2010-1-22 15:42:27   【优易学:中国教育考试门户网】   资料下载   IT书店

 

 /* 以只读方式打开混音设备 */

  fd = open("/dev/mixer", O_RDONLY);

  if (fd == -1) {

  perror("unable to open /dev/mixer");

  exit(1);

  }

  /* 获得所需要的信息 */

  status = ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devmask);

  if (status == -1)

  perror("SOUND_MIXER_READ_DEVMASK ioctl failed");

  status = ioctl(fd, SOUND_MIXER_READ_STEREODEVS, &stereodevs);

  if (status == -1)

  perror("SOUND_MIXER_READ_STEREODEVS ioctl failed");

  /* 检查用户输入 */

  if (argc != 3 && argc != 4)

  usage();

  /* 保存用户输入的混音器名称 */

  dev = argv[1];

  /* 确定即将用到的混音设备 */

  for (i = 0 ; i < SOUND_MIXER_NRDEVICES ; i++)

  if (((1 << i) & devmask) && !strcmp(dev, sound_device_names[i]))

  break;

  if (i == SOUND_MIXER_NRDEVICES) { /* 没有找到匹配项 */

  fprintf(stderr, "%s is not a valid mixer device\n", dev);

  usage();

  }

  /* 查找到有效的混音设备 */

  device = i;

  /* 获取增益值 */

  if (argc == 4) {

  /* 左、右声道均给定 */

  left  = atoi(argv[2]);

  right = atoi(argv[3]);

  } else {

  /* 左、右声道设为相等 */

  left  = atoi(argv[2]);

  right = atoi(argv[2]);

  }

  /* 对非立体声设备给出警告信息 */

  if ((left != right) && !((1 << i) & stereodevs)) {

  fprintf(stderr, "warning: %s is not a stereo device\n", dev);

  }

  /* 将两个声道的值合到同一变量中 */

  level = (right << + left;

  /* 设置增益 */

  status = ioctl(fd, MIXER_WRITE(device), &level);

  if (status == -1) {

  perror("MIXER_WRITE ioctl failed");

  exit(1);

  }

  /* 获得从驱动返回的左右声道的增益 */

  left  = level & 0xff;

  right = (level & 0xff00) >> 8;

  /* 显示实际设置的增益 */

  fprintf(stderr, "%s gain set to %d%% / %d%%\n", dev, left, right);

  /* 关闭混音设备 */

  close(fd);

  return 0;

  }

  编译好上面的程序之后,先不带任何参数执行一遍,此时会列出声卡上所有可用的混音通道:

  [xiaowp@linuxgam sound]$ ./mixer

  usage: ./mixer <device> <left-gain%> <right-gain%>

  ./mixer <device> <gain%>

  Where <device> is one of:

  vol pcm speaker line mic cd igain line1 phin video

  之后就可以很方便地设置各个混音通道的增益大小了,例如下面的命令就能够将CD输入的左、右声道的增益分别设置为80%和90%:

  [xiaowp@linuxgam sound]$ ./mixer cd 80 90

  cd gain set to 80% / 90%

  五、小结

  随着Linux平台下多媒体应用的逐渐深入,需要用到数字音频的场合必将越来越广泛。虽然数字音频牵涉到的概念非常多,但在Linux下进行最基本的音频编程却并不十分复杂,关键是掌握如何与OSS或者ALSA这类声卡驱动程序进行交互,以及如何充分利用它们提供的各种功能,熟悉一些最基本的音频编程框架和模式对初学者来讲大有裨益。

上一页  [1] [2] [3] [4] [5] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训