From d749351ae573de0c87751af31866d9eb726e2180 Mon Sep 17 00:00:00 2001 From: Jean-Marc Valin <jmvalin@amazon.com> Date: Mon, 5 Jun 2023 14:13:37 -0400 Subject: [PATCH] Add lpcnet_compute_single_frame_features_float() --- dnn/include/lpcnet.h | 9 +++++++++ dnn/lpcnet_enc.c | 21 +++++++++++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/dnn/include/lpcnet.h b/dnn/include/lpcnet.h index c094aec6f..fd12044c7 100644 --- a/dnn/include/lpcnet.h +++ b/dnn/include/lpcnet.h @@ -145,6 +145,15 @@ LPCNET_EXPORT int lpcnet_compute_features(LPCNetEncState *st, const short *pcm, */ LPCNET_EXPORT int lpcnet_compute_single_frame_features(LPCNetEncState *st, const short *pcm, float features[NB_TOTAL_FEATURES]); + +/** Compute features on LPCNET_FRAME_SIZE speech samples (currently 160) and output features for one 10-ms frame. + * @param [in] st <tt>LPCNetDecState*</tt>: Encoder state + * @param [in] pcm <tt>float *</tt>: Input speech to be analyzed + * @param [out] features <tt>float[NB_TOTAL_FEATURES]</tt>: Four feature vectors + * @retval 0 Success + */ +LPCNET_EXPORT int lpcnet_compute_single_frame_features_float(LPCNetEncState *st, const float *pcm, float features[NB_TOTAL_FEATURES]); + /** Gets the size of an <code>LPCNetState</code> structure. * @returns The size in bytes. */ diff --git a/dnn/lpcnet_enc.c b/dnn/lpcnet_enc.c index 054c9b1c4..e46be3705 100644 --- a/dnn/lpcnet_enc.c +++ b/dnn/lpcnet_enc.c @@ -894,13 +894,26 @@ LPCNET_EXPORT int lpcnet_compute_features(LPCNetEncState *st, const short *pcm, return 0; } -int lpcnet_compute_single_frame_features(LPCNetEncState *st, const short *pcm, float features[NB_TOTAL_FEATURES]) { - int i; - float x[FRAME_SIZE]; - for (i=0;i<FRAME_SIZE;i++) x[i] = pcm[i]; +static int lpcnet_compute_single_frame_features_impl(LPCNetEncState *st, float *x, float features[NB_TOTAL_FEATURES]) { preemphasis(x, &st->mem_preemph, x, PREEMPHASIS, FRAME_SIZE); compute_frame_features(st, x); process_single_frame(st, NULL); RNN_COPY(features, &st->features[0][0], NB_TOTAL_FEATURES); return 0; } + +int lpcnet_compute_single_frame_features(LPCNetEncState *st, const short *pcm, float features[NB_TOTAL_FEATURES]) { + int i; + float x[FRAME_SIZE]; + for (i=0;i<FRAME_SIZE;i++) x[i] = pcm[i]; + lpcnet_compute_single_frame_features_impl(st, x, features); + return 0; +} + +int lpcnet_compute_single_frame_features_float(LPCNetEncState *st, const float *pcm, float features[NB_TOTAL_FEATURES]) { + int i; + float x[FRAME_SIZE]; + for (i=0;i<FRAME_SIZE;i++) x[i] = pcm[i]; + lpcnet_compute_single_frame_features_impl(st, x, features); + return 0; +} -- GitLab