49 #include "fe_prespch_buf.h"
83 fe_prespch_init(
int num_frames,
int num_cepstra,
int num_samples)
89 prespch_buf->num_cepstra = num_cepstra;
90 prespch_buf->num_frames_cep = num_frames;
91 prespch_buf->num_samples = num_samples;
92 prespch_buf->num_frames_pcm = 0;
94 prespch_buf->cep_write_ptr = 0;
95 prespch_buf->cep_read_ptr = 0;
96 prespch_buf->ncep = 0;
98 prespch_buf->pcm_write_ptr = 0;
99 prespch_buf->pcm_read_ptr = 0;
100 prespch_buf->npcm = 0;
102 prespch_buf->cep_buf = (mfcc_t **)
104 sizeof(**prespch_buf->cep_buf));
106 prespch_buf->pcm_buf = (int16 *)
107 ckd_calloc(prespch_buf->num_frames_pcm * prespch_buf->num_samples,
115 fe_prespch_read_cep(
prespch_buf_t * prespch_buf, mfcc_t * feat)
117 if (prespch_buf->ncep == 0)
119 memcpy(feat, prespch_buf->cep_buf[prespch_buf->cep_read_ptr],
120 sizeof(mfcc_t) * prespch_buf->num_cepstra);
121 prespch_buf->cep_read_ptr = (prespch_buf->cep_read_ptr + 1) % prespch_buf->num_frames_cep;
127 fe_prespch_write_cep(
prespch_buf_t * prespch_buf, mfcc_t * feat)
129 memcpy(prespch_buf->cep_buf[prespch_buf->cep_write_ptr], feat,
130 sizeof(mfcc_t) * prespch_buf->num_cepstra);
131 prespch_buf->cep_write_ptr = (prespch_buf->cep_write_ptr + 1) % prespch_buf->num_frames_cep;
132 if (prespch_buf->ncep < prespch_buf->num_frames_cep) {
135 prespch_buf->cep_read_ptr = (prespch_buf->cep_read_ptr + 1) % prespch_buf->num_frames_cep;
140 fe_prespch_read_pcm(
prespch_buf_t * prespch_buf, int16 *samples,
144 int16 *cursample = samples;
145 *samples_num = prespch_buf->npcm * prespch_buf->num_samples;
146 for (i = 0; i < prespch_buf->npcm; i++) {
147 memcpy(cursample, &prespch_buf->pcm_buf[prespch_buf->pcm_read_ptr * prespch_buf->num_samples],
148 prespch_buf->num_samples *
sizeof(int16));
149 prespch_buf->pcm_read_ptr = (prespch_buf->pcm_read_ptr + 1) % prespch_buf->num_frames_pcm;
151 prespch_buf->pcm_read_ptr = 0;
152 prespch_buf->pcm_write_ptr = 0;
153 prespch_buf->npcm = 0;
158 fe_prespch_write_pcm(
prespch_buf_t * prespch_buf, int16 * samples)
162 sample_ptr = prespch_buf->pcm_write_ptr * prespch_buf->num_samples;
163 memcpy(&prespch_buf->pcm_buf[sample_ptr], samples,
164 prespch_buf->num_samples *
sizeof(int16));
166 prespch_buf->pcm_write_ptr = (prespch_buf->pcm_write_ptr + 1) % prespch_buf->num_frames_pcm;
167 if (prespch_buf->npcm < prespch_buf->num_frames_pcm) {
170 prespch_buf->pcm_read_ptr = (prespch_buf->pcm_read_ptr + 1) % prespch_buf->num_frames_pcm;
177 prespch_buf->cep_read_ptr = 0;
178 prespch_buf->cep_write_ptr = 0;
179 prespch_buf->ncep = 0;
185 prespch_buf->pcm_read_ptr = 0;
186 prespch_buf->pcm_write_ptr = 0;
187 prespch_buf->npcm = 0;
195 if (prespch_buf->cep_buf)
197 if (prespch_buf->pcm_buf)
205 return prespch_buf->ncep;
#define ckd_calloc_2d(d1, d2, sz)
Macro for ckd_calloc_2d
#define ckd_calloc(n, sz)
Macros to simplify the use of above functions.
Sphinx's memory allocation/deallocation routines.
SPHINXBASE_EXPORT void ckd_free(void *ptr)
Test and free a 1-D array.
Implementation of logging routines.
SPHINXBASE_EXPORT void ckd_free_2d(void *ptr)
Free a 2-D array (ptr) previously allocated by ckd_calloc_2d.