annotate trunk/src/Modules/Output/FileOutputHTK.h @ 706:f8e90b5d85fd tip

Delete CARFAC code from this repository. It has been moved to https://github.com/google/carfac Please email me with your github username to get access. I've also created a new mailing list to discuss CARFAC development: https://groups.google.com/forum/#!forum/carfac-dev
author ronw@google.com
date Thu, 18 Jul 2013 20:56:51 +0000
parents 3b22559cd848
children
rev   line source
tomwalters@280 1 // Copyright 2006-2010, Thomas Walters, Willem van Engen
tomwalters@280 2 //
tomwalters@280 3 // AIM-C: A C++ implementation of the Auditory Image Model
tomwalters@280 4 // http://www.acousticscale.org/AIMC
tomwalters@280 5 //
tomwalters@318 6 // Licensed under the Apache License, Version 2.0 (the "License");
tomwalters@318 7 // you may not use this file except in compliance with the License.
tomwalters@318 8 // You may obtain a copy of the License at
tomwalters@280 9 //
tomwalters@318 10 // http://www.apache.org/licenses/LICENSE-2.0
tomwalters@280 11 //
tomwalters@318 12 // Unless required by applicable law or agreed to in writing, software
tomwalters@318 13 // distributed under the License is distributed on an "AS IS" BASIS,
tomwalters@318 14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
tomwalters@318 15 // See the License for the specific language governing permissions and
tomwalters@318 16 // limitations under the License.
tomwalters@280 17
tomwalters@277 18 /*!
tomwalters@277 19 * \file
tomwalters@281 20 * \brief File output to HTK format
tomwalters@277 21 *
tomwalters@283 22 * \author Thomas Walters <tom@acousticscale.org>
tomwalters@280 23 * \author Willem van Engen <cnbh@willem.engen.nl>
tomwalters@277 24 * \date created 2006/10/30
tomwalters@277 25 * \version \$Header$
tomwalters@277 26 */
tomwalters@280 27
tomwalters@283 28 #ifndef AIMC_MODULES_OUTPUT_HTK_H_
tomwalters@283 29 #define AIMC_MODULES_OUTPUT_HTK_H_
tomwalters@277 30
tomwalters@402 31 #include <string>
tomwalters@402 32
tomwalters@277 33 #include "Support/Module.h"
tomwalters@277 34 #include "Support/SignalBank.h"
tomwalters@277 35
tomwalters@402 36 // Defines from HTKwrite.c and The HTK Book
tomwalters@280 37 #define H_WAVEFORM 0 // sampled waveform
tomwalters@280 38 #define H_LPC 1 // linear prediction filter coefficients
tomwalters@280 39 #define H_LPREFC 2 // linear prediction reflection coefficients
tomwalters@280 40 #define H_LPCEPSTRA 3 // LPC cepstral coefficients
tomwalters@280 41 #define H_LPDELCEP 4 // LPC cepstra plus delta coefficients
tomwalters@280 42 #define H_IREFC 5 // LPC reflection coef in 16 bit integer format
tomwalters@280 43 #define H_MFCC 6 // mel-frequency cepstral coefficients
tomwalters@280 44 #define H_FBANK 7 // log mel-filter bank channel outputs
tomwalters@280 45 #define H_MELSPEC 8 // linear mel-filter bank channel outputs
tomwalters@280 46 #define H_USER 9 // user defined sample kind
tomwalters@280 47 #define H_DISCRETE 10 // vector quantised data
tomwalters@280 48 #define H_PLP 11 // Perceptual Linear Prediction
tomwalters@280 49 #define H_ANON 12 // Anonymous
tomwalters@277 50
tomwalters@280 51 #define H_E 64 // has energy
tomwalters@280 52 #define H_N 128 // absolute energy suppressed
tomwalters@280 53 #define H_D 256 // has delta coefficients
tomwalters@280 54 #define H_A 512 // has acceleration coefficients
tomwalters@280 55 #define H_C 1024 // is compressed
tomwalters@280 56 #define H_Z 2048 // has zero mean static coef.
tomwalters@280 57 #define H_K 4096 // has CRC checksum
tomwalters@280 58 #define H_O 8192 // has 0th cepstral coef.
tomwalters@280 59 #define H_V 16384 // Attach vq index
tomwalters@280 60 #define H_T 32768 // Attach delta-delta-delta index
tomwalters@277 61
tomwalters@277 62 // HTK fomat is big-endian...
tomwalters@277 63 #define ByteSwap16(n) \
tomwalters@277 64 ( ((((uint16_t) n) << 8) & 0xFF00) | \
tomwalters@277 65 ((((uint16_t) n) >> 8) & 0x00FF) )
tomwalters@277 66
tomwalters@277 67 #define ByteSwap32(n) \
tomwalters@277 68 ( ((((uint32_t) n) << 24) & 0xFF000000) | \
tomwalters@277 69 ((((uint32_t) n) << 8) & 0x00FF0000) | \
tomwalters@277 70 ((((uint32_t) n) >> 8) & 0x0000FF00) | \
tomwalters@277 71 ((((uint32_t) n) >> 24) & 0x000000FF) )
tomwalters@277 72
tomwalters@277 73 namespace aimc {
tomwalters@402 74 using std::string;
tomwalters@277 75 class FileOutputHTK : public Module {
tomwalters@277 76 public:
tomwalters@279 77 /*! \brief Create a new file output for an HTK format file. Use of this
tomwalters@279 78 * class only really makes sense for the output of 1-D frames.
tomwalters@279 79 */
tomwalters@280 80 explicit FileOutputHTK(Parameters *pParam);
tomwalters@279 81 ~FileOutputHTK();
tomwalters@277 82
tomwalters@279 83 /*! \brief Initialize the output to HTK.
tomwalters@279 84 * \param *filename Filename of the ouptut file to be created.
tomwalters@279 85 * If the file exists it will be overwritten
tomwalters@279 86 * \return Returns true on success of initialization.
tomwalters@279 87 */
tomwalters@277 88 bool CloseFile();
tomwalters@277 89 virtual void Process(const SignalBank &input);
tomwalters@279 90 private:
tomwalters@277 91 virtual bool InitializeInternal(const SignalBank &input);
tomwalters@277 92 virtual void ResetInternal();
tomwalters@277 93
tomwalters@277 94 float ByteSwapFloat(float d);
tomwalters@277 95
tom@421 96 void WriteHeader(int nelements);
tomwalters@277 97
tomwalters@280 98 /*! \brief Whether initialization is done or not
tomwalters@280 99 */
tomwalters@279 100 bool header_written_;
tomwalters@277 101
tomwalters@280 102 /*! \brief Internal pointer to the output file
tomwalters@280 103 */
tomwalters@279 104 FILE *file_handle_;
tomwalters@277 105
tomwalters@280 106 /*! \brief Count of the number of samples in the file, written on close
tomwalters@280 107 */
tomwalters@279 108 int sample_count_;
tomwalters@402 109 string file_suffix_;
tomwalters@277 110
tomwalters@277 111 int channel_count_;
tomwalters@277 112 int buffer_length_;
tomwalters@277 113 float frame_period_ms_;
tomwalters@402 114 int previous_start_time_;
tomwalters@277 115 };
tomwalters@277 116 } // namespace aimc
tomwalters@277 117
tomwalters@283 118 #endif // AIMC_MODULES_OUTPUT_HTK_H_
tomwalters@277 119