shithub: opus

Download patch

ref: ea405cc6844ef4bc025525223c9ab3c589fc2882
parent: a7b2420300ef93fcc87c8b881b1f8985566d41ad
author: Jean-Marc Valin <jmvalin@amazon.com>
date: Mon Feb 21 17:52:39 EST 2022

Add delay-compensation for non-causal PLC

--- a/dnn/lpcnet_demo.c
+++ b/dnn/lpcnet_demo.c
@@ -164,6 +164,8 @@
         short pcm[FRAME_SIZE];
         int count=0;
         int loss=0;
+        int skip=0, extra=0;
+        if ((plc_flags&0x3) == LPCNET_PLC_NONCAUSAL) skip=extra=80;
         LPCNetPLCState *net;
         net = lpcnet_plc_create(plc_flags);
         while (1) {
@@ -176,12 +178,14 @@
             }
             if (loss) lpcnet_plc_conceal(net, pcm);
             else lpcnet_plc_update(net, pcm);
-            //if (count)
-              fwrite(pcm, sizeof(pcm[0]), FRAME_SIZE, fout);
+            fwrite(&pcm[skip], sizeof(pcm[0]), FRAME_SIZE-skip, fout);
+            skip = 0;
             count++;
         }
-        //lpcnet_plc_conceal(net, pcm);
-        //fwrite(pcm, sizeof(pcm[0]), FRAME_SIZE, fout);
+        if (extra) {
+          lpcnet_plc_conceal(net, pcm);
+          fwrite(pcm, sizeof(pcm[0]), extra, fout);
+        }
         lpcnet_plc_destroy(net);
     } else {
         fprintf(stderr, "unknown action\n");
--