| /*---------------------------------------------------------------------------* |
| * nisthdr.h * |
| * * |
| * Copyright 2007, 2008 Nuance Communciations, Inc. * |
| * * |
| * Licensed under the Apache License, Version 2.0 (the 'License'); * |
| * you may not use this file except in compliance with the License. * |
| * * |
| * You may obtain a copy of the License at * |
| * http://www.apache.org/licenses/LICENSE-2.0 * |
| * * |
| * Unless required by applicable law or agreed to in writing, software * |
| * distributed under the License is distributed on an 'AS IS' BASIS, * |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * |
| * See the License for the specific language governing permissions and * |
| * limitations under the License. * |
| * * |
| *---------------------------------------------------------------------------*/ |
| |
| #ifndef DO_CLEANUP_20070723 |
| #ifndef _NISTHDR_H_ |
| #define _NISTHDR_H_ |
| |
| |
| |
| |
| /** |
| * @todo document |
| */ |
| class Nist1AHeader |
| { |
| public: |
| Nist1AHeader(void); |
| ~Nist1AHeader(void); |
| |
| int read(PFile* pF); /* returns number of chars read, errno is set |
| // Bug: Reading a header does not mean that you can write it, the read |
| // information does not automatically transfer to the writing data.*/ |
| |
| int write(PFile* pF); /* returns number of chars written, errno is set*/ |
| /* |
| // The fields are not constrained to contain values from these lists, |
| // but the existence of these lists makes it easy to use uniform naming. |
| // Use the enum to index into the matching array of strings. |
| */ |
| enum SampleFormatEnum {LINEAR_8BITS, LINEAR_16BITS}; |
| static char *mSampleFormatNames[]; |
| |
| enum SexEnum |
| { |
| FEMALE, MALE |
| }; |
| static char *mSexNames[]; |
| |
| enum SpeakerAccentEnum |
| { |
| AE |
| }; |
| static char *mSpeakerAccentNames[]; |
| |
| enum MicrophoneEnum |
| { |
| SM10, PRIMO, TELEX_STICK, AKG_Q_400 |
| }; |
| static char *mMicrophoneNames[]; |
| /* |
| // The procedure for adding a field to the header is: |
| // 1. add a name in FieldId, make it uppercase version of header entry |
| // 2. add a set function by adding declaration and definition using |
| // macro Nist1AHeaderSetDef |
| // 3. add a FieldDescription in mFieldsInit in .cpp file |
| // If you need a new data type (something besides d, l, f, or s) then |
| // you will also have to alter the union in field description and code |
| // in write() to size and print the type. Please provide predefined |
| // names with matching enums wherever possible as is done for |
| // MicrophoneNames, etc. |
| */ |
| enum FieldId |
| { |
| /* CAUTION: this order must match listing order in NistFields in cpp*/ |
| WAVE_SIZE, |
| SAMPLE_RATE, |
| SAMPLE_FORMAT, |
| COEF_EMPHASIS, |
| SPEAKER_NAME, |
| SPEAKER_AGE, |
| SPEAKER_SEX, |
| SPEAKER_ACCENT, |
| |
| SPEAKING_MODE, |
| CHANNEL_COUNT, |
| SAMPLE_COUNT, |
| SAMPLE_MIN, |
| SAMPLE_MAX, |
| SAMPLE_N_BYTES, |
| SAMPLE_BYTE_FORMAT, |
| RECORD_DATE, |
| |
| MICROPHONE, |
| MICROPHONE_POSITION, |
| RECORD_SITE, |
| DOS_PROGRAM, |
| DSP_PROGRAM, |
| LANGUAGE, |
| RECORD_TIME, |
| UTTERANCE_ID, |
| CHECK_SUM, |
| ALL_BYTE_CHECK_SUM, |
| JIN0_FRAME0, |
| AVERAGE_BACKGROUND, |
| AVERAGE_SPEECH, |
| SIGNAL_TO_NOISE, |
| PROMPT_TEXT, |
| PRONUNCIATION_TEXT, |
| RECORDING_MODE, |
| FEP_BEGSIL, |
| FEP_ENDSIL, |
| FEP_XBADJ, |
| END_HEAD /* needed to mark the end of this list*/ |
| }; |
| |
| /* remove a particular field from the header (for writing only)*/ |
| void reset(FieldId id); |
| |
| /* empties the header (for both reading and writing)*/ |
| void reset(void); |
| |
| /* CAUTION: strings are not copied, only the pointer is saved*/ |
| void setWaveSize(long n); |
| void setSampleRate(int r);/* shouldn't it be double?*/ |
| void setSampleFormat(char *format); |
| void setCoefEmphasis(double c); |
| void setSpeakerName(char *name); |
| void setSpeakerAge(char *age);/*shouln't it be int?*/ |
| void setSpeakerSex(char *sex); |
| void setSpeakerAccent(char *accent); |
| |
| void setSpeakingMode(char *mode); |
| void setChannelCount(int c); |
| void setSampleCount(long c); |
| void setSampleMin(int m); |
| void setSampleMax(int m); |
| void setSampleNBytes(int n); |
| void setSampleByteFormat(char *format); |
| void setRecordDate(char *date); |
| |
| void setMicrophone(char *mic); |
| void setMicrophonePosition(char *micPos); |
| void setRecordSite(char *site); |
| void setDosProgram(char *name); |
| void setDspProgram(char *name); |
| void setLanguage(char *lang); |
| void setRecordTime(char *time); |
| void setUtteranceId(int n); |
| void setCheckSum(long sum); |
| void setAllByteCheckSum(long sum); |
| void setJin0Frame0(int n); |
| void setAverageBackground(int n); |
| void setAverageSpeech(int n); |
| void setSignalToNoiseRatio(int n); |
| void setPromptText(char *text); |
| void setPronunciationText(char *text); |
| void setRecordingMode(char *text); |
| void setFepBegSil(int n); |
| void setFepEndSil(int n); |
| void setFepXbadj(int n); |
| |
| protected: |
| char mpCurrentTime[32]; |
| |
| class FieldDescription |
| { |
| public: |
| char *mFormat; |
| char mType; |
| union |
| { |
| int d; |
| unsigned u; |
| long l; |
| double f; |
| char *s; |
| } mValue; |
| BOOL mbInUse; |
| }; |
| |
| static FieldDescription mFieldsInit[]; |
| |
| FieldDescription *mpFields; /* each instance gets a copy of mFieldsInit*/ |
| }; |
| |
| inline void |
| Nist1AHeader::reset(FieldId id) |
| { |
| mpFields[id].mbInUse = FALSE; |
| } |
| |
| #define Nist1AHeaderSetDef(fname, argType, unionKey, fieldId)\ |
| inline void Nist1AHeader::##fname(argType x) {\ |
| mpFields[fieldId].mbInUse = TRUE;\ |
| mpFields[fieldId].mValue.##unionKey = x;} |
| |
| Nist1AHeaderSetDef(setWaveSize, long, l, WAVE_SIZE) |
| Nist1AHeaderSetDef(setSampleRate, int, d, SAMPLE_RATE) |
| Nist1AHeaderSetDef(setSampleFormat, char*, s, SAMPLE_FORMAT) |
| Nist1AHeaderSetDef(setCoefEmphasis, double, f, COEF_EMPHASIS) |
| Nist1AHeaderSetDef(setSpeakerName, char*, s, SPEAKER_NAME) |
| Nist1AHeaderSetDef(setSpeakerAge, char*, s, SPEAKER_AGE) |
| Nist1AHeaderSetDef(setSpeakerSex, char*, s, SPEAKER_SEX) |
| Nist1AHeaderSetDef(setSpeakerAccent, char*, s, SPEAKER_ACCENT) |
| |
| Nist1AHeaderSetDef(setSpeakingMode, char*, s, SPEAKING_MODE) |
| Nist1AHeaderSetDef(setChannelCount, int, d, CHANNEL_COUNT) |
| Nist1AHeaderSetDef(setSampleCount, long, l, SAMPLE_COUNT) |
| Nist1AHeaderSetDef(setSampleMin, int, d, SAMPLE_MIN) |
| Nist1AHeaderSetDef(setSampleMax, int, d, SAMPLE_MAX) |
| Nist1AHeaderSetDef(setSampleNBytes, int, d, SAMPLE_N_BYTES) |
| Nist1AHeaderSetDef(setSampleByteFormat, char*, s, SAMPLE_BYTE_FORMAT) |
| Nist1AHeaderSetDef(setRecordDate, char*, s, RECORD_DATE) |
| |
| Nist1AHeaderSetDef(setMicrophone, char*, s, MICROPHONE) |
| Nist1AHeaderSetDef(setMicrophonePosition, char*, s, MICROPHONE_POSITION) |
| Nist1AHeaderSetDef(setRecordSite, char*, s, RECORD_SITE) |
| Nist1AHeaderSetDef(setDosProgram, char*, s, DOS_PROGRAM) |
| Nist1AHeaderSetDef(setDspProgram, char*, s, DSP_PROGRAM) |
| Nist1AHeaderSetDef(setLanguage, char*, s, LANGUAGE) |
| Nist1AHeaderSetDef(setRecordTime, char*, s, RECORD_TIME) |
| Nist1AHeaderSetDef(setUtteranceId, int, d, UTTERANCE_ID) |
| Nist1AHeaderSetDef(setCheckSum, long, l, CHECK_SUM) |
| Nist1AHeaderSetDef(setAllByteCheckSum, long, l, ALL_BYTE_CHECK_SUM) |
| Nist1AHeaderSetDef(setJin0Frame0, int, d, JIN0_FRAME0) |
| Nist1AHeaderSetDef(setAverageBackground, int, d, AVERAGE_BACKGROUND) |
| Nist1AHeaderSetDef(setAverageSpeech, int, d, AVERAGE_SPEECH) |
| Nist1AHeaderSetDef(setSignalToNoiseRatio, int, d, SIGNAL_TO_NOISE) |
| Nist1AHeaderSetDef(setPromptText, char*, s, PROMPT_TEXT) |
| Nist1AHeaderSetDef(setPronunciationText, char*, s, PRONUNCIATION_TEXT) |
| Nist1AHeaderSetDef(setRecordingMode, char*, s, RECORDING_MODE) |
| Nist1AHeaderSetDef(setFepBegSil, int, d, FEP_BEGSIL) |
| Nist1AHeaderSetDef(setFepEndSil, int, d, FEP_ENDSIL) |
| Nist1AHeaderSetDef(setFepXbadj, int, d, FEP_XBADJ) |
| |
| #undef Nist1AHeaderSetDef |
| |
| #endif |
| #endif // DO_CLEANUP_20070723 |