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

 

  if (arg != CHANNELS)

  perror("unable to set number of channels");

  /* 设置采样时的采样频率 */

  arg = RATE;

  status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg);

  if (status == -1)

  perror("SOUND_PCM_WRITE_WRITE ioctl failed");

  /* 循环,直到按下Control-C */

  while (1) {

  printf("Say something:\n");

  status = read(fd, buf, sizeof(buf)); /* 录音 */

  if (status != sizeof(buf))

  perror("read wrong number of bytes");

  printf("You said:\n");

  status = write(fd, buf, sizeof(buf)); /* 回放 */

  if (status != sizeof(buf))

  perror("wrote wrong number of bytes");

  /* 在继续录音前等待回放结束 */

  status = ioctl(fd, SOUND_PCM_SYNC, 0);

  if (status == -1)

  perror("SOUND_PCM_SYNC ioctl failed");

  }

  }

  4.4 混音器框架

  下面再给出一个对混音器进行编程的基本框架,利用它可以对各种混音通道的增益进行调节,其所有的功能都是通过读写/dev/mixer设备文件来完成的:

  /*

  * mixer.c

  */

  #include <unistd.h>

  #include <stdlib.h>

  #include <stdio.h>

  #include <sys/ioctl.h>

  #include <fcntl.h>

  #include <linux/soundcard.h>

  /* 用来存储所有可用混音设备的名称 */

  const char *sound_device_names[] = SOUND_DEVICE_NAMES;

  int fd;                  /* 混音设备所对应的文件描述符 */

  int devmask, stereodevs; /* 混音器信息对应的位图掩码 */

  char *name;

  /* 显示命令的使用方法及所有可用的混音设备 */

  void usage()

  {

  int i;

  fprintf(stderr, "usage: %s <device> <left-gain%%> <right-gain%%>\n"

  "       %s <device> <gain%%>\n\n"

  "Where <device> is one of:\n", name, name);

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

  if ((1 << i) & devmask) /* 只显示有效的混音设备 */

  fprintf(stderr, "%s ", sound_device_names[i]);

  fprintf(stderr, "\n");

  exit(1);

  }

  int main(int argc, char *argv[])

  {

  int left, right, level;  /* 增益设置 */

  int status;              /* 系统调用的返回值 */

  int device;              /* 选用的混音设备 */

  char *dev;               /* 混音设备的名称 */

  int i;

  name = argv[0];

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

责任编辑:小草

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