FileReader.h

Go to the documentation of this file.
00001 /*
00002         This file is part of ALIZE which is an open-source tool for 
00003         speaker recognition.
00004 
00005     ALIZE is free software: you can redistribute it and/or modify
00006     it under the terms of the GNU Lesser General Public License as 
00007     published by the Free Software Foundation, either version 3 of 
00008     the License, or any later version.
00009 
00010     ALIZE is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013     GNU Lesser General Public License for more details.
00014 
00015     You should have received a copy of the GNU Lesser General Public 
00016     License along with ALIZE.
00017     If not, see <http://www.gnu.org/licenses/>.
00018         
00019         ALIZE is a development project initiated by the ELISA consortium
00020         [alize.univ-avignon.fr/] and funded by the French Research 
00021         Ministry in the framework of the TECHNOLANGUE program 
00022         [www.technolangue.net]
00023 
00024         The ALIZE project team wants to highlight the limits of voice
00025         authentication in a forensic context.
00026         The "Person  Authentification by Voice: A Need of Caution" paper 
00027         proposes a good overview of this point (cf. "Person  
00028         Authentification by Voice: A Need of Caution", Bonastre J.F., 
00029         Bimbot F., Boe L.J., Campbell J.P., Douglas D.A., Magrin-
00030         chagnolleau I., Eurospeech 2003, Genova].
00031         The conclusion of the paper of the paper is proposed bellow:
00032         [Currently, it is not possible to completely determine whether the 
00033         similarity between two recordings is due to the speaker or to other 
00034         factors, especially when: (a) the speaker does not cooperate, (b) there 
00035         is no control over recording equipment, (c) recording conditions are not 
00036         known, (d) one does not know whether the voice was disguised and, to a 
00037         lesser extent, (e) the linguistic content of the message is not 
00038         controlled. Caution and judgment must be exercised when applying speaker 
00039         recognition techniques, whether human or automatic, to account for these 
00040         uncontrolled factors. Under more constrained or calibrated situations, 
00041         or as an aid for investigative purposes, judicious application of these 
00042         techniques may be suitable, provided they are not considered as infallible.
00043         At the present time, there is no scientific process that enables one to 
00044         uniquely characterize a person=92s voice or to identify with absolute 
00045         certainty an individual from his or her voice.]
00046         Contact Jean-Francois Bonastre for more information about the licence or
00047         the use of ALIZE
00048 
00049         Copyright (C) 2003-2010
00050         Laboratoire d'informatique d'Avignon [lia.univ-avignon.fr]
00051         ALIZE admin [alize@univ-avignon.fr]
00052         Jean-Francois Bonastre [jean-francois.bonastre@univ-avignon.fr]
00053 */
00054 
00055 #if !defined(ALIZE_FileReader_h)
00056 #define ALIZE_FileReader_h
00057 
00058 #if defined(_WIN32)
00059 #if defined(ALIZE_EXPORTS)
00060 #define ALIZE_API __declspec(dllexport)
00061 #else
00062 #define ALIZE_API __declspec(dllimport)
00063 #endif
00064 #else
00065 #define ALIZE_API
00066 #endif
00067 
00068 #include <cstdio>
00069 #include "Object.h"
00070 #include "alizeString.h"
00071 #include "RealVector.h"
00072 
00073 
00074 namespace alize
00075 {
00076 
00083 
00084   class ALIZE_API FileReader : virtual public Object
00085   {
00086   
00087     friend class TestFeatureFileReaderRaw;
00088     friend class TestFeatureFileReaderHTK;
00089     friend class TestFeatureFileReaderSPro4;
00090     friend class TestFeatureFileReader;
00091     friend class TestMixtureFileReaderRaw;
00092     friend class TestMixtureFileReaderAmiral;
00093 
00094   public :
00095 
00096 
00097     explicit FileReader(const FileName&, const String& path,
00098                                   const String& extension, bool swap);
00099     static FileReader& create(const FileName& f, const String& path,
00100                                   const String& extension, bool swap);
00101 
00104     virtual ~FileReader();
00105 
00109     bool isClosed() const;
00110 
00114     bool isOpen() const;
00115 
00120     virtual void close();
00121 
00126     virtual void reset();
00127 
00133     char readChar();
00134     
00140     int readInt2();
00141     
00147     long readInt4();
00148     
00154     unsigned long readUInt4();
00155     
00161     double readDouble();
00162     
00168     float readFloat();
00169 
00175     FloatVector& readFloats(FloatVector& v);
00176 
00185     unsigned long readSomeFloats(FloatVector& v);
00186     
00203     const String& readLine();
00204 
00211     const String& readString(unsigned long length);
00212 
00216     const String& getFullFileName() const;
00217 
00221     const String& getFileName() const;
00222     
00227     void open();
00228 
00233     unsigned long getFileLength();
00234 
00237     void seek(unsigned long pos);
00238 
00239     void rewind();
00240     long tell();
00241     bool& swap();
00242     void swap2Bytes(void *src, void *dest);
00243     void swap4Bytes(void *src, void *dest);
00244     void swap4Bytes(void *src);
00245     void swap8Bytes(void *src, void *dest);
00246 
00247     virtual String toString() const;
00248     virtual String getClassName() const;
00249 
00250 
00251   protected :
00252     
00253     String _fullFileName;
00254 
00255   private :
00256 
00257 
00258     FILE*          _pFileStruct; 
00259     FileName       _fileName;
00260     String         _path;
00261     String         _extension;
00262     unsigned long  _fileLength;
00263     bool           _fileLengthDefined;
00264     mutable String _string; 
00265     bool           _swap; 
00267 
00268 
00269 
00270 
00271 
00272 
00273     void read(void* buffer, unsigned long length);
00274 
00275     FileReader(const FileReader&); 
00276     const FileReader& operator=(const FileReader&); 
00277     bool operator==(const FileReader&) const; 
00278     bool operator!=(const FileReader&) const; 
00279   };
00280 
00281 } // end namespace alize
00282 
00283 #endif // !defined(ALIZE_FileReader_h)
00284