/* 此文件中定义了下面所有形如SND_的变量*/ #include #include #include #include #include main() { /* id:读取音频文件描述符;fd:写入的文件描述符。i,j为临时变量*/ int id,fd,i,j; /* 存储音频数据的缓冲区,可以调整*/ char testbuf[4096]; /* 打开声卡设备,失败则退出*/ if ( ( id = open ( "/dev/audio", O_RDWR ) ) < 0 ) { fprintf (stderr, " Can't open sound device!\n"); exit ( -1 ) ; } /* 打开输出文件,失败则退出*/ if ( ( fd = open ("test.wav",O_RDWR))<0){ fprintf ( stderr, " Can't open output file!\n"); exit (-1 ); } /* 设置适当的参数,使得声音设备工作正常*/ /* 详细情况请参考Linux关于声卡编程的文档*/ i=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); } |