⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cs4334test.c

📁 经过一番努力
💻 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 + -