/// Copyright (c) 2024.5 by 东风破 using System; using System.Runtime.InteropServices; namespace SherpaOnnx { public class SpokenLanguageIdentification : IDisposable { public SpokenLanguageIdentification(SpokenLanguageIdentificationConfig config) { IntPtr h = SherpaOnnxCreateSpokenLanguageIdentification(ref config); _handle = new HandleRef(this, h); } public OfflineStream CreateStream() { IntPtr p = SherpaOnnxSpokenLanguageIdentificationCreateOfflineStream(_handle.Handle); return new OfflineStream(p); } public SpokenLanguageIdentificationResult Compute(OfflineStream stream) { IntPtr h = SherpaOnnxSpokenLanguageIdentificationCompute(_handle.Handle, stream.Handle); SpokenLanguageIdentificationResult result = new SpokenLanguageIdentificationResult(h); SherpaOnnxDestroySpokenLanguageIdentificationResult(h); return result; } public void Dispose() { Cleanup(); // Prevent the object from being placed on the // finalization queue System.GC.SuppressFinalize(this); } ~SpokenLanguageIdentification() { Cleanup(); } private void Cleanup() { SherpaOnnxDestroySpokenLanguageIdentification(_handle.Handle); // Don't permit the handle to be used again. _handle = new HandleRef(this, IntPtr.Zero); } private HandleRef _handle; [DllImport(Dll.Filename)] private static extern IntPtr SherpaOnnxCreateSpokenLanguageIdentification(ref SpokenLanguageIdentificationConfig config); [DllImport(Dll.Filename)] private static extern void SherpaOnnxDestroySpokenLanguageIdentification(IntPtr handle); [DllImport(Dll.Filename)] private static extern IntPtr SherpaOnnxSpokenLanguageIdentificationCreateOfflineStream(IntPtr handle); [DllImport(Dll.Filename)] private static extern IntPtr SherpaOnnxSpokenLanguageIdentificationCompute(IntPtr handle, IntPtr stream); [DllImport(Dll.Filename)] private static extern void SherpaOnnxDestroySpokenLanguageIdentificationResult(IntPtr handle); } }