home *** CD-ROM | disk | FTP | other *** search
- /*
- **
- ** FileInfosC.cpp
- **
- ** $VER: FileInfoC.cpp 1.1 (13.04.98)
- **
- ** $Revision: 1.3 $
- ** $State: Exp $
- ** $Date: 1998/08/16 19:03:36 $
- **
- ** $Log: FileInfosC.cpp $
- ** Revision 1.3 1998/08/16 19:03:36 kakace
- ** Version Beta3+
- **
- ** Revision 1.2 1998/08/02 15:17:03 kakace
- ** Fonctionnement OK (Layer 1/2 + Stereo/JStereo)
- **
- ** Revision 1.1 1998/07/24 14:26:52 kakace
- ** Automatic global CheckIn
- **
- ** Revision 1.19 1998/07/24 14:14:25 kakace
- ** Version intermédiaire (CheckIn global)
- **
- ** Revision 1.17 1998/07/02 15:51:59 kakace
- ** Automatic global CheckIn
- **
- */
-
-
- //----------------------------------------------------------------------------------------------------
-
- /// Includes
-
- #ifndef _INCLUDE_STDLIB_H
- #include <stdlib.h>
- #endif
-
- #ifndef _PEGASE_HPP
- #include "Pegase.hpp"
- #endif
-
- #ifndef _FILEINFOS_CLASS_HPP
- #include "FileInfosC.hpp"
- #endif
-
- #ifndef CLASS_DISPLAY_HPP
- #include "Display.hpp"
- #endif
-
- #define CATCOMP_NUMBERS
- #ifndef PEGASE_H
- #include "Pegase.h"
- #endif
-
- ///
-
-
- //----------------------------------------------------------------------------------------------------
- //======================================== Fonctions locales =========================================
- //----------------------------------------------------------------------------------------------------
-
- // Allouer un tampon et y copier la chaîne transmise en argument.
-
- inline char *DuplicateString(STRING str)
- {
- char *s = NULL;
-
- if (str && *str)
- {
- s = new char[ strlen(str)+1 ];
-
- if (s) strcpy(s, str);
- }
-
- return s; // Chaîne nulle ou pointeur nul.
- }
-
-
- //----------------------------------------------------------------------------------------------------
- //========================================= class FileInfos ==========================================
- //----------------------------------------------------------------------------------------------------
-
- /// FileInfosC::CONSTRUCTOR
- /****** Class FileInfosC/CONSTRUCTOR ****************************************
- *
- * NAME
- * FileInfosC::FileInfosC -- Constructeur
- *
- * SYNOPSIS
- * FileInfosC::FileInfosC(cFileName, cPath, roConfig)
- *
- * FileInfosC::FileInfosC(STRING, STRING, EncoderConfigC);
- *
- * FUNCTION
- * Crée un objet FileInfos pour le fichier indiqué.
- * Le nom du fichier et le nom du répertoire parent sont recopiés dans un
- * tampon privé.
- *
- * INPUTS
- * cFileName - Nom du fichier à examiner.
- * cPath - Nom du répertoire contenant ce fichier.
- * roConfig - Paramètres choisis pour l'encodeur.
- *
- * SEE ALSO
- * DESTRUCTOR.
- *
- *****************************************************************************
- *
- */
-
-
- FileInfosC::FileInfosC(STRING cFileName, STRING cPath, EncoderConfigC &roConfig) : EncoderConfigC(roConfig), fi_roDefConfig(roConfig)
- {
- char *name;
-
- // Dupliquer le nom du fichier ainsi que son chemin d'accès complet.
-
- name = DuplicateString(cFileName);
- fi_cFullPath = DuplicateString(cPath);
-
- // Initialiser les membres données.
-
- ComputeTime();
-
- if (name && fi_cFullPath)
- {
- NodeName(name); // Le nom du fichier constitue le nom du noeud.
- NodeType(AFT_UNKNOWN); // Type de fichier inconnu (pour le moment).
- }
- else
- {
- fi_iIoError = IOERR_NO_MEMORY;
- }
- }
- ///
- /// FileInfosC::DESTRUCTOR
- /****** Class FileInfosC/DESTRUCTOR *****************************************
- *
- * NAME
- * FileInfosC::~FileInfosC -- Destructeur
- *
- * SYNOPSIS
- * FileInfosC::~FileInfosC()
- *
- * FileInfosC::~FileInfosC();
- *
- * FUNCTION
- * Détruit l'objet FileInfos. Les tampons alloués pour la duplication des
- * chaînes (nom du fichier et du répertoire) sont libérés.
- *
- * SEE ALSO
- * CONSTRUCTOR
- *
- *****************************************************************************
- *
- */
-
-
- FileInfosC::~FileInfosC()
- {
- // Libérer les tampons alloués pour la duplication du nom du fichier (= nom du noeud) ainsi
- // que de son chemin d'accès. (Cf constructeur de la classe).
-
- char *s = (char *) NodeName();
-
- delete [] s;
- delete [] fi_cFullPath;
- }
- ///
- /// FileInfosC::ComputeTime()
- /****** Class FileInfosC/ComputeTime ****************************************
- *
- * NAME
- * FileInfosC::ComputeTime -- Calculer la durée du fichier.
- *
- * SYNOPSIS
- * FileInfosC::ComputeTime()
- *
- * void FileInfosC::ComputeTime();
- *
- * FUNCTION
- * Calcule la durée du fichier en se basant sur le nombre d'échantillons par
- * canal et la fréquence d'échantillonage. Si l'une de ces deux valeurs n'
- * est pas connue, la durée du fichier est définie avec "88:88".
- *
- * SEE ALSO
- * FileInfosC::OverrideSettings()
- *
- *****************************************************************************
- *
- */
-
-
- void FileInfosC::ComputeTime()
- {
- if (fi_iSamplingFreq == 0 || fi_iNumFrames == 0)
- {
- fi_sTime.iTime = 0x5858; // 88:88
- }
- else
- {
- div_t t;
- ULONG iNumSecs = fi_iNumFrames / fi_iSamplingFreq;
-
- t = div(iNumSecs, 60);
- fi_sTime.sTime.bMinutes = t.quot;
- fi_sTime.sTime.bSecondes = t.rem;
- }
- }
- ///
- /// FileInfosC::OverrideSettings()
- /****** Class FileInfosC/OverrideSettings ***********************************
- *
- * NAME
- * FileInfosC::OverrideSettings -- Modifie les réglages.
- *
- * SYNOPSIS
- * Result = FileInfosC::OverrideSettings(iSampleFreq, bNumChannels)
- *
- * bool FileInfosC::OverrideSettings(ULONG, UBYTE);
- *
- * FUNCTION
- * Modifie la fréquence d'échantillonage et le nombre de canaux du fichier
- * audio.
- *
- * INPUTS
- * iSampleFreq - Fréquence d'échantillonage (Hz)
- * bNumChannels - Nombre de canaux (1 = mono, 2 = stéréo).
- *
- * RESULT
- * Result - TRUE s'il n'y a pas eu d'erreur.
- *
- * NOTES
- * La modification de ces valeurs entraîne le recalcul de la durée du
- * fichier. D'autre part, les nouvelles valeurs entrainent aussi une
- * modification des réglages de l'encodeur (fréquence d'échantillonage et
- * mode d'encodage).
- *
- * SEE ALSO
- * FileInfosC::ComputeTime()
- *
- *****************************************************************************
- *
- * 15.07.98 : Utilise la fréquence d'échantillonage mentionnée sur la ligne
- * de commande (ou celle par défaut) lorsque la fonction reçoit la
- * valeur 0 comme fréquence. Dans le cas contraire, les fichiers RAW
- * sont toujours encodés avec la plus petite fréquence possible, c'est
- * à dire 32 KHz.
- *
- */
-
-
- int FileInfosC::OverrideSettings(ULONG iSampleFreq, UBYTE bNumChannels)
- {
- if (bNumChannels == 0 || bNumChannels > 2) return FALSE;
-
- if (iSampleFreq == 0)
- {
- iSampleFreq = fi_roDefConfig.GetSampleFreq();
- }
-
- fi_iSamplingFreq = iSampleFreq;
- fi_bNumChannels = bNumChannels;
- fi_iTotalSamples = fi_iNumFrames * fi_bNumChannels;
-
- // Modifier la fréquence d'échantillonage utilisée par l'encodeur.
-
- if (!SetSampleFreq(iSampleFreq)) return FALSE;
-
- // Modifier le mode d'encodage de l'encodeur en fonction du nombre de canaux.
- //
- // Fichier Réglage par défaut Nouveau réglage
- // Mono Dual channel Dual channel
- // Mono #? Mono
- // Stereo Joint stereo Joint stereo
- // Stereo #? Stereo
-
- e_Encoding eMode = fi_roDefConfig.GetEncodingMode();
-
- if (bNumChannels == 1)
- {
- SetEncodingMode( (eMode == DUALCHANNEL) ? DUALCHANNEL : MONO);
- }
- else
- {
- SetEncodingMode( (eMode == JOINTSTEREO) ? JOINTSTEREO : STEREO);
- }
-
- ComputeTime(); // Modifier la durée du fichier.
-
- return TRUE;
- }
- ///
- /// FileInfosC::SetNumFrames()
- /****** Class FileInfosC/SetNumFrames ***************************************
- *
- * NAME
- * FileInfosC::SetNumFrames -- Définir le nombre de frames.
- *
- * SYNOPSIS
- * FileInfosC::SetNumFrames(iFrames)
- *
- * void FileInfosC::SetNumFrames(ULONG);
- *
- * FUNCTION
- * Définir le nombre d'échantillons disponibles dans le fichier. Il s'agit
- * du nombre d'échantillons par canal, et non du nombre total d'échantillons
- *
- * INPUTS
- * iFrames - Nombre d'échantillons par canal.
- *
- * NOTES
- * Cette fonction provoque le recalcul de la durée du fichier audio.
- *
- * SEE ALSO
- * FileInfosC::ComputeTime()
- *
- *****************************************************************************
- *
- */
-
-
- void FileInfosC::SetNumFrames(ULONG iFrames)
- {
- fi_iNumFrames = iFrames;
- fi_iTotalSamples = iFrames * fi_bNumChannels;
- ComputeTime();
- }
- ///
- /// FileInfosC::DefineOutputName()
- /****** Class FileInfosC/DefineOutputName ***********************************
- *
- * NAME
- * FileInfosC::DefineOutputName -- Définie le nom du fichier encodé.
- *
- * SYNOPSIS
- * FileInfosC::DefineOutputName()
- *
- * void FileInfosC::DefineOutputName();
- *
- * FUNCTION
- * Détermine le nom du fichier à encoder.
- * La configuration globale de l'encodeur permet trois situations distinctes
- * qui sont :
- * - Aucune destination n'est définie. Dans ce cas, le fichier encodé est
- * placé dans le même répertoire que le fichier audio. L'extension "mp?"
- * est ajoutée au nom du fichier après suppression de l'extension
- * originale
- * - La destination correspond à un répertoire. Le fichier encodé sera placé
- * dans ce répertoire, l'extension "mp?" étant ajoutée au nom du fichier
- * après suppression de l'extension originale.
- * - La destination est un nom de fichier. Le fichier encodé portera ce nom
- * et sera placé dans le répertoire éventuellement indiqué avec ce nom.
- *
- * NOTES
- *
- * BUGS
- *
- *****************************************************************************
- *
- */
-
-
- void FileInfosC::DefineOutputName()
- {
- char sNameBuff[32];
- char sPathBuff[512];
- char *pos;
-
- if (GetTargetType() == TARGET_FILE) return;
-
- if (GetTargetType() == TARGET_DIRECTORY)
- {
- strcpy(sPathBuff, GetOutputName());
- }
-
- if (GetTargetType() == TARGET_EMPTY)
- {
- strcpy(sPathBuff, GetPathName());
- }
-
- strncpy(sNameBuff, NodeName(), 26);
- sNameBuff[26] = '\0';
-
- if ( (pos = strrchr(sNameBuff, '.')) )
- sNameBuff[pos - sNameBuff] = '\0';
-
- strcat(sNameBuff, asExtensions[GetLayer()]);
-
- AddPart(sPathBuff, sNameBuff, sizeof(sPathBuff));
- SetOutputName(sPathBuff);
- }
- ///
-
- //----------------------------------------------------------------------------------------------------
-
- /// FileInfosC::GetAudioName()
- const char *FileInfosC::GetAudioName() const
- {
- switch (NodePri())
- {
- case AFT_AIFF:
- return "IFF-AIFF";
-
- case AFT_MAUD:
- return "IFF-MAUD";
-
- case AFT_WAV:
- return "RIFF-WAV";
-
- case AFT_CDDA:
- return "CD AUDIO Motorola";
-
- case AFT_CDDA_INTEL:
- return "CD AUDIO Intel";
-
- case AFT_PCM:
- return "RAW/PCM 16 bits mono";
-
- case AFT_DEFAULT:
- return GetString(MSG_ASSUME_RAW_TXT);
-
- case AFT_UNKNOWN:
- return GetString(MSG_UNKNOWN_FILE_FORMAT);
- }
- }
- ///
-
-