Mercurial > hg > aimc
view src/Modules/Output/FileOutputHTK.h @ 33:f8fe1aadf097
-Modified AIMCopy for slices experiment
-Added gen_features script to just generate features for a given SNR
author | tomwalters |
---|---|
date | Thu, 25 Feb 2010 23:08:08 +0000 |
parents | f4e712d41321 |
children | c5f5e9569863 |
line wrap: on
line source
// Copyright 2006-2010, Thomas Walters, Willem van Engen // // AIM-C: A C++ implementation of the Auditory Image Model // http://www.acousticscale.org/AIMC // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. /*! * \file * \brief File output to HTK format * * \author Thomas Walters <tom@acousticscale.org> * \author Willem van Engen <cnbh@willem.engen.nl> * \date created 2006/10/30 * \version \$Header$ */ #ifndef AIMC_MODULES_OUTPUT_HTK_H_ #define AIMC_MODULES_OUTPUT_HTK_H_ #include "Support/Module.h" #include "Support/SignalBank.h" // Defines taken from HTKwrite.c and The HTK Book #define H_WAVEFORM 0 // sampled waveform #define H_LPC 1 // linear prediction filter coefficients #define H_LPREFC 2 // linear prediction reflection coefficients #define H_LPCEPSTRA 3 // LPC cepstral coefficients #define H_LPDELCEP 4 // LPC cepstra plus delta coefficients #define H_IREFC 5 // LPC reflection coef in 16 bit integer format #define H_MFCC 6 // mel-frequency cepstral coefficients #define H_FBANK 7 // log mel-filter bank channel outputs #define H_MELSPEC 8 // linear mel-filter bank channel outputs #define H_USER 9 // user defined sample kind #define H_DISCRETE 10 // vector quantised data #define H_PLP 11 // Perceptual Linear Prediction #define H_ANON 12 // Anonymous #define H_E 64 // has energy #define H_N 128 // absolute energy suppressed #define H_D 256 // has delta coefficients #define H_A 512 // has acceleration coefficients #define H_C 1024 // is compressed #define H_Z 2048 // has zero mean static coef. #define H_K 4096 // has CRC checksum #define H_O 8192 // has 0th cepstral coef. #define H_V 16384 // Attach vq index #define H_T 32768 // Attach delta-delta-delta index // HTK fomat is big-endian... #define ByteSwap16(n) \ ( ((((uint16_t) n) << 8) & 0xFF00) | \ ((((uint16_t) n) >> 8) & 0x00FF) ) #define ByteSwap32(n) \ ( ((((uint32_t) n) << 24) & 0xFF000000) | \ ((((uint32_t) n) << 8) & 0x00FF0000) | \ ((((uint32_t) n) >> 8) & 0x0000FF00) | \ ((((uint32_t) n) >> 24) & 0x000000FF) ) namespace aimc { class FileOutputHTK : public Module { public: /*! \brief Create a new file output for an HTK format file. Use of this * class only really makes sense for the output of 1-D frames. */ explicit FileOutputHTK(Parameters *pParam); ~FileOutputHTK(); /*! \brief Initialize the output to HTK. * \param *filename Filename of the ouptut file to be created. * If the file exists it will be overwritten * \return Returns true on success of initialization. */ bool OpenFile(const char *filename, float frame_period_ms); bool CloseFile(); virtual void Process(const SignalBank &input); private: virtual bool InitializeInternal(const SignalBank &input); virtual void ResetInternal(); float ByteSwapFloat(float d); void WriteHeader(int nelements, float sampPeriod); /*! \brief Whether initialization is done or not */ bool header_written_; /*! \brief Internal pointer to the output file */ FILE *file_handle_; /*! \brief Count of the number of samples in the file, written on close */ int sample_count_; int channel_count_; int buffer_length_; float frame_period_ms_; }; } // namespace aimc #endif // AIMC_MODULES_OUTPUT_HTK_H_