ref: 71a26567687318d702f7972676faffafe91efa0a
parent: d490fbf50a6060a78e3304e354718f0a0d4b2e83
author: Jean-Marc Valin <jmvalin@amazon.com>
date: Fri Oct 29 22:35:06 EDT 2021
Fix potential overflow in training data for large signals
--- a/dnn/dump_data.c
+++ b/dnn/dump_data.c
@@ -74,7 +74,14 @@
}
}
+static short float2short(float x)
+{
+ int i;
+ i = (int)floor(.5+x);
+ return IMAX(-32767, IMIN(32767, i));
+}
+
void write_audio(LPCNetEncState *st, const short *pcm, const int *noise, FILE *file, int nframes) {
int i, k;
for (k=0;k<nframes;k++) {
@@ -86,7 +93,7 @@
for (j=0;j<LPC_ORDER;j++) p -= st->features[k][NB_BANDS+2+j]*st->sig_mem[j];
e = lin2ulaw(pcm[k*FRAME_SIZE+i] - p);
/* Signal in. */
- data[2*i] = st->sig_mem[0];
+ data[2*i] = float2short(st->sig_mem[0]);
/* Signal out. */
data[2*i+1] = pcm[k*FRAME_SIZE+i];
/* Simulate error on excitation. */
@@ -99,13 +106,6 @@
}
fwrite(data, 4*FRAME_SIZE, 1, file);
}
-}
-
-static short float2short(float x)
-{
- int i;
- i = (int)floor(.5+x);
- return IMAX(-32767, IMIN(32767, i));
}
int main(int argc, char **argv) {
--
⑨