annotate trunk/src/Modules/Output/FileOutputHTK.h @ 402:69466da9745e

- Massive refactoring to make module tree stuff work. In theory we now support configuration files again. The graphics stuff is untested as yet.
author tomwalters
date Mon, 18 Oct 2010 04:42:28 +0000
parents 30dde71d0230
children 3b22559cd848
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
tomwalters@279 96 void WriteHeader(int nelements, float sampPeriod);
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