From a2d6575d89c2ad6221d6ccc9ef148acad8c29b0c Mon Sep 17 00:00:00 2001
From: manyeyes <32889020+manyeyes@users.noreply.github.com>
Date: 星期四, 14 三月 2024 17:11:25 +0800
Subject: [PATCH] Improving FBank computation and implementing the dispose method (#1497)

---
 runtime/csharp/AliFsmnVad/AliFsmnVadSharp/WavFrontend.cs |   67 +++++++++++++++------------------
 1 files changed, 31 insertions(+), 36 deletions(-)

diff --git a/runtime/csharp/AliFsmnVad/AliFsmnVadSharp/WavFrontend.cs b/runtime/csharp/AliFsmnVad/AliFsmnVadSharp/WavFrontend.cs
index 2c5b50f..6ffb79f 100644
--- a/runtime/csharp/AliFsmnVad/AliFsmnVadSharp/WavFrontend.cs
+++ b/runtime/csharp/AliFsmnVad/AliFsmnVadSharp/WavFrontend.cs
@@ -1,30 +1,23 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using AliFsmnVadSharp.Model;
-using AliFsmnVadSharp.DLL;
-using AliFsmnVadSharp.Struct;
-using System.Runtime.InteropServices;
+锘縰sing AliFsmnVadSharp.Model;
+using KaldiNativeFbankSharp;
 
 namespace AliFsmnVadSharp
 {
-    internal class WavFrontend
+    internal class WavFrontend : IDisposable
     {
-        private string _mvnFilePath;
+        private bool _disposed;
+
         private FrontendConfEntity _frontendConfEntity;
-        IntPtr _opts = IntPtr.Zero;
+        OnlineFbank _onlineFbank;
         private CmvnEntity _cmvnEntity;
 
         private static int _fbank_beg_idx = 0;
 
         public WavFrontend(string mvnFilePath, FrontendConfEntity frontendConfEntity)
         {
-            _mvnFilePath = mvnFilePath;
             _frontendConfEntity = frontendConfEntity;
             _fbank_beg_idx = 0;
-            _opts = KaldiNativeFbank.GetFbankOptions(
+            _onlineFbank = new OnlineFbank(
                 dither: _frontendConfEntity.dither,
                 snip_edges: true,
                 sample_rate: _frontendConfEntity.fs,
@@ -37,28 +30,7 @@
         {
             float sample_rate = _frontendConfEntity.fs;
             samples = samples.Select((float x) => x * 32768f).ToArray();
-            // method1
-            //FbankDatas fbankDatas = new FbankDatas();
-            //KaldiNativeFbank.GetFbanks(_knfOnlineFbank, framesNum,ref fbankDatas);
-            // method2
-            KnfOnlineFbank _knfOnlineFbank = KaldiNativeFbank.GetOnlineFbank(_opts);
-            KaldiNativeFbank.AcceptWaveform(_knfOnlineFbank, sample_rate, samples, samples.Length);
-            KaldiNativeFbank.InputFinished(_knfOnlineFbank);
-            int framesNum = KaldiNativeFbank.GetNumFramesReady(_knfOnlineFbank);
-            float[] fbanks = new float[framesNum * 80];
-            for (int i = 0; i < framesNum; i++)
-            {
-                FbankData fbankData = new FbankData();
-                KaldiNativeFbank.GetFbank(_knfOnlineFbank, i, ref fbankData);
-                float[] _fbankData = new float[fbankData.data_length];
-                Marshal.Copy(fbankData.data, _fbankData, 0, fbankData.data_length);
-                Array.Copy(_fbankData, 0, fbanks, i * 80, _fbankData.Length);
-                fbankData.data = IntPtr.Zero;
-                _fbankData = null;
-            }
-
-            samples = null;
-            GC.Collect();
+            float[] fbanks = _onlineFbank.GetFbank(samples);
             return fbanks;
         }
 
@@ -180,6 +152,29 @@
             cmvnEntity.Vars = vars_list;
             return cmvnEntity;
         }
+        protected virtual void Dispose(bool disposing)
+        {
+            if (!_disposed)
+            {
+                if (disposing)
+                {
+                    if (_onlineFbank != null)
+                    {
+                        _onlineFbank.Dispose();
+                    }
+                }
+                _disposed = true;
+            }
+        }
 
+        public void Dispose()
+        {
+            Dispose(disposing: true);
+            GC.SuppressFinalize(this);
+        }
+        ~WavFrontend()
+        {
+            Dispose(_disposed);
+        }
     }
 }

--
Gitblit v1.9.1