?? cs4334test.c
字號:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/soundcard.h>
typedef struct
{
char format[4];
unsigned int file_length;
char format2[12];
unsigned short wFormatTag;
unsigned short nChannels;
unsigned int nSamplesPerSec;
unsigned int nAvgBytesPerSec;
unsigned short nBlockAlign;
unsigned short wBitsPerSample;
char format3[4];
unsigned int nDataBytes;
}wave_s;
#define WAVEFILE "/var/tmp/test.wav"
#define AUDIOBUFLEN 4096
// 4K bytes buffer
static unsigned int buffer[AUDIOBUFLEN/4];
int main(void)
{
int fd_dev,fd_file;
int result,len;
wave_s *wave_head;
char *buf =(char *) buffer;
char ctl_buf[100];
printf("\n\t\tWelcome to MICETEK World\nNow doing sound test...\n\n");
printf("Open audio device : /dev/audio\n");
if (-1 == (fd_dev = open( "/dev/audio", O_WRONLY)))
{
printf("Failed to open audio device\n" );
return 0;
}
printf("Open wave file : %s\n",WAVEFILE);
if ( -1 == (fd_file = open(WAVEFILE, O_RDONLY)))
{
printf("Failed to open /bin/test.wave file\n" );
return 0;
}
result = read(fd_file,buf,sizeof(wave_s));
if (result < 0)
{
printf("Read wave file error.\n" );
return 0;
}
wave_head = (wave_s *) buf;
if ((wave_head->format[0] != 'R')||(wave_head->format[1] != 'I')||(wave_head->format[2] != 'F')|| (wave_head->format[3] != 'F'))
{
printf("File format (1) error.\n" );
return 0;
}
printf("File length = %d\n",wave_head->file_length);
wave_head->format2[7] = 0;
if (strcmp(wave_head->format2,"WAVEfmt") != 0)
{
printf("File format (2) error.\n" );
return 0;
}
printf("Channels = %d\n",wave_head->nChannels);
sprintf(ctl_buf,"%d",wave_head->nChannels);
ioctl(fd_dev,SNDCTL_DSP_CHANNELS,ctl_buf);
printf("Samples Per Sec = %d\n",wave_head->nSamplesPerSec);
sprintf(ctl_buf,"%d",wave_head->nSamplesPerSec);
ioctl(fd_dev,SNDCTL_DSP_SPEED,ctl_buf);
printf("Avg Bytes Per Sec = %d\n",wave_head->nAvgBytesPerSec);
printf("Block Align = %d\n",wave_head->nBlockAlign);
printf("Bits Per Sample = %d\n",wave_head->wBitsPerSample);
if ((wave_head->format3[0] != 'd')||(wave_head->format3[1] != 'a')||(wave_head->format3[2] != 't')|| (wave_head->format3[3] != 'a'))
{
printf("File format (3) is Unknown.\n" );
}
else
{
printf("File format (3) is data.\n" );
}
printf("Total Data Bytes = %d\n",wave_head->nDataBytes);
len = wave_head->file_length-44; // real audio length
while (len)
{
unsigned int length,ret=0;
if (len > AUDIOBUFLEN)
length = AUDIOBUFLEN;
else
length = len;
result = read(fd_file,buf,length);
if (result < 0)
{
printf("Read File error.\n");
return 0;
}
ret = write(fd_dev,buf,result);
if (ret < 0)
{
printf("Write Audio error.\n");
return 0;
}
len -= result;
}
close(fd_file);
printf("Close Wave File : %s\n",WAVEFILE);
close(fd_dev);
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -