bool TWavFile::SaveFile(AnsiString FName) { FILE *f; if (FileNameGetExt(FName)==".CSW") return(SaveCSW(FName)); f=fopen(FName.c_str(), "wb"); fwrite(&Head, 1, sizeof(Head), f); fwrite(&Format, 1, sizeof(Format), f); fwrite(&Data, 1, 8, f); fwrite(Data.Data, Data.DataLen, 1, f); fclose(f); return(true); }
bool TWavFile::LoadFile(AnsiString FName) { FILE *f; int i, total; unsigned char *buffer; if (FileNameGetExt(FName)==".CSW") return(LoadCSW(FName)); f=fopen(FName.c_str(), "rb"); Head.Head[0]='\0'; Format.Head[0]='\0'; Data.Head[0]='\0'; do { char blkname[4]; unsigned int blklen; fread(blkname, 4,1,f); fread(&blklen, 4,1,f); if (!strncmp(blkname,"RIFF",4)) { fseek(f,-8,SEEK_CUR); fread(&Head,sizeof(struct RIFFHeader),1,f); } else if (!strncmp(blkname,"fmt",3)) { fseek(f,-8,SEEK_CUR); fread(&Format,sizeof(struct RIFFFormat),1,f); if (Format.BlkLen>16) fseek(f, Format.BlkLen-16, SEEK_CUR); } else if (!strncmp(blkname,"data",4)) { fseek(f,-8,SEEK_CUR); fread(&Data, /*sizeof(struct RIFFData)*/ 8,1,f); } else fseek(f, blklen, SEEK_CUR); } while(!feof(f) && strncmp(Data.Head, "data",4)); if (strncmp(Head.Head, "RIFF",4)) { fclose(f); return false; } if (strncmp(Format.Head,"fmt",3)) { fclose(f); return false; } if (strncmp(Data.Head,"data",4)) { fclose(f); return false; } SampleRate = Format.SampleRate; NoSamples = Data.DataLen / Format.BytesSample; Bits = Format.BytesSample * 8; Signed=false; if (Format.NoChannels == 1) Stereo=false; else Stereo=true; if (Data.Data!=NULL) delete[] Data.Data; Data.Data=new char[Data.DataLen]; MemAllocated=Data.DataLen; fread(Data.Data, Data.DataLen, 1, f); fclose(f); FileName=FName; if (Format.BitsSample>8) Signed=true; //Signed = !Signed; return(true); }