• 大小: 5KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: C/C++
  • 标签: mini2440  录音  

资源简介

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 

评论

共有 条评论