FE_endpoint.h
上传用户:italyroyal
上传日期:2013-05-06
资源大小:473k
文件大小:4k
源码类别:

语音合成与识别

开发平台:

Visual C++

  1. ///////////////////////////////////////////////////////////////////////////////
  2. // This is a part of the Feature program.
  3. // Version: 1.0
  4. // Date: February 22, 2003
  5. // Programmer: Oh-Wook Kwon
  6. // Copyright(c) 2003 Oh-Wook Kwon. All rights reserved. owkwon@ucsd.edu
  7. ///////////////////////////////////////////////////////////////////////////////
  8. #ifndef _FE_ENDPOINT_H_ #define _FE_ENDPOINT_H_
  9. #include "FE_common.h"
  10. /*-----------------------------------*/
  11. /* Definition for endpoint detectors */
  12. /*-----------------------------------*/
  13. #define EPD_MAX_RECORD_TIME      10           /* 10 seconds */
  14. #define EPD_WAV_BUF_SIZE         (EPD_MAX_RECORD_TIME*16000)   /* 10 seconds at 16 kHz mono sampling frequency */
  15. #define EPD_FRAME_SHIFT_IN_MS    10           /* frame shift in millisecond (10 ms) */
  16. #define EPD_MAX_WIN_SIZE         512          /* maximum window size */
  17. /*-----------------------------------*/
  18. /* Definition for endpoint detectors */
  19. /*-----------------------------------*/
  20. #define EPD_MAX_PAUSE_IN_MS      2000         /* maximum duration of long-pause in millisecond (<=2000 ms) */
  21. /*-----------------*/
  22. /* Type definition */
  23. /*-----------------*/
  24. typedef enum {
  25. EPD_STATUS_WAITING,
  26. EPD_STATUS_SPEECH,
  27. EPD_STATUS_PAUSE,
  28. EPD_STATUS_ENDPOINT
  29. } EpdLocalStatus;
  30. typedef enum {
  31. EPD_FK_SILENCE=0,
  32. EPD_FK_SPEECH
  33. } EpdFrameKind;
  34. /*----------------*/
  35. /* Data structure */
  36. /*----------------*/
  37. typedef struct {
  38. int   m_sampleRate;
  39. int   m_shiftSize; /* Shift size in samples (10 ms) */
  40. int   m_winSize; /* Window size in samples, same as feature extraction. */
  41. int   m_threshFrameN;
  42. int   m_startFrameN;
  43. int   m_endFrameN;
  44. int   m_startSilenceFrameN;
  45. int   m_endSilenceFrameN;
  46. int   m_longPauseFrameN; /* to detect utterance end-point */
  47. } EpdParm;
  48. #ifdef _DEBUG
  49. #define EPD_SPEECH_BUF_SIZE         EPD_WAV_BUF_SIZE
  50. #define EPD_FRAME_BUF_SIZE          (EPD_MAX_RECORD_TIME*100) /* assuming 10 ms frame shift */
  51. #else
  52. #define EPD_SPEECH_BUF_SIZE         ((EPD_MAX_PAUSE_IN_MS/10+1)*EPD_MAX_WIN_SIZE)  /* to save memory */
  53. #define EPD_FRAME_BUF_SIZE          (EPD_MAX_PAUSE_IN_MS/10+1)  /* to save memory */
  54. #endif
  55. #define EPD_BUF_SIZE                7
  56. class Epd {
  57. public:
  58. /* fixed part */
  59. int   m_isActive;
  60. int   m_isAudio;
  61. EpdParm m_config;
  62. /* adaptive part */
  63. long m_uttBeginX; /* start sample point of speech */
  64. long m_uttEndX; /* end sample point of speech */
  65. long m_localFrameX; /* local time frame index */
  66. /* adaptive noise estimation */
  67. float m_lambdaLTE;
  68. float m_noiseEn;
  69. float m_lambdaLTEhigherE;
  70. int m_nbSpeechFrame;
  71. int m_nbFrameEpd;
  72. EpdFrameKind m_flagVAD;
  73. /* ZCR tracking */
  74. float m_noiseLevel;
  75. float m_lambdaZcr;
  76. float m_meanZcr;
  77. /* SNR tracking */
  78. float m_signalEn;
  79. float m_lambdaSignalE;
  80. long m_absTimeX;
  81. float m_lastSnr;
  82. /* working variables */
  83. EpdLocalStatus m_localStatus; /* The status of EPD must be hidden to other modules */
  84. EpdFrameKind m_isSpeechA[EPD_FRAME_BUF_SIZE];
  85. float m_zcrA[EPD_FRAME_BUF_SIZE]; /* to remove breath noise */
  86. long m_sampleEndX; /* end sample point to input audio */
  87. short m_epdSpeech[EPD_SPEECH_BUF_SIZE];
  88. int m_speechSegN; /* number of detected speech segments */
  89. /*--------------------*/
  90. /* Member functions */
  91. /*--------------------*/
  92. Epd();
  93. virtual ~Epd();
  94. int Init(int samplingRate, int isAudio, int isActive, int isDenoised);
  95. int InitNewUtterance();
  96. FeReturnCode OneFrame(float *in, float *out, int frameX, int winSize, FeReturnCode inStatus, EpdFrameKind *frameKind);
  97. int GetOutput(short *sampleA, int maxSampleN);
  98. void Close();
  99. void SetMaxPause(int msec);
  100. #ifdef _DEBUG
  101. int SaveOutput(const char *fname, int offsetX);
  102. #endif
  103. private:
  104. int ParmInit(EpdParm *epdParm, int samplingRate, int isDenoised);
  105. int PutSample(float *sampleA, int sampleN);
  106. int FindBeginPoint(int startX);
  107. int FindEndPoint(int startX, int reqSilN);
  108. int SaveAudio(const char *fname, int begX, int endX);
  109. EpdFrameKind OneFrame(const float *s);
  110. };
  111. #endif