summaryrefslogtreecommitdiffstats
path: root/WhisperNet/ExtensionMethods.cs
diff options
context:
space:
mode:
authorKonstantin <const@const.me>2023-01-16 14:52:43 +0100
committerKonstantin <const@const.me>2023-01-16 14:52:43 +0100
commit8c4603c73675958efc960fbd4bb599a2909d106a (patch)
tree714dc6fc9a1672d5fd7f89676b97e10959662abc /WhisperNet/ExtensionMethods.cs
parent990a8d0dbaefc996244097397259e92758b15cce (diff)
Source codes
Diffstat (limited to 'WhisperNet/ExtensionMethods.cs')
-rw-r--r--WhisperNet/ExtensionMethods.cs69
1 files changed, 69 insertions, 0 deletions
diff --git a/WhisperNet/ExtensionMethods.cs b/WhisperNet/ExtensionMethods.cs
new file mode 100644
index 0000000..4380ece
--- /dev/null
+++ b/WhisperNet/ExtensionMethods.cs
@@ -0,0 +1,69 @@
+using System.Runtime.InteropServices;
+using Whisper.Internal;
+
+namespace Whisper
+{
+ /// <summary>Extension methods of these COM interfaces</summary>
+ public static class ExtensionMethods
+ {
+ /// <summary>Create a context to transcribe audio with this model</summary>
+ public static Context createContext( this iModel model )
+ {
+ iContext ctx = model.createContextInternal();
+ return new Context( ctx );
+ }
+
+ /// <summary>Convert language into a short ID string, like <c>"en"</c></summary>
+ public static string getCode( this eLanguage lang )
+ {
+ unsafe
+ {
+ sbyte* ptr = stackalloc sbyte[ 5 ];
+ *(uint*)ptr = (uint)lang;
+ ptr[ 4 ] = 0;
+ return new string( ptr );
+ }
+ }
+
+ /// <summary>Resolve integer token ID into string.</summary>
+ /// <remarks>If the token ID was not found in the model, the method returns null without raising exceptions.</remarks>
+ public static string? stringFromToken( this iModel model, int idToken ) =>
+ Marshal.PtrToStringUTF8( model.stringFromTokenInternal( idToken ) );
+
+ /// <summary>List capture devices</summary>
+ public static CaptureDeviceId[]? listCaptureDevices( this iMediaFoundation mf )
+ {
+ List<CaptureDeviceId>? list = null;
+
+ pfnFoundCaptureDevices pfn = delegate ( int len, sCaptureDevice[]? arr, IntPtr pv )
+ {
+ try
+ {
+ if( len == 0 || arr == null )
+ return 1;
+
+ list = new List<CaptureDeviceId>( len );
+ foreach( var i in arr )
+ list.Add( new CaptureDeviceId( i ) );
+ return 0;
+ }
+ catch( Exception ex )
+ {
+ NativeLogger.captureException( ex );
+ return ex.HResult;
+ }
+ };
+
+ mf.listCaptureDevices( pfn, IntPtr.Zero );
+
+ return list?.ToArray();
+ }
+
+ /// <summary>Open audio capture device</summary>
+ public static iAudioCapture openCaptureDevice( this iMediaFoundation mf, in CaptureDeviceId id, sCaptureParams? cp = null )
+ {
+ sCaptureParams captureParams = cp ?? new sCaptureParams();
+ return mf.openCaptureDevice( id.endpoint, ref captureParams );
+ }
+ }
+} \ No newline at end of file