Wczytywani wave VC++

Programowanie w języku C i językach pochodnych, jak C++, C#
Eliard
Posty: 1
Rejestracja: 15 lis 2008, 19:04

Wczytywani wave VC++

Post autor: Eliard » 15 lis 2008, 19:18

Witam, dopiero się uczę więc proszę o wyrozumiałość.
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};