写一个pcm转wav的c语言代码
时间: 2023-03-10 15:10:57 浏览: 308
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{
FILE *fp1, *fp2;
char *fname1, *fname2;
int sz, i;
short int *buff;
char *header; //Set input and output file name
fname1="input.pcm";
fname2="output.wav"; //Open file
fp1=fopen(fname1,"rb");
fp2=fopen(fname2,"wb"); //Check for file open error
if(fp1==NULL || fp2==NULL){
printf("Error in opening files\n");
exit(1);
} //Get file size
fseek(fp1,0L,SEEK_END);
sz=ftell(fp1);
rewind(fp1); //Allocate memory
header=(char *)malloc(44);
buff=(short int *)malloc(sz); //Set header data
header[0]='R';
header[1]='I';
header[2]='F';
header[3]='F';
header[4]=sz+36 & 0xff;
header[5]=(sz+36 >> 8) & 0xff;
header[6]=(sz+36 >> 16) & 0xff;
header[7]=(sz+36 >> 24) & 0xff;
header[8]='W';
header[9]='A';
header[10]='V';
header[11]='E';
header[12]='f';
header[13]='m';
header[14]='t';
header[15]=' ';
header[16]=16;
header[17]=0;
header[18]=0;
header[19]=0;
header[20]=1;
header[21]=0;
header[22]=1;
header[23]=0;
header[24]=128;
header[25]=62;
header[26]=0;
header[27]=0;
header[28]=2;
header[29]=0;
header[30]=16;
header[31]=0;
header[32]='d';
header[33]='a';
header[34]='t';
header[35]='a';
header[36]=sz & 0xff;
header[37]=(sz >> 8) & 0xff;
header[38]=(sz >> 16) & 0xff;
header[39]=(sz >> 24) & 0xff;
header[40]='P';
header[41]='C';
header[42]='M';
header[43]=' '; //Write header to file
fwrite(header,1,44,fp2);
//Read PCM data
fread(buff,1,sz,fp1);
//Write PCM data
for(i=0;i<sz;i++){
fwrite(&buff[i],2,1,fp2);
} //Close file
fclose(fp1);
fclose(fp2); return 0;
}
阅读全文