home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 14 / MA_Cover_14.iso / source / c / pegase_src / fileinfosc.hpp < prev    next >
Encoding:
C/C++ Source or Header  |  1999-08-15  |  6.3 KB  |  174 lines

  1. #ifndef _FILEINFOS_CLASS_HPP
  2. #define _FILEINFOS_CLASS_HPP
  3.  
  4. /*
  5. **
  6. ** FileInfosC.hpp
  7. **
  8. ** $VER: FileInfosC.hpp 1.0 (12.04.98)
  9. **
  10. ** $Revision: 1.3 $
  11. ** $State: Exp $
  12. ** $Date: 1998/08/16 19:03:36 $
  13. **
  14. ** $Log: FileInfosC.hpp $
  15. ** Revision 1.3  1998/08/16 19:03:36  kakace
  16. ** Version Beta3+
  17. **
  18. ** Revision 1.2  1998/08/02 15:17:02  kakace
  19. ** Fonctionnement OK (Layer 1/2 + Stereo/JStereo)
  20. **
  21. ** Revision 1.1  1998/07/24 14:26:52  kakace
  22. ** Automatic global CheckIn
  23. **
  24. ** Revision 1.16  1998/07/24 14:14:25  kakace
  25. ** Version intermédiaire (CheckIn global)
  26. **
  27. ** Revision 1.14  1998/07/02 15:51:58  kakace
  28. ** Automatic global CheckIn
  29. **
  30. */
  31.  
  32.  
  33.  
  34. //----------------------------------------------------------------------------------------------------
  35.  
  36. #ifndef  _INCLUDE_STRING_H
  37. #include <string.h>
  38. #endif
  39.  
  40. #ifndef  CLASSES_LISTS_HPP
  41. #include "Lists.hpp"
  42. #endif
  43.  
  44. #ifndef  _ENCODERCONFIG_CLASS_HPP
  45. #include "EncoderConfigC.hpp"
  46. #endif
  47.  
  48.  
  49. // Formats audio supportés.
  50.  
  51. enum e_AudioTypes {AFT_UNKNOWN,             // Format inconnu.
  52.                    AFT_AIFF,                // IFF/AIFF
  53.                    AFT_MAUD,                // IFF/MAUD
  54.                    AFT_WAV,                 // RIFF/WAV
  55.                    AFT_CDDA,                // CDDA         (Motorola)
  56.                    AFT_CDDA_INTEL,          // CDDA         (Intel)
  57.                    AFT_PCM,                 // RAW/PCM      (Format déterminé par l'extension).
  58.                    AFT_DEFAULT,             // RAW/PCM      (Hypothèse).
  59.                    // Fichiers rejetés...
  60.                    AFT_NOT_AUDIO,           // Fichier audio, non supporté pour le moment.
  61.                    AFT_BAD_AIFF,            // Fichier AIFF non supporté.
  62.                    AFT_BAD_MAUD,            // Fichier MAUD non supporté.
  63.                    AFT_BAD_WAV};            // Fichier WAV non supporté.
  64.  
  65.  
  66. // Codes d'erreur.
  67.  
  68. enum e_IoErrors {IOERR_NONE,                // Pas d'erreur.
  69.                  IOERR_WARN,                // Avertissements (placés par Pégase)
  70.                  IOERR_DOS,                 // Erreur du DOS (non précisée).
  71.                  IOERR_IFF,                 // Erreur générale IFF.
  72.                  IOERR_OPEN,                // Erreur pendant l'ouverture du fichier.
  73.                  IOERR_READ,                // Erreur de la lecture du fichier.
  74.                  IOERR_WRITE,               // Erreur d'écriture du fichier.
  75.                  IOERR_INTERNAL,            // Erreurs internes (placées par Pégase)
  76.                  IOERR_NO_MEMORY};          // Plus de mémoire.
  77.  
  78.  
  79. // Structures particulières.
  80.  
  81. struct s_Time{UBYTE bMinutes;
  82.               UBYTE bSecondes;
  83.              };
  84.  
  85.  
  86. union u_Time{UWORD  iTime;
  87.              s_Time sTime;
  88.             };
  89.  
  90.  
  91. //----------------------------------------------------------------------------------------------------
  92. //========================================= class FileInfos ==========================================
  93. //----------------------------------------------------------------------------------------------------
  94. //
  95. //   Chaque objet de cette classe centralise les informations concernant un fichier précis. Il est
  96. // utilisé pour mémoriser les réglages particulier du fichier, et sert aussi de référence aux objets
  97. // manipulant ce fichier (comme la classe InputStreamC par exemple).
  98. //
  99. //   Le type du fichier est stocké en tant que priorité de l'objet Node. Cela permet de chaîner les
  100. // objets en les regroupant par type.
  101.  
  102. typedef const char * STRING;
  103.  
  104.  
  105. class FileInfosC : public CNode, public EncoderConfigC
  106. {
  107.     public:
  108.  
  109.         // Constructeur et destructeur.
  110.  
  111.         FileInfosC(STRING cFileName, STRING cPathName, EncoderConfigC &roConfig);
  112.         ~FileInfosC();
  113.  
  114.         // Fonctions d'accès aux membres privés.
  115.  
  116.         const char  *GetAudioName() const;
  117.  
  118.         e_AudioTypes GetFileType()     const {return (e_AudioTypes) NodePri();}
  119.         e_IoErrors   GetIoError()      const {return fi_iIoError;}
  120.         LONG         GetError2()       const {return fi_iError2;}
  121.         ULONG        GetSamplingFreq() const {return fi_iSamplingFreq;}
  122.         ULONG        GetNumFrames()    const {return fi_iNumFrames;}
  123.         ULONG        GetNumSamples()   const {return fi_iTotalSamples;}
  124.         UBYTE        GetNumChannels()  const {return fi_bNumChannels;}
  125.         char        *GetPathName()     const {return fi_cFullPath;}
  126.         u_Time       GetTime()         const {return fi_sTime;}
  127.  
  128.         void    DefineOutputName();
  129.  
  130.         void    ComputeTime();                                              // Calculer la durée du fichier.
  131.         int     OverrideSettings(ULONG iSampleFreq, UBYTE bNumChannels);    // Modifier les réglages.
  132.  
  133.         void    SetFileLength(ULONG iLength) {fi_iFileLength = iLength;}
  134.         ULONG   GetFileLength() const        {return fi_iFileLength;}
  135.  
  136.         void    SetNumFrames(ULONG iFrames);                    // Définir le nombre de frames.
  137.         void    SetIoError(e_IoErrors iErr, LONG iErr2 = 0);    // Définir les codes d'erreur.
  138.         void    SetFileType(e_AudioTypes iFileType)             // Définir le type du fichier.
  139.                 {NodePri(iFileType);}
  140.         void    SetByteOrder(UBYTE bByteOrderFlag) {ecfg_iIntelFormat = bByteOrderFlag;}
  141.  
  142.     protected:
  143.  
  144.         char         *fi_cFullPath;         // Nom complet du répertoire parent.
  145.         e_IoErrors    fi_iIoError;          // Code d'erreur. 0 = OK.
  146.         LONG          fi_iError2;           // Code d'erreur spécifique (DOS/IFF/...)
  147.  
  148.         // Données définies par le fichier.
  149.  
  150.         ULONG         fi_iSamplingFreq;     // Fréquence d'échantillonage (0 = non définie)
  151.         ULONG         fi_iNumFrames;        // Nombre d'échantillons par canal (0 = non défini)
  152.         ULONG         fi_iTotalSamples;     // Nombre total d'échantillons.
  153.         ULONG         fi_iFileLength;       // Longueur du fichier.
  154.         UBYTE         fi_bNumChannels;      // Nombre de canaux (0 = non défini)
  155.         UBYTE         fi_bPad;
  156.         u_Time        fi_sTime;             // Durée du fichier (88:88 si inconnue).
  157.  
  158.         EncoderConfigC &fi_roDefConfig;     // Réglages par défaut de l'encodeur.
  159.  
  160.         FileInfosC& operator = (const FileInfosC &);
  161. };
  162.  
  163.  
  164. //----------------------------------------------------------------------------------------------------
  165.  
  166. inline void FileInfosC::SetIoError(e_IoErrors iErr, LONG iErr2)
  167. {
  168.     fi_iIoError = iErr;
  169.     fi_iError2 = iErr2;
  170. }
  171.  
  172. #endif  // _FILEINFOS_CLASS_HPP
  173.  
  174.