资源简介
S3Cmini2440开发板上的一个程序
代码片段和文件信息
#include
#include
#include
#include //设备控制函数
#include
#include
#include //声卡的结构及定义
#include //串口的结构及定义
#define LENGTH 20 //20秒
#define RATE 48000 //采样频率:48000...11025
#define SIZE 16 //样本数据位
#define CHANNELS 2 //1表示单声道,2表示立体声
#define RSIZE 8 //数据大小,一个字节
struct fhead
{
unsigned char a[4];
long int b;
unsigned char c[4];
unsigned char d[4];
long int e;
short int f;
short int g;
long int h;
long int i;
short int j;
short int k;
unsigned char p[4];
long int q;
}wavehead;
int main(void)
{
int fd_dev_r;
int fd_dev_w;
int fd_f;
int argstatus;
char choice;
int i;
unsigned char buf[RSIZE];
wavehead.a[0]=‘R‘;
wavehead.a[1]=‘I‘;
wavehead.a[2]=‘F‘;
wavehead.a[3]=‘F‘; //RIFF资源交换标志
wavehead.b=LENGTH*RATE*CHANNELS*SIZE/8-8; //从下一个地址开始到文件尾的总字节数==总字节数减去开头8个字节
wavehead.c[0]=‘W‘;
wavehead.c[1]=‘A‘;
wavehead.c[2]=‘V‘;
wavehead.c[3]=‘E‘; //文件格式: WAVE
wavehead.d[0]=‘f‘;
wavehead.d[1]=‘m‘;
wavehead.d[2]=‘t‘; //波形格式标志:fmt
wavehead.d[3]=‘ ‘;
wavehead.e=16; //16bit的数据表示一个量化结果--PCM技术
wavehead.f=1; //1表示有压缩的编码
wavehead.g=CHANNELS; //通道数
wavehead.h=RATE; //采样频率
wavehead.i=RATE*CHANNELS*SIZE/8; //Byte率=采样频率*音频通道数*每次采样得到的样本位数/8
wavehead.j=CHANNELS*SIZE/8; //块对齐=通道数*每次采样得到的样本位数/8
wavehead.k=SIZE; //每次采样得到的样本位数:16
wavehead.p[0]=‘d‘;
wavehead.p[1]=‘a‘;
wavehead.p[2]=‘t‘;
wavehead.p[3]=‘a‘; //一个标志:data
wavehead.q=LENGTH*RATE*CHANNELS*SIZE/8; //Wav文件实际音频数据所占的大小
fd_dev_r=open(“/dev/dsp“O_RDONLY0777); //打开声卡设备,声卡数字采样和数字录音设备 用于播放声音和录音
if(fd_dev_r<0)
{
perror(“You Con‘t open /dev/dsp device“);
return 1;
}
if(ioctl(fd_dev_rSNDCTL_DSP_SYNCNULL)==-1)
perror(“SNDCTL_DSP_SYNC“);
/*设置bit*/
arg=SIZE;
status=ioctl(fd_dev_rSNDCTL_DSP_SETFMT&arg);
if(status==-1)
{
perror(“You Con‘t set SNDCTL_DSP_SETFMT“);
return 1;
}
/*设置声道*/
arg=CHANNELS;
status=ioctl(fd_dev_rSNDCTL_DSP_CHANNELS&arg);
if(status==-1)
{
perror(“You Con‘t
- 上一篇:扫描线填充算法实现橡皮筋
- 下一篇:实现104规约源代码
评论
共有 条评论