Chcę napisać program w visual c++ 2005, program ten ma wczytać plik wave i wyświetlić informacje o pliku rozmiar, ilość próbek itp.
napisałem klasę która ma w sekcji prywatnej przechowywać dane a sekcja publiczna ma metody które mają zwrócić poszczególną wartość, oraz metodę "Wczytaj" która sczytuje wszystkie informacje z pliku Wave. Problem tkwi w tym że nie wiem jak przypisać wczytany plik z openFileDialog do obiektu plik, w ogóle nie wiem jak stworzyć obiekt File *plik.
Kod: Zaznacz cały
class Wave
{
private:
/*--------------RIFF--------------------*/
char RIFFchunkID[4];
DWORD RIFFchunkSize;
char RIFFformat[4];
/*--------------FMT--------------------*/
char FMTchunkID[4];
DWORD FMTchunkSize;
short FMTaudioFormat;
short FMTnumChanels;
DWORD FMTsampleRate;
DWORD FMTbyteRate;
short FMTblockAlign;
short FMTbitsPerSample;
/*--------------DATA--------------------*/
char DATAchunkID[4];
DWORD DATAchunkSize;
short *TData;
public:
Wave(){}
bool Wczytaj(FILE *plik)
{
fread(RIFFchunkID,sizeof(BYTE),4,plik);
if (strncmp(RIFFchunkID,"RIFF",4)==0)
{
fread(&RIFFchunkSize, sizeof(DWORD), 1,plik);
fread(&RIFFformat,sizeof(BYTE),4,plik);
if (strncmp(RIFFformat,"WAVE",4)==0)
{
fread(FMTchunkID,sizeof(BYTE),4,plik);
if (strncmp(FMTchunkID,"fmt ",4)==0)
{
fread(&FMTchunkSize, sizeof(DWORD), 1,plik);
fread(&FMTaudioFormat,sizeof(short), 1,plik);
if(FMTaudioFormat == 1)
{
fread(&FMTnumChanels,sizeof(short), 1,plik);
if( FMTnumChanels == 1)
{
fread(&FMTsampleRate, sizeof(DWORD), 1,plik);
fread(&FMTbyteRate, sizeof(DWORD), 1,plik);
fread(&FMTblockAlign,sizeof(short), 1,plik);
fread(&FMTbitsPerSample,sizeof(short), 1,plik);
if(FMTbitsPerSample == 16)
{
fseek(plik,FMTchunkSize-16,SEEK_CUR);
fread(DATAchunkID,sizeof(BYTE),4,plik);
while (strncmp(DATAchunkID,"data",4)!=0)
{
fread (&DATAchunkSize, sizeof(DWORD), 1,plik);
fseek(plik,DATAchunkSize,SEEK_CUR);
fread (DATAchunkID, sizeof(DWORD), 1,plik);
}
if (strncmp(DATAchunkID,"data",4)==0)
{
fread (&DATAchunkSize, sizeof(DWORD), 1,plik);
TData = new short[DATAchunkSize/2];
// for (int i=0; i<d_chunkSize/2; i++) //
//{
fread (TData,DATAchunkSize,1,plik);
//}
return true;//"Plik zostal wczytany poprawnie";
} else return false;//"To nie jest poprawny plik";
}else return false;//"To nie jest plik 16-bitowy";
}else return false;//"To nie jest plik mono";
}else return false;//"To nie jest prawidlowy plik, plik skompresowany";
} else return false;//"To nie jest poprawny plik";
} else return false;//"To nie jest poprawny plik";
} else return false;//"To nie jest poprawny plik";
};
char *WezRIFFchunkId(){return RIFFchunkID;};
int WezRIFFchunkSize(){return RIFFchunkSize;};
char *WezRIFFFormat(){return RIFFformat;};
char *WezFMTchunkId(){return FMTchunkID;};
int WezFMTchunkSize(){return FMTchunkSize;};
int WezFMTaudioFormat(){return FMTaudioFormat;};
int WezFMTnumChanels(){return FMTnumChanels;};
int WezFMTsampleRate(){return FMTsampleRate;};
int WezFMTbyteRate(){return FMTbyteRate;};
int WezFMTblockAlign(){return FMTblockAlign;};
int WezFMTbitsPerSample(){return FMTbitsPerSample;};
char *WezDATAchunkID(){return DATAchunkID;};
int WezDATAchunkSize(){return DATAchunkSize;};
short *WezDATAtabData(){return TData};