資源簡介
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規約源代碼
評論
共有 條評論