- 论坛徽章:
- 0
|
经过小第的不懈努力,终于对声卡编程有了一定的掌握.实现了一个小的录音
程序,//hehe //admire <me>;
当然还很不完善,还有一些细节我不大清楚//shy,现将原码贴出,请各位给帮
忙指正,//xixi
- #include <sys/soundcard.h>;
- #include <stdio.h>;
- #include <sys/types.h>;
- #include <sys/stat.h>;
- #include <fcntl.h>;
- 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;j<10;){
- i=read(id,testbuf,4096);
- if(i>;0){
- write(fd,filebuf,i);
- j++;
- }
- }
- close(fd);
- close(id);
- }
复制代码
该程序只是简单地录一小段纯音频数据存储在test.wav中,用命令
cat test.wav >;/dev/audio 就可以播放出来
对了因为程序要读写声卡的设备文件,所以你必须用相应的权限,或者
你是root,//hehe |
|