コード例 #1
0
ファイル: WavFile.cpp プロジェクト: charlierobson/EightyOne
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);
}
コード例 #2
0
ファイル: WavFile.cpp プロジェクト: libretro/81-libretro
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);
}