龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 操作系统 > LINUX系统 >

linux下声卡编程试探

时间:2011-03-20 22:37来源:未知 作者:admin 点击:
分享到:
经过小第的不懈努力,终于对声卡编程有了一定的掌握.实现了一个小的录音 程序,//hehe //admire 当然还很不完善,还有一些细节我不大清楚//shy,现将原码贴出,请各位给帮 忙指正,//xixi #incl

  经过小第的不懈努力,终于对声卡编程有了一定的掌握.实现了一个小的录音

  

  程序,//hehe //admire

  

  当然还很不完善,还有一些细节我不大清楚//shy,现将原码贴出,请各位给帮

  

  忙指正,//xixi

  

  #include

  

  #include

  

  #include

  

  #include

  

  #include

  

  main()

  

  {

  

  int id,fd,i,j;

  

  char testbuf[4096];

  

  id=open("/dev/audio",O_RDWR);

  

  fd=open("test.wav",O_RDWR);

  

  if(id<0||fd<0){

  

  printf("error in open the device!\n");

  

  printf("id %d\t dsp%d\t seq%d\n",id,dsp,seq);

  

  exit(-1);

  

  }

  

  post=0;

  

  ioctl(id,SNDCTL_DSP_RESET,(char *)&i);

  

  ioctl(id,SNDCTL_DSP_SYNC,(char *)&i);

  

  i=1;

  

  ioctl(id,SNDCTL_DSP_NONBLOCK,(char *)&i);

  

  i=8000;

  

  ioctl(id,SNDCTL_DSP_SPEED,(char *)&i);

  

  i=1;

  

  ioctl(id,SNDCTL_DSP_CHANNELS,(char *)&i);

  

  i=8;

  

  ioctl(id,SNDCTL_DSP_SETFMT,(char *)&i);

  

  i=3;

  

  ioctl(id,SNDCTL_DSP_SETTRIGGER,(char *)&i);

  

  i=3;

  

  ioctl(id,SNDCTL_DSP_SETFRAGMENT,(char *)&i);

  

  i=1;

  

  ioctl(id,SNDCTL_DSP_PROFILE,(char *)&i);

  

  for(j=0;j0){

  

  write(fd,filebuf,i);

  

  j++;

  

  }

  

  }

  

  close(fd);

  

  close(id);

  

  }

  

  该程序只是简单地录一小段纯音频数据存储在test.wav中,用命令

  

  cat test.wav >/dev/audio 就可以播放出来

  

  对了因为程序要读写声卡的设备文件,所以你必须用相应的权限,或者

  

  你是root。

  

  

精彩图集

赞助商链接