From a3efe939e823d374eeae9a621f41e72bfcf69a09 Mon Sep 17 00:00:00 2001 From: PopSlime Date: Wed, 7 May 2025 22:56:32 +0800 Subject: [PATCH] fix: Fix TTS COM exception in IL2CPP --- .../Cryville.EEW.Unity.asmdef | 1 + Assets/Cryville.EEW.Unity/TTSWorker.cs | 7 +- Assets/Plugins/Windows/Interop.SpeechLib.dll | Bin 165376 -> 0 bytes .../Windows/Interop.SpeechLib.dll.meta | 76 -- Assets/Plugins/Windows/Interop.SpeechLib.meta | 8 + .../EnumeratorToEnumVariantMarshaler.cs | 102 +++ .../EnumeratorToEnumVariantMarshaler.cs.meta | 11 + .../Interop.SpeechLib/IEnumSpObjectTokens.cs | 29 + .../IEnumSpObjectTokens.cs.meta | 11 + .../Windows/Interop.SpeechLib/ISpDataKey.cs | 47 + .../Interop.SpeechLib/ISpDataKey.cs.meta | 11 + .../Interop.SpeechLib/ISpEventSource.cs | 41 + .../Interop.SpeechLib/ISpEventSource.cs.meta | 11 + .../Interop.SpeechLib/ISpNotifySink.cs | 14 + .../Interop.SpeechLib/ISpNotifySink.cs.meta | 11 + .../Interop.SpeechLib/ISpNotifySource.cs | 32 + .../Interop.SpeechLib/ISpNotifySource.cs.meta | 11 + .../Interop.SpeechLib/ISpObjectToken.cs | 77 ++ .../Interop.SpeechLib/ISpObjectToken.cs.meta | 11 + .../ISpObjectTokenCategory.cs | 65 ++ .../ISpObjectTokenCategory.cs.meta | 11 + .../ISpPhoneticAlphabetSelection.cs | 17 + .../ISpPhoneticAlphabetSelection.cs.meta | 11 + .../Interop.SpeechLib/ISpStreamFormat.cs | 49 ++ .../Interop.SpeechLib/ISpStreamFormat.cs.meta | 11 + .../Windows/Interop.SpeechLib/ISpVoice.cs | 117 +++ .../Interop.SpeechLib/ISpVoice.cs.meta | 11 + .../Interop.SpeechLib/ISpeechAudioFormat.cs | 47 + .../ISpeechAudioFormat.cs.meta | 11 + .../Interop.SpeechLib/ISpeechBaseStream.cs | 36 + .../ISpeechBaseStream.cs.meta | 11 + .../Interop.SpeechLib/ISpeechDataKey.cs | 64 ++ .../Interop.SpeechLib/ISpeechDataKey.cs.meta | 11 + .../Interop.SpeechLib/ISpeechObjectToken.cs | 85 ++ .../ISpeechObjectToken.cs.meta | 11 + .../ISpeechObjectTokenCategory.cs | 46 + .../ISpeechObjectTokenCategory.cs.meta | 11 + .../Interop.SpeechLib/ISpeechObjectTokens.cs | 31 + .../ISpeechObjectTokens.cs.meta | 11 + .../Windows/Interop.SpeechLib/ISpeechVoice.cs | 183 ++++ .../Interop.SpeechLib/ISpeechVoice.cs.meta | 11 + .../Interop.SpeechLib/ISpeechVoiceStatus.cs | 96 +++ .../ISpeechVoiceStatus.cs.meta | 11 + .../Interop.SpeechLib/ISpeechWaveFormatEx.cs | 89 ++ .../ISpeechWaveFormatEx.cs.meta | 11 + .../Interop.SpeechLib.asmdef | 18 + .../Interop.SpeechLib.asmdef.meta | 7 + .../Interop.SpeechLib/SPDATAKEYLOCATION.cs | 11 + .../SPDATAKEYLOCATION.cs.meta | 11 + .../Windows/Interop.SpeechLib/SPEVENT.cs | 21 + .../Windows/Interop.SpeechLib/SPEVENT.cs.meta | 11 + .../Windows/Interop.SpeechLib/SPEVENTENUM.cs | 47 + .../Interop.SpeechLib/SPEVENTENUM.cs.meta | 11 + .../Interop.SpeechLib/SPEVENTSOURCEINFO.cs | 13 + .../SPEVENTSOURCEINFO.cs.meta | 11 + .../Windows/Interop.SpeechLib/SPVISEMES.cs | 29 + .../Interop.SpeechLib/SPVISEMES.cs.meta | 11 + .../Interop.SpeechLib/SPVOICESTATUS.cs | 35 + .../Interop.SpeechLib/SPVOICESTATUS.cs.meta | 11 + .../Windows/Interop.SpeechLib/SPVPRIORITY.cs | 10 + .../Interop.SpeechLib/SPVPRIORITY.cs.meta | 11 + .../Interop.SpeechLib/SpAudioFormat.cs | 53 ++ .../Interop.SpeechLib/SpAudioFormat.cs.meta | 11 + .../Interop.SpeechLib/SpMMAudioEnum.cs | 34 + .../Interop.SpeechLib/SpMMAudioEnum.cs.meta | 11 + .../Interop.SpeechLib/SpObjectToken.cs | 157 ++++ .../Interop.SpeechLib/SpObjectToken.cs.meta | 11 + .../SpObjectTokenCategory.cs | 106 +++ .../SpObjectTokenCategory.cs.meta | 11 + .../Windows/Interop.SpeechLib/SpVoice.cs | 322 +++++++ .../Windows/Interop.SpeechLib/SpVoice.cs.meta | 11 + .../Interop.SpeechLib/SpWaveFormatEx.cs | 95 +++ .../Interop.SpeechLib/SpWaveFormatEx.cs.meta | 11 + .../SpeechAudioFormatType.cs | 81 ++ .../SpeechAudioFormatType.cs.meta | 11 + .../SpeechDataKeyLocation.cs | 8 + .../SpeechDataKeyLocation.cs.meta | 11 + .../Interop.SpeechLib/SpeechRunState.cs | 6 + .../Interop.SpeechLib/SpeechRunState.cs.meta | 11 + .../SpeechStreamSeekPositionType.cs | 7 + .../SpeechStreamSeekPositionType.cs.meta | 11 + .../Interop.SpeechLib/SpeechTokenContext.cs | 9 + .../SpeechTokenContext.cs.meta | 11 + .../SpeechTokenShellFolder.cs | 8 + .../SpeechTokenShellFolder.cs.meta | 11 + .../Interop.SpeechLib/SpeechVisemeFeature.cs | 7 + .../SpeechVisemeFeature.cs.meta | 11 + .../Interop.SpeechLib/SpeechVisemeType.cs | 26 + .../SpeechVisemeType.cs.meta | 11 + .../Interop.SpeechLib/SpeechVoiceEvents.cs | 15 + .../SpeechVoiceEvents.cs.meta | 11 + .../Interop.SpeechLib/SpeechVoicePriority.cs | 7 + .../SpeechVoicePriority.cs.meta | 11 + .../SpeechVoiceSpeakFlags.cs | 19 + .../SpeechVoiceSpeakFlags.cs.meta | 11 + .../Windows/Interop.SpeechLib/_FILETIME.cs | 10 + .../Interop.SpeechLib/_FILETIME.cs.meta | 11 + .../Interop.SpeechLib/_ISpeechVoiceEvents.cs | 805 ++++++++++++++++++ .../_ISpeechVoiceEvents.cs.meta | 11 + .../Interop.SpeechLib/_LARGE_INTEGER.cs | 13 + .../Interop.SpeechLib/_LARGE_INTEGER.cs.meta | 11 + .../Interop.SpeechLib/_RemotableHandle.cs | 11 + .../_RemotableHandle.cs.meta | 11 + .../__MIDL_IWinTypes_0009.cs | 12 + .../__MIDL_IWinTypes_0009.cs.meta | 11 + .../Windows/Interop.SpeechLib/tagSTATSTG.cs | 30 + .../Interop.SpeechLib/tagSTATSTG.cs.meta | 11 + 107 files changed, 3862 insertions(+), 79 deletions(-) delete mode 100644 Assets/Plugins/Windows/Interop.SpeechLib.dll delete mode 100644 Assets/Plugins/Windows/Interop.SpeechLib.dll.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/EnumeratorToEnumVariantMarshaler.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/EnumeratorToEnumVariantMarshaler.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/IEnumSpObjectTokens.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/IEnumSpObjectTokens.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpDataKey.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpDataKey.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpEventSource.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpEventSource.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpNotifySink.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpNotifySink.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpNotifySource.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpNotifySource.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpObjectToken.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpObjectToken.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpObjectTokenCategory.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpObjectTokenCategory.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpPhoneticAlphabetSelection.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpPhoneticAlphabetSelection.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpStreamFormat.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpStreamFormat.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpVoice.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpVoice.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpeechAudioFormat.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpeechAudioFormat.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpeechBaseStream.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpeechBaseStream.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpeechDataKey.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpeechDataKey.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectToken.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectToken.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectTokenCategory.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectTokenCategory.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectTokens.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectTokens.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpeechVoice.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpeechVoice.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpeechVoiceStatus.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpeechVoiceStatus.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpeechWaveFormatEx.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/ISpeechWaveFormatEx.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/Interop.SpeechLib.asmdef create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/Interop.SpeechLib.asmdef.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SPDATAKEYLOCATION.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SPDATAKEYLOCATION.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SPEVENT.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SPEVENT.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SPEVENTENUM.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SPEVENTENUM.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SPEVENTSOURCEINFO.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SPEVENTSOURCEINFO.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SPVISEMES.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SPVISEMES.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SPVOICESTATUS.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SPVOICESTATUS.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SPVPRIORITY.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SPVPRIORITY.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpAudioFormat.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpAudioFormat.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpMMAudioEnum.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpMMAudioEnum.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpObjectToken.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpObjectToken.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpObjectTokenCategory.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpObjectTokenCategory.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpVoice.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpVoice.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpWaveFormatEx.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpWaveFormatEx.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechAudioFormatType.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechAudioFormatType.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechDataKeyLocation.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechDataKeyLocation.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechRunState.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechRunState.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechStreamSeekPositionType.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechStreamSeekPositionType.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechTokenContext.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechTokenContext.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechTokenShellFolder.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechTokenShellFolder.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechVisemeFeature.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechVisemeFeature.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechVisemeType.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechVisemeType.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoiceEvents.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoiceEvents.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoicePriority.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoicePriority.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoiceSpeakFlags.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoiceSpeakFlags.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/_FILETIME.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/_FILETIME.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/_ISpeechVoiceEvents.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/_ISpeechVoiceEvents.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/_LARGE_INTEGER.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/_LARGE_INTEGER.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/_RemotableHandle.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/_RemotableHandle.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/__MIDL_IWinTypes_0009.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/__MIDL_IWinTypes_0009.cs.meta create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/tagSTATSTG.cs create mode 100644 Assets/Plugins/Windows/Interop.SpeechLib/tagSTATSTG.cs.meta diff --git a/Assets/Cryville.EEW.Unity/Cryville.EEW.Unity.asmdef b/Assets/Cryville.EEW.Unity/Cryville.EEW.Unity.asmdef index ffbcdd6..0984092 100644 --- a/Assets/Cryville.EEW.Unity/Cryville.EEW.Unity.asmdef +++ b/Assets/Cryville.EEW.Unity/Cryville.EEW.Unity.asmdef @@ -3,6 +3,7 @@ "rootNamespace": "", "references": [ "GUID:b92f9c7ac10b1c04e86fc48210f62ab1", + "GUID:1e0937e40dadba24a97b7342c4559580", "GUID:e5b7e7f40a80a814ba706299d68f9213", "GUID:da293eebbcb9a4947a212534c52d1a32" ], diff --git a/Assets/Cryville.EEW.Unity/TTSWorker.cs b/Assets/Cryville.EEW.Unity/TTSWorker.cs index 667c19d..7c3e1f3 100644 --- a/Assets/Cryville.EEW.Unity/TTSWorker.cs +++ b/Assets/Cryville.EEW.Unity/TTSWorker.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace Cryville.EEW.Unity { class TTSWorker : Core.Audio.TTSWorker { - readonly SpVoiceClass _voice; + readonly ISpVoice _voice; public TTSWorker() : base(CreateSoundPlayer()) { try { @@ -34,14 +34,15 @@ namespace Cryville.EEW.Unity { if (_voice == null) return Task.CompletedTask; _voice.Speak( string.Format(CultureInfo.InvariantCulture, "{1}", culture.LCID, content), - SpeechVoiceSpeakFlags.SVSFlagsAsync | SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak + (uint)(SpeechVoiceSpeakFlags.SVSFlagsAsync | SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak), + out _ ); return Task.CompletedTask; } protected override void StopCurrent() { if (_voice == null) return; - _voice.Skip("SENTENCE", int.MaxValue); + _voice.Skip("SENTENCE", int.MaxValue, out _); } } } diff --git a/Assets/Plugins/Windows/Interop.SpeechLib.dll b/Assets/Plugins/Windows/Interop.SpeechLib.dll deleted file mode 100644 index c5c5fc2e49ac04481caa9c26b802ff238e256218..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165376 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 diff --git a/Assets/Plugins/Windows/Interop.SpeechLib.dll.meta b/Assets/Plugins/Windows/Interop.SpeechLib.dll.meta deleted file mode 100644 index 9ac294d..0000000 --- a/Assets/Plugins/Windows/Interop.SpeechLib.dll.meta +++ /dev/null @@ -1,76 +0,0 @@ -fileFormatVersion: 2 -guid: 17df7db50754b8f459aa29934b507000 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude Android: 1 - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 0 - Exclude Win64: 0 - - first: - Android: Android - second: - enabled: 0 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 1 - settings: - CPU: x86 - - first: - Standalone: Win64 - second: - enabled: 1 - settings: - CPU: x86_64 - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib.meta b/Assets/Plugins/Windows/Interop.SpeechLib.meta new file mode 100644 index 0000000..466a23d --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 33ce0e71590119e4f803932e358b4593 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/EnumeratorToEnumVariantMarshaler.cs b/Assets/Plugins/Windows/Interop.SpeechLib/EnumeratorToEnumVariantMarshaler.cs new file mode 100644 index 0000000..ae9f07d --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/EnumeratorToEnumVariantMarshaler.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + ///

Marshals the COM interface to the .NET Framework interface, and vice versa. + public class EnumeratorToEnumVariantMarshaler : ICustomMarshaler { + [ComImport] + [Guid("00020404-0000-0000-C000-000000000046")] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + private interface IEnumVARIANT { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Next(int celt, [MarshalAs(UnmanagedType.Struct)] out object rgvar, out uint pceltFetched); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Skip(uint celt); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Reset(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [return: MarshalAs(UnmanagedType.Interface)] + IEnumVARIANT Clone(); + } + + private class VARIANTEnumerator : IEnumerator { + private IEnumVARIANT com_enum; + + private object current; + + public object Current => current; + + public VARIANTEnumerator(IEnumVARIANT com_enum) { + this.com_enum = com_enum; + } + + public bool MoveNext() { + uint pceltFetched = 0u; + com_enum.Next(1, out var rgvar, out pceltFetched); + if (pceltFetched == 0) { + return false; + } + current = rgvar; + return true; + } + + public void Reset() { + com_enum.Reset(); + } + } + + private static EnumeratorToEnumVariantMarshaler instance; + + /// Performs necessary cleanup of the managed data when it is no longer needed. + /// The managed object to be destroyed. + public void CleanUpManagedData(object pManagedObj) { + throw new NotImplementedException(); + } + + /// Performs necessary cleanup of the unmanaged data when it is no longer needed. + /// A pointer to the unmanaged data to be destroyed. + public void CleanUpNativeData(IntPtr pNativeData) { + Marshal.Release(pNativeData); + } + + /// Returns an instance of the custom marshaler. + /// String "cookie" parameter that can be used by the custom marshaler. + /// An instance of the custom marshaler. + public static ICustomMarshaler GetInstance(string pstrCookie) { + if (instance == null) { + instance = new EnumeratorToEnumVariantMarshaler(); + } + return instance; + } + + /// Returns the size in bytes of the unmanaged data to be marshaled. + /// -1 to indicate the type this marshaler handles is not a value type. + public int GetNativeDataSize() { + throw new NotImplementedException(); + } + + /// Marshals an object from managed code to unmanaged code. + /// The managed object to be converted. + /// A pointer to the unmanaged object. + /// + /// is . + public IntPtr MarshalManagedToNative(object pManagedObj) { + throw new NotImplementedException(); + } + + /// Marshals an object from unmanaged code to managed code. + /// A pointer to the unmanaged object to be converted. + /// A managed object. + /// + /// is . + /// The unmanaged object that points to could not be converted. + public object MarshalNativeToManaged(IntPtr pNativeData) { + return new VARIANTEnumerator((IEnumVARIANT)Marshal.GetObjectForIUnknown(pNativeData)); + } + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/EnumeratorToEnumVariantMarshaler.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/EnumeratorToEnumVariantMarshaler.cs.meta new file mode 100644 index 0000000..78ead31 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/EnumeratorToEnumVariantMarshaler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 57f24b2017eba4d4eb634cf86ae099af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/IEnumSpObjectTokens.cs b/Assets/Plugins/Windows/Interop.SpeechLib/IEnumSpObjectTokens.cs new file mode 100644 index 0000000..f768d79 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/IEnumSpObjectTokens.cs @@ -0,0 +1,29 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [InterfaceType(1)] + [Guid("06B64F9E-7FDA-11D2-B4F2-00C04F797396")] + [TypeLibType(512)] + public interface IEnumSpObjectTokens { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Next([In] uint celt, [MarshalAs(UnmanagedType.Interface)] out ISpObjectToken pelt, out uint pceltFetched); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Skip([In] uint celt); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Reset(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Clone([MarshalAs(UnmanagedType.Interface)] out SpMMAudioEnum ppEnum); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Item([In] uint Index, [MarshalAs(UnmanagedType.Interface)] out ISpObjectToken ppToken); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetCount(out uint pCount); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/IEnumSpObjectTokens.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/IEnumSpObjectTokens.cs.meta new file mode 100644 index 0000000..7ff11d5 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/IEnumSpObjectTokens.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b8d9b83debeb9c244a52757c270bd3ff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpDataKey.cs b/Assets/Plugins/Windows/Interop.SpeechLib/ISpDataKey.cs new file mode 100644 index 0000000..e0ed789 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpDataKey.cs @@ -0,0 +1,47 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [TypeLibType(512)] + [Guid("14056581-E16C-11D2-BB90-00C04F8EE6C0")] + [InterfaceType(1)] + public interface ISpDataKey { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetData([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In] uint cbData, [In] ref byte pData); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetData([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In] ref uint pcbData, out byte pData); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetStringValue([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In][MarshalAs(UnmanagedType.LPWStr)] string pszValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetStringValue([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [MarshalAs(UnmanagedType.LPWStr)] out string ppszValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetDWORD([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In] uint dwValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetDWORD([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, out uint pdwValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void OpenKey([In][MarshalAs(UnmanagedType.LPWStr)] string pszSubKeyName, [MarshalAs(UnmanagedType.Interface)] out ISpDataKey ppSubKey); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void CreateKey([In][MarshalAs(UnmanagedType.LPWStr)] string pszSubKey, [MarshalAs(UnmanagedType.Interface)] out ISpDataKey ppSubKey); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void DeleteKey([In][MarshalAs(UnmanagedType.LPWStr)] string pszSubKey); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void DeleteValue([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void EnumKeys([In] uint Index, [MarshalAs(UnmanagedType.LPWStr)] out string ppszSubKeyName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void EnumValues([In] uint Index, [MarshalAs(UnmanagedType.LPWStr)] out string ppszValueName); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpDataKey.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/ISpDataKey.cs.meta new file mode 100644 index 0000000..b6f8843 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpDataKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 53c599adb0888ca488c429446e094a6e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpEventSource.cs b/Assets/Plugins/Windows/Interop.SpeechLib/ISpEventSource.cs new file mode 100644 index 0000000..3081592 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpEventSource.cs @@ -0,0 +1,41 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [InterfaceType(1)] + [Guid("BE7A9CCE-5F9E-11D2-960F-00C04F8EE628")] + [TypeLibType(512)] + public interface ISpEventSource : ISpNotifySource { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void SetNotifySink([In][MarshalAs(UnmanagedType.Interface)] ISpNotifySink pNotifySink); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void SetNotifyWindowMessage([In][ComAliasName("SpeechLib.wireHWND")] ref _RemotableHandle hWnd, [In] uint Msg, [In][ComAliasName("SpeechLib.UINT_PTR")] ulong wParam, [In][ComAliasName("SpeechLib.LONG_PTR")] long lParam); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void SetNotifyCallbackFunction([In] ref IntPtr pfnCallback, [In][ComAliasName("SpeechLib.UINT_PTR")] ulong wParam, [In][ComAliasName("SpeechLib.LONG_PTR")] long lParam); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void SetNotifyCallbackInterface([In] ref IntPtr pSpCallback, [In][ComAliasName("SpeechLib.UINT_PTR")] ulong wParam, [In][ComAliasName("SpeechLib.LONG_PTR")] long lParam); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void SetNotifyWin32Event(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void WaitForNotifyEvent([In] uint dwMilliseconds); + + [MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new IntPtr GetNotifyEventHandle(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetInterest([In] ulong ullEventInterest, [In] ulong ullQueuedInterest); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetEvents([In] uint ulCount, out SPEVENT pEventArray, out uint pulFetched); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetInfo(out SPEVENTSOURCEINFO pInfo); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpEventSource.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/ISpEventSource.cs.meta new file mode 100644 index 0000000..db29bb4 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpEventSource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 956b9cc3f6ea4e848971f63146675fca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpNotifySink.cs b/Assets/Plugins/Windows/Interop.SpeechLib/ISpNotifySink.cs new file mode 100644 index 0000000..8db4ee9 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpNotifySink.cs @@ -0,0 +1,14 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [TypeLibType(512)] + [Guid("259684DC-37C3-11D2-9603-00C04F8EE628")] + [InterfaceType(1)] + public interface ISpNotifySink { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Notify(); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpNotifySink.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/ISpNotifySink.cs.meta new file mode 100644 index 0000000..83d6d28 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpNotifySink.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a8f6204837b45824b8513ceb242f9ec1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpNotifySource.cs b/Assets/Plugins/Windows/Interop.SpeechLib/ISpNotifySource.cs new file mode 100644 index 0000000..873680a --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpNotifySource.cs @@ -0,0 +1,32 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [TypeLibType(512)] + [InterfaceType(1)] + [Guid("5EFF4AEF-8487-11D2-961C-00C04F8EE628")] + public interface ISpNotifySource { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetNotifySink([In][MarshalAs(UnmanagedType.Interface)] ISpNotifySink pNotifySink); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetNotifyWindowMessage([In][ComAliasName("SpeechLib.wireHWND")] ref _RemotableHandle hWnd, [In] uint Msg, [In][ComAliasName("SpeechLib.UINT_PTR")] ulong wParam, [In][ComAliasName("SpeechLib.LONG_PTR")] long lParam); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetNotifyCallbackFunction([In] ref IntPtr pfnCallback, [In][ComAliasName("SpeechLib.UINT_PTR")] ulong wParam, [In][ComAliasName("SpeechLib.LONG_PTR")] long lParam); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetNotifyCallbackInterface([In] ref IntPtr pSpCallback, [In][ComAliasName("SpeechLib.UINT_PTR")] ulong wParam, [In][ComAliasName("SpeechLib.LONG_PTR")] long lParam); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetNotifyWin32Event(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void WaitForNotifyEvent([In] uint dwMilliseconds); + + [MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + IntPtr GetNotifyEventHandle(); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpNotifySource.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/ISpNotifySource.cs.meta new file mode 100644 index 0000000..8b1cff1 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpNotifySource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc0e801e79d02c0419ef4ce756d894e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpObjectToken.cs b/Assets/Plugins/Windows/Interop.SpeechLib/ISpObjectToken.cs new file mode 100644 index 0000000..5de2a12 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpObjectToken.cs @@ -0,0 +1,77 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [Guid("14056589-E16C-11D2-BB90-00C04F8EE6C0")] + [TypeLibType(512)] + [InterfaceType(1)] + public interface ISpObjectToken : ISpDataKey { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void SetData([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In] uint cbData, [In] ref byte pData); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void GetData([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In] ref uint pcbData, out byte pData); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void SetStringValue([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In][MarshalAs(UnmanagedType.LPWStr)] string pszValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void GetStringValue([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [MarshalAs(UnmanagedType.LPWStr)] out string ppszValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void SetDWORD([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In] uint dwValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void GetDWORD([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, out uint pdwValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void OpenKey([In][MarshalAs(UnmanagedType.LPWStr)] string pszSubKeyName, [MarshalAs(UnmanagedType.Interface)] out ISpDataKey ppSubKey); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void CreateKey([In][MarshalAs(UnmanagedType.LPWStr)] string pszSubKey, [MarshalAs(UnmanagedType.Interface)] out ISpDataKey ppSubKey); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void DeleteKey([In][MarshalAs(UnmanagedType.LPWStr)] string pszSubKey); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void DeleteValue([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void EnumKeys([In] uint Index, [MarshalAs(UnmanagedType.LPWStr)] out string ppszSubKeyName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void EnumValues([In] uint Index, [MarshalAs(UnmanagedType.LPWStr)] out string ppszValueName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetId([MarshalAs(UnmanagedType.LPWStr)] string pszCategoryId, [In][MarshalAs(UnmanagedType.LPWStr)] string pszTokenId, [In] int fCreateIfNotExist); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetId([MarshalAs(UnmanagedType.LPWStr)] out string ppszCoMemTokenId); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetCategory([MarshalAs(UnmanagedType.Interface)] out ISpObjectTokenCategory ppTokenCategory); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void CreateInstance([In][MarshalAs(UnmanagedType.IUnknown)] object pUnkOuter, [In] uint dwClsContext, [In] ref Guid riid, out IntPtr ppvObject); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetStorageFileName([In] ref Guid clsidCaller, [In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In][MarshalAs(UnmanagedType.LPWStr)] string pszFileNameSpecifier, [In] uint nFolder, [MarshalAs(UnmanagedType.LPWStr)] out string ppszFilePath); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void RemoveStorageFileName([In] ref Guid clsidCaller, [In][MarshalAs(UnmanagedType.LPWStr)] string pszKeyName, [In] int fDeleteFile); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Remove(ref Guid pclsidCaller); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void IsUISupported([In][MarshalAs(UnmanagedType.LPWStr)] string pszTypeOfUI, [In] IntPtr pvExtraData, [In] uint cbExtraData, [In][MarshalAs(UnmanagedType.IUnknown)] object punkObject, out int pfSupported); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void DisplayUI([In][ComAliasName("SpeechLib.wireHWND")] ref _RemotableHandle hWndParent, [In][MarshalAs(UnmanagedType.LPWStr)] string pszTitle, [In][MarshalAs(UnmanagedType.LPWStr)] string pszTypeOfUI, [In] IntPtr pvExtraData, [In] uint cbExtraData, [In][MarshalAs(UnmanagedType.IUnknown)] object punkObject); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void MatchesAttributes([In][MarshalAs(UnmanagedType.LPWStr)] string pszAttributes, out int pfMatches); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpObjectToken.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/ISpObjectToken.cs.meta new file mode 100644 index 0000000..f925bb7 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpObjectToken.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9dbe636fbecc6d246ac06f0111e1b644 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpObjectTokenCategory.cs b/Assets/Plugins/Windows/Interop.SpeechLib/ISpObjectTokenCategory.cs new file mode 100644 index 0000000..4224912 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpObjectTokenCategory.cs @@ -0,0 +1,65 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [Guid("2D3D3845-39AF-4850-BBF9-40B49780011D")] + [TypeLibType(512)] + [InterfaceType(1)] + public interface ISpObjectTokenCategory : ISpDataKey { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void SetData([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In] uint cbData, [In] ref byte pData); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void GetData([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In] ref uint pcbData, out byte pData); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void SetStringValue([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In][MarshalAs(UnmanagedType.LPWStr)] string pszValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void GetStringValue([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [MarshalAs(UnmanagedType.LPWStr)] out string ppszValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void SetDWORD([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In] uint dwValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void GetDWORD([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, out uint pdwValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void OpenKey([In][MarshalAs(UnmanagedType.LPWStr)] string pszSubKeyName, [MarshalAs(UnmanagedType.Interface)] out ISpDataKey ppSubKey); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void CreateKey([In][MarshalAs(UnmanagedType.LPWStr)] string pszSubKey, [MarshalAs(UnmanagedType.Interface)] out ISpDataKey ppSubKey); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void DeleteKey([In][MarshalAs(UnmanagedType.LPWStr)] string pszSubKey); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void DeleteValue([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void EnumKeys([In] uint Index, [MarshalAs(UnmanagedType.LPWStr)] out string ppszSubKeyName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void EnumValues([In] uint Index, [MarshalAs(UnmanagedType.LPWStr)] out string ppszValueName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetId([In][MarshalAs(UnmanagedType.LPWStr)] string pszCategoryId, [In] int fCreateIfNotExist); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetId([MarshalAs(UnmanagedType.LPWStr)] out string ppszCoMemCategoryId); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetDataKey([In] SPDATAKEYLOCATION spdkl, [MarshalAs(UnmanagedType.Interface)] out ISpDataKey ppDataKey); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void EnumTokens([In][MarshalAs(UnmanagedType.LPWStr)] string pzsReqAttribs, [In][MarshalAs(UnmanagedType.LPWStr)] string pszOptAttribs, [MarshalAs(UnmanagedType.Interface)] out SpMMAudioEnum ppEnum); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetDefaultTokenId([In][MarshalAs(UnmanagedType.LPWStr)] string pszTokenId); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetDefaultTokenId([MarshalAs(UnmanagedType.LPWStr)] out string ppszCoMemTokenId); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpObjectTokenCategory.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/ISpObjectTokenCategory.cs.meta new file mode 100644 index 0000000..4352967 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpObjectTokenCategory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 15623e252a155a848a97cf37f60268e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpPhoneticAlphabetSelection.cs b/Assets/Plugins/Windows/Interop.SpeechLib/ISpPhoneticAlphabetSelection.cs new file mode 100644 index 0000000..0f354ad --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpPhoneticAlphabetSelection.cs @@ -0,0 +1,17 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [TypeLibType(512)] + [InterfaceType(1)] + [Guid("B2745EFD-42CE-48CA-81F1-A96E02538A90")] + public interface ISpPhoneticAlphabetSelection { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void IsAlphabetUPS(out int pfIsUPS); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetAlphabetToUPS([In] int fForceUPS); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpPhoneticAlphabetSelection.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/ISpPhoneticAlphabetSelection.cs.meta new file mode 100644 index 0000000..e0abf26 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpPhoneticAlphabetSelection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d029aee7bdb974547abcc71e4b1d5c0e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpStreamFormat.cs b/Assets/Plugins/Windows/Interop.SpeechLib/ISpStreamFormat.cs new file mode 100644 index 0000000..c3e03fc --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpStreamFormat.cs @@ -0,0 +1,49 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; + +namespace SpeechLib { + [ComImport] + [ComConversionLoss] + [InterfaceType(1)] + [Guid("BED530BE-2606-4F4D-A1C0-54C5CDA5566F")] + [TypeLibType(512)] + public interface ISpStreamFormat : IStream { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void RemoteRead(out byte pv, [In] uint cb, out uint pcbRead); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void RemoteWrite([In] ref byte pv, [In] uint cb, out uint pcbWritten); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void RemoteSeek([In] _LARGE_INTEGER dlibMove, [In] uint dwOrigin, out _ULARGE_INTEGER plibNewPosition); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetSize([In] _ULARGE_INTEGER libNewSize); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void RemoteCopyTo([In][MarshalAs(UnmanagedType.Interface)] IStream pstm, [In] _ULARGE_INTEGER cb, out _ULARGE_INTEGER pcbRead, out _ULARGE_INTEGER pcbWritten); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Commit([In] uint grfCommitFlags); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void Revert(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void LockRegion([In] _ULARGE_INTEGER libOffset, [In] _ULARGE_INTEGER cb, [In] uint dwLockType); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void UnlockRegion([In] _ULARGE_INTEGER libOffset, [In] _ULARGE_INTEGER cb, [In] uint dwLockType); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Stat(out tagSTATSTG pstatstg, [In] uint grfStatFlag); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void Clone([MarshalAs(UnmanagedType.Interface)] out IStream ppstm); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetFormat([In] ref Guid pguidFormatId, [Out] IntPtr ppCoMemWaveFormatEx); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpStreamFormat.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/ISpStreamFormat.cs.meta new file mode 100644 index 0000000..dc40632 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpStreamFormat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3757bf8ef8a3f324896a9d3712a52c0d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpVoice.cs b/Assets/Plugins/Windows/Interop.SpeechLib/ISpVoice.cs new file mode 100644 index 0000000..9a9c3ad --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpVoice.cs @@ -0,0 +1,117 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; + +namespace SpeechLib { + [ComImport] + [InterfaceType(1)] + [Guid("6C44DF74-72B9-4992-A1EC-EF996E0422D4")] + [TypeLibType(512)] + public interface ISpVoice : ISpEventSource { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void SetNotifySink([In][MarshalAs(UnmanagedType.Interface)] ISpNotifySink pNotifySink); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void SetNotifyWindowMessage([In][ComAliasName("SpeechLib.wireHWND")] ref _RemotableHandle hWnd, [In] uint Msg, [In][ComAliasName("SpeechLib.UINT_PTR")] ulong wParam, [In][ComAliasName("SpeechLib.LONG_PTR")] long lParam); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void SetNotifyCallbackFunction([In] ref IntPtr pfnCallback, [In][ComAliasName("SpeechLib.UINT_PTR")] ulong wParam, [In][ComAliasName("SpeechLib.LONG_PTR")] long lParam); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void SetNotifyCallbackInterface([In] ref IntPtr pSpCallback, [In][ComAliasName("SpeechLib.UINT_PTR")] ulong wParam, [In][ComAliasName("SpeechLib.LONG_PTR")] long lParam); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void SetNotifyWin32Event(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void WaitForNotifyEvent([In] uint dwMilliseconds); + + [MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new IntPtr GetNotifyEventHandle(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void SetInterest([In] ulong ullEventInterest, [In] ulong ullQueuedInterest); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void GetEvents([In] uint ulCount, out SPEVENT pEventArray, out uint pulFetched); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + new void GetInfo(out SPEVENTSOURCEINFO pInfo); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetOutput([In][MarshalAs(UnmanagedType.IUnknown)] object pUnkOutput, [In] int fAllowFormatChanges); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetOutputObjectToken([MarshalAs(UnmanagedType.Interface)] out ISpObjectToken ppObjectToken); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetOutputStream([MarshalAs(UnmanagedType.Interface)] out ISpStreamFormat ppStream); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Pause(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Resume(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetVoice([In][MarshalAs(UnmanagedType.Interface)] ISpObjectToken pToken); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetVoice([MarshalAs(UnmanagedType.Interface)] out ISpObjectToken ppToken); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Speak([In][MarshalAs(UnmanagedType.LPWStr)] string pwcs, [In] uint dwFlags, out uint pulStreamNumber); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SpeakStream([In][MarshalAs(UnmanagedType.Interface)] IStream pStream, [In] uint dwFlags, out uint pulStreamNumber); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetStatus(out SPVOICESTATUS pStatus, [MarshalAs(UnmanagedType.LPWStr)] out string ppszLastBookmark); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void Skip([In][MarshalAs(UnmanagedType.LPWStr)] string pItemType, [In] int lNumItems, out uint pulNumSkipped); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetPriority([In] SPVPRIORITY ePriority); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetPriority(out SPVPRIORITY pePriority); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetAlertBoundary([In] SPEVENTENUM eBoundary); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetAlertBoundary(out SPEVENTENUM peBoundary); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetRate([In] int RateAdjust); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetRate(out int pRateAdjust); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetVolume([In] ushort usVolume); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetVolume(out ushort pusVolume); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void WaitUntilDone([In] uint msTimeout); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void SetSyncSpeakTimeout([In] uint msTimeout); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void GetSyncSpeakTimeout(out uint pmsTimeout); + + [MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + IntPtr SpeakCompleteEvent(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void IsUISupported([In][MarshalAs(UnmanagedType.LPWStr)] string pszTypeOfUI, [In] IntPtr pvExtraData, [In] uint cbExtraData, out int pfSupported); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + void DisplayUI([In][ComAliasName("SpeechLib.wireHWND")] ref _RemotableHandle hWndParent, [In][MarshalAs(UnmanagedType.LPWStr)] string pszTitle, [In][MarshalAs(UnmanagedType.LPWStr)] string pszTypeOfUI, [In] IntPtr pvExtraData, [In] uint cbExtraData); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpVoice.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/ISpVoice.cs.meta new file mode 100644 index 0000000..1e7c9ae --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpVoice.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 272a8c831aaf44a4d94da0a8f2f29199 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechAudioFormat.cs b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechAudioFormat.cs new file mode 100644 index 0000000..642ea30 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechAudioFormat.cs @@ -0,0 +1,47 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [TypeLibType(4160)] + [Guid("E6E9C590-3E18-40E3-8299-061F98BDE7C7")] + public interface ISpeechAudioFormat { + [DispId(1)] + SpeechAudioFormatType Type { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + [param: In] + set; + } + + [DispId(2)] + string Guid { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + [TypeLibFunc(64)] + [return: MarshalAs(UnmanagedType.BStr)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + [TypeLibFunc(64)] + [param: In] + [param: MarshalAs(UnmanagedType.BStr)] + set; + } + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(3)] + [TypeLibFunc(64)] + [return: MarshalAs(UnmanagedType.Interface)] + SpWaveFormatEx GetWaveFormatEx(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(4)] + [TypeLibFunc(64)] + void SetWaveFormatEx([In][MarshalAs(UnmanagedType.Interface)] SpWaveFormatEx SpeechWaveFormatEx); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechAudioFormat.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechAudioFormat.cs.meta new file mode 100644 index 0000000..c5acdfa --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechAudioFormat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0121f963d2ad3124f93d8b901dea2ef2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechBaseStream.cs b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechBaseStream.cs new file mode 100644 index 0000000..d4e4822 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechBaseStream.cs @@ -0,0 +1,36 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [TypeLibType(4160)] + [Guid("6450336F-7D49-4CED-8097-49D6DEE37294")] + public interface ISpeechBaseStream { + [DispId(1)] + SpAudioFormat Format { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + [return: MarshalAs(UnmanagedType.Interface)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + [param: In] + [param: MarshalAs(UnmanagedType.Interface)] + set; + } + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + int Read([MarshalAs(UnmanagedType.Struct)] out object Buffer, [In] int NumberOfBytes); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(3)] + int Write([In][MarshalAs(UnmanagedType.Struct)] object Buffer); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(4)] + [return: MarshalAs(UnmanagedType.Struct)] + object Seek([In][MarshalAs(UnmanagedType.Struct)] object Position, [In] SpeechStreamSeekPositionType Origin = SpeechStreamSeekPositionType.SSSPTRelativeToStart); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechBaseStream.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechBaseStream.cs.meta new file mode 100644 index 0000000..349ab15 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechBaseStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b47a20305f9457d4a9178de9ed11508a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechDataKey.cs b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechDataKey.cs new file mode 100644 index 0000000..874025d --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechDataKey.cs @@ -0,0 +1,64 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [TypeLibType(4160)] + [Guid("CE17C09B-4EFA-44D5-A4C9-59D9585AB0CD")] + public interface ISpeechDataKey { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + void SetBinaryValue([In][MarshalAs(UnmanagedType.BStr)] string ValueName, [In][MarshalAs(UnmanagedType.Struct)] object Value); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + [return: MarshalAs(UnmanagedType.Struct)] + object GetBinaryValue([In][MarshalAs(UnmanagedType.BStr)] string ValueName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(3)] + void SetStringValue([In][MarshalAs(UnmanagedType.BStr)] string ValueName, [In][MarshalAs(UnmanagedType.BStr)] string Value); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(4)] + [return: MarshalAs(UnmanagedType.BStr)] + string GetStringValue([In][MarshalAs(UnmanagedType.BStr)] string ValueName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(5)] + void SetLongValue([In][MarshalAs(UnmanagedType.BStr)] string ValueName, [In] int Value); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(6)] + int GetLongValue([In][MarshalAs(UnmanagedType.BStr)] string ValueName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(7)] + [return: MarshalAs(UnmanagedType.Interface)] + ISpeechDataKey OpenKey([In][MarshalAs(UnmanagedType.BStr)] string SubKeyName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(8)] + [return: MarshalAs(UnmanagedType.Interface)] + ISpeechDataKey CreateKey([In][MarshalAs(UnmanagedType.BStr)] string SubKeyName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(9)] + void DeleteKey([In][MarshalAs(UnmanagedType.BStr)] string SubKeyName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(10)] + void DeleteValue([In][MarshalAs(UnmanagedType.BStr)] string ValueName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(11)] + [return: MarshalAs(UnmanagedType.BStr)] + string EnumKeys([In] int Index); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(12)] + [return: MarshalAs(UnmanagedType.BStr)] + string EnumValues([In] int Index); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechDataKey.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechDataKey.cs.meta new file mode 100644 index 0000000..6f3b64c --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechDataKey.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 67d9e05beeee4594688ea5fff1341d30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectToken.cs b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectToken.cs new file mode 100644 index 0000000..b93232f --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectToken.cs @@ -0,0 +1,85 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [TypeLibType(4160)] + [Guid("C74A3ADC-B727-4500-A84A-B526721C8B8C")] + public interface ISpeechObjectToken { + [DispId(1)] + string Id { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + [return: MarshalAs(UnmanagedType.BStr)] + get; + } + + [DispId(2)] + ISpeechDataKey DataKey { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [TypeLibFunc(64)] + [DispId(2)] + [return: MarshalAs(UnmanagedType.Interface)] + get; + } + + [DispId(3)] + SpObjectTokenCategory Category { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(3)] + [return: MarshalAs(UnmanagedType.Interface)] + get; + } + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(4)] + [return: MarshalAs(UnmanagedType.BStr)] + string GetDescription([In] int Locale = 0); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(5)] + [TypeLibFunc(64)] + void SetId([In][MarshalAs(UnmanagedType.BStr)] string Id, [In][MarshalAs(UnmanagedType.BStr)] string CategoryID = "", [In] bool CreateIfNotExist = false); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(6)] + [return: MarshalAs(UnmanagedType.BStr)] + string GetAttribute([In][MarshalAs(UnmanagedType.BStr)] string AttributeName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(7)] + [return: MarshalAs(UnmanagedType.IUnknown)] + object CreateInstance([Optional][In][IUnknownConstant][MarshalAs(UnmanagedType.IUnknown)] object pUnkOuter, [In] SpeechTokenContext ClsContext = SpeechTokenContext.STCAll); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [TypeLibFunc(64)] + [DispId(8)] + void Remove([In][MarshalAs(UnmanagedType.BStr)] string ObjectStorageCLSID); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [TypeLibFunc(64)] + [DispId(9)] + [return: MarshalAs(UnmanagedType.BStr)] + string GetStorageFileName([In][MarshalAs(UnmanagedType.BStr)] string ObjectStorageCLSID, [In][MarshalAs(UnmanagedType.BStr)] string KeyName, [In][MarshalAs(UnmanagedType.BStr)] string FileName, [In] SpeechTokenShellFolder Folder); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(10)] + [TypeLibFunc(64)] + void RemoveStorageFileName([In][MarshalAs(UnmanagedType.BStr)] string ObjectStorageCLSID, [In][MarshalAs(UnmanagedType.BStr)] string KeyName, [In] bool DeleteFile); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(11)] + [TypeLibFunc(64)] + bool IsUISupported([In][MarshalAs(UnmanagedType.BStr)] string TypeOfUI, [Optional][In][MarshalAs(UnmanagedType.Struct)] ref object ExtraData, [Optional][In][IUnknownConstant][MarshalAs(UnmanagedType.IUnknown)] object Object); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(12)] + [TypeLibFunc(64)] + void DisplayUI([In] int hWnd, [In][MarshalAs(UnmanagedType.BStr)] string Title, [In][MarshalAs(UnmanagedType.BStr)] string TypeOfUI, [Optional][In][MarshalAs(UnmanagedType.Struct)] ref object ExtraData, [Optional][In][IUnknownConstant][MarshalAs(UnmanagedType.IUnknown)] object Object); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(13)] + bool MatchesAttributes([In][MarshalAs(UnmanagedType.BStr)] string Attributes); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectToken.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectToken.cs.meta new file mode 100644 index 0000000..afbdd8f --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectToken.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 84b08e94b540c8a40afbd504abc37d04 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectTokenCategory.cs b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectTokenCategory.cs new file mode 100644 index 0000000..551c589 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectTokenCategory.cs @@ -0,0 +1,46 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [Guid("CA7EAC50-2D01-4145-86D4-5AE7D70F4469")] + [TypeLibType(4160)] + public interface ISpeechObjectTokenCategory { + [DispId(1)] + string Id { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + [return: MarshalAs(UnmanagedType.BStr)] + get; + } + + [DispId(2)] + string Default { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + [return: MarshalAs(UnmanagedType.BStr)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + [param: In] + [param: MarshalAs(UnmanagedType.BStr)] + set; + } + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(3)] + void SetId([In][MarshalAs(UnmanagedType.BStr)] string Id, [In] bool CreateIfNotExist = false); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(4)] + [TypeLibFunc(64)] + [return: MarshalAs(UnmanagedType.Interface)] + ISpeechDataKey GetDataKey([In] SpeechDataKeyLocation Location = SpeechDataKeyLocation.SDKLDefaultLocation); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(5)] + [return: MarshalAs(UnmanagedType.Interface)] + ISpeechObjectTokens EnumerateTokens([In][MarshalAs(UnmanagedType.BStr)] string RequiredAttributes = "", [In][MarshalAs(UnmanagedType.BStr)] string OptionalAttributes = ""); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectTokenCategory.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectTokenCategory.cs.meta new file mode 100644 index 0000000..3d5c681 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectTokenCategory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a15899cbf650cfa42944fa16c069356b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectTokens.cs b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectTokens.cs new file mode 100644 index 0000000..30a280e --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectTokens.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [DefaultMember("Item")] + [TypeLibType(4160)] + [Guid("9285B776-2E7B-4BC0-B53E-580EB6FA967F")] + public interface ISpeechObjectTokens : IEnumerable { + [DispId(1)] + int Count { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + get; + } + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(0)] + [return: MarshalAs(UnmanagedType.Interface)] + SpObjectToken Item([In] int Index); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [TypeLibFunc(1)] + [DispId(-4)] + [return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(EnumeratorToEnumVariantMarshaler))] + new IEnumerator GetEnumerator(); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectTokens.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectTokens.cs.meta new file mode 100644 index 0000000..eaf6acd --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechObjectTokens.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c5ce0623475562e41ac3b4d14e26e163 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechVoice.cs b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechVoice.cs new file mode 100644 index 0000000..28cd6b6 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechVoice.cs @@ -0,0 +1,183 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [Guid("269316D8-57BD-11D2-9EEE-00C04F797396")] + [TypeLibType(4160)] + public interface ISpeechVoice { + [DispId(1)] + ISpeechVoiceStatus Status { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + [return: MarshalAs(UnmanagedType.Interface)] + get; + } + + [DispId(2)] + SpObjectToken Voice { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + [return: MarshalAs(UnmanagedType.Interface)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + [param: In] + [param: MarshalAs(UnmanagedType.Interface)] + set; + } + + [DispId(3)] + SpObjectToken AudioOutput { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(3)] + [return: MarshalAs(UnmanagedType.Interface)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(3)] + [param: In] + [param: MarshalAs(UnmanagedType.Interface)] + set; + } + + [DispId(4)] + ISpeechBaseStream AudioOutputStream { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(4)] + [return: MarshalAs(UnmanagedType.Interface)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(4)] + [param: In] + [param: MarshalAs(UnmanagedType.Interface)] + set; + } + + [DispId(5)] + int Rate { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(5)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(5)] + [param: In] + set; + } + + [DispId(6)] + int Volume { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(6)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(6)] + [param: In] + set; + } + + [DispId(7)] + bool AllowAudioOutputFormatChangesOnNextSet { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [TypeLibFunc(64)] + [DispId(7)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [TypeLibFunc(64)] + [DispId(7)] + [param: In] + set; + } + + [DispId(8)] + SpeechVoiceEvents EventInterests { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(8)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(8)] + [param: In] + set; + } + + [DispId(9)] + SpeechVoicePriority Priority { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(9)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(9)] + [param: In] + set; + } + + [DispId(10)] + SpeechVoiceEvents AlertBoundary { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(10)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(10)] + [param: In] + set; + } + + [DispId(11)] + int SynchronousSpeakTimeout { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(11)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(11)] + [param: In] + set; + } + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(12)] + int Speak([In][MarshalAs(UnmanagedType.BStr)] string Text, [In] SpeechVoiceSpeakFlags Flags = SpeechVoiceSpeakFlags.SVSFDefault); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(13)] + int SpeakStream([In][MarshalAs(UnmanagedType.Interface)] ISpeechBaseStream Stream, [In] SpeechVoiceSpeakFlags Flags = SpeechVoiceSpeakFlags.SVSFDefault); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(14)] + void Pause(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(15)] + void Resume(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(16)] + int Skip([In][MarshalAs(UnmanagedType.BStr)] string Type, [In] int NumItems); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(17)] + [return: MarshalAs(UnmanagedType.Interface)] + ISpeechObjectTokens GetVoices([In][MarshalAs(UnmanagedType.BStr)] string RequiredAttributes = "", [In][MarshalAs(UnmanagedType.BStr)] string OptionalAttributes = ""); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(18)] + [return: MarshalAs(UnmanagedType.Interface)] + ISpeechObjectTokens GetAudioOutputs([In][MarshalAs(UnmanagedType.BStr)] string RequiredAttributes = "", [In][MarshalAs(UnmanagedType.BStr)] string OptionalAttributes = ""); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(19)] + bool WaitUntilDone([In] int msTimeout); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [TypeLibFunc(64)] + [DispId(20)] + nint SpeakCompleteEvent(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(21)] + bool IsUISupported([In][MarshalAs(UnmanagedType.BStr)] string TypeOfUI, [Optional][In][MarshalAs(UnmanagedType.Struct)] ref object ExtraData); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(22)] + void DisplayUI([In] int hWndParent, [In][MarshalAs(UnmanagedType.BStr)] string Title, [In][MarshalAs(UnmanagedType.BStr)] string TypeOfUI, [Optional][In][MarshalAs(UnmanagedType.Struct)] ref object ExtraData); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechVoice.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechVoice.cs.meta new file mode 100644 index 0000000..7b70a7e --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechVoice.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 15960ad47dd69ef478bdfa217dc3838c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechVoiceStatus.cs b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechVoiceStatus.cs new file mode 100644 index 0000000..02d3681 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechVoiceStatus.cs @@ -0,0 +1,96 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [Guid("8BE47B07-57F6-11D2-9EEE-00C04F797396")] + [TypeLibType(4160)] + public interface ISpeechVoiceStatus { + [DispId(1)] + int CurrentStreamNumber { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + get; + } + + [DispId(2)] + int LastStreamNumberQueued { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + get; + } + + [DispId(3)] + int LastHResult { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(3)] + get; + } + + [DispId(4)] + SpeechRunState RunningState { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(4)] + get; + } + + [DispId(5)] + int InputWordPosition { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(5)] + get; + } + + [DispId(6)] + int InputWordLength { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(6)] + get; + } + + [DispId(7)] + int InputSentencePosition { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(7)] + get; + } + + [DispId(8)] + int InputSentenceLength { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(8)] + get; + } + + [DispId(9)] + string LastBookmark { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(9)] + [return: MarshalAs(UnmanagedType.BStr)] + get; + } + + [DispId(10)] + int LastBookmarkId { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [TypeLibFunc(64)] + [DispId(10)] + get; + } + + [DispId(11)] + short PhonemeId { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(11)] + get; + } + + [DispId(12)] + short VisemeId { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(12)] + get; + } + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechVoiceStatus.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechVoiceStatus.cs.meta new file mode 100644 index 0000000..04534b6 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechVoiceStatus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11c572347fde7834d928165b3d458190 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechWaveFormatEx.cs b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechWaveFormatEx.cs new file mode 100644 index 0000000..dbcf594 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechWaveFormatEx.cs @@ -0,0 +1,89 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [Guid("7A1EF0D5-1581-4741-88E4-209A49F11A10")] + [TypeLibType(4160)] + public interface ISpeechWaveFormatEx { + [DispId(1)] + short FormatTag { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + [param: In] + set; + } + + [DispId(2)] + short Channels { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + [param: In] + set; + } + + [DispId(3)] + int SamplesPerSec { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(3)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(3)] + [param: In] + set; + } + + [DispId(4)] + int AvgBytesPerSec { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(4)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(4)] + [param: In] + set; + } + + [DispId(5)] + short BlockAlign { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(5)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(5)] + [param: In] + set; + } + + [DispId(6)] + short BitsPerSample { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(6)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(6)] + [param: In] + set; + } + + [DispId(7)] + object ExtraData { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(7)] + [return: MarshalAs(UnmanagedType.Struct)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(7)] + [param: In] + [param: MarshalAs(UnmanagedType.Struct)] + set; + } + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechWaveFormatEx.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechWaveFormatEx.cs.meta new file mode 100644 index 0000000..829dc37 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/ISpeechWaveFormatEx.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 16611605854765a4db58ea3fec7cb71e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/Interop.SpeechLib.asmdef b/Assets/Plugins/Windows/Interop.SpeechLib/Interop.SpeechLib.asmdef new file mode 100644 index 0000000..f375c69 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/Interop.SpeechLib.asmdef @@ -0,0 +1,18 @@ +{ + "name": "Interop.SpeechLib", + "rootNamespace": "", + "references": [], + "includePlatforms": [ + "Editor", + "WindowsStandalone32", + "WindowsStandalone64" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": true +} \ No newline at end of file diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/Interop.SpeechLib.asmdef.meta b/Assets/Plugins/Windows/Interop.SpeechLib/Interop.SpeechLib.asmdef.meta new file mode 100644 index 0000000..c1747e1 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/Interop.SpeechLib.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1e0937e40dadba24a97b7342c4559580 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SPDATAKEYLOCATION.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SPDATAKEYLOCATION.cs new file mode 100644 index 0000000..df27586 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SPDATAKEYLOCATION.cs @@ -0,0 +1,11 @@ +using System.Runtime.InteropServices; + +namespace SpeechLib { + [TypeLibType(16)] + public enum SPDATAKEYLOCATION { + SPDKL_DefaultLocation = 0, + SPDKL_CurrentUser = 1, + SPDKL_LocalMachine = 2, + SPDKL_CurrentConfig = 5 + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SPDATAKEYLOCATION.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SPDATAKEYLOCATION.cs.meta new file mode 100644 index 0000000..5ad5b62 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SPDATAKEYLOCATION.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 217ea5e808aeb3548bb7c5d3bed0e08d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SPEVENT.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SPEVENT.cs new file mode 100644 index 0000000..f222779 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SPEVENT.cs @@ -0,0 +1,21 @@ +using System.Runtime.InteropServices; + +namespace SpeechLib { + [StructLayout(LayoutKind.Sequential, Pack = 8)] + [TypeLibType(528)] + public struct SPEVENT { + public ushort eEventId; + + public ushort elParamType; + + public uint ulStreamNum; + + public ulong ullAudioStreamOffset; + + [ComAliasName("SpeechLib.UINT_PTR")] + public ulong wParam; + + [ComAliasName("SpeechLib.LONG_PTR")] + public long lParam; + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SPEVENT.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SPEVENT.cs.meta new file mode 100644 index 0000000..a7934bc --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SPEVENT.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f4f5ccf56f5f3043b0647e5f20d458d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SPEVENTENUM.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SPEVENTENUM.cs new file mode 100644 index 0000000..8dce980 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SPEVENTENUM.cs @@ -0,0 +1,47 @@ +using System.Runtime.InteropServices; + +namespace SpeechLib { + [TypeLibType(16)] + public enum SPEVENTENUM { + SPEI_UNDEFINED = 0, + SPEI_START_INPUT_STREAM = 1, + SPEI_END_INPUT_STREAM = 2, + SPEI_VOICE_CHANGE = 3, + SPEI_TTS_BOOKMARK = 4, + SPEI_WORD_BOUNDARY = 5, + SPEI_PHONEME = 6, + SPEI_SENTENCE_BOUNDARY = 7, + SPEI_VISEME = 8, + SPEI_TTS_AUDIO_LEVEL = 9, + SPEI_TTS_PRIVATE = 15, + SPEI_MIN_TTS = 1, + SPEI_MAX_TTS = 15, + SPEI_END_SR_STREAM = 34, + SPEI_SOUND_START = 35, + SPEI_SOUND_END = 36, + SPEI_PHRASE_START = 37, + SPEI_RECOGNITION = 38, + SPEI_HYPOTHESIS = 39, + SPEI_SR_BOOKMARK = 40, + SPEI_PROPERTY_NUM_CHANGE = 41, + SPEI_PROPERTY_STRING_CHANGE = 42, + SPEI_FALSE_RECOGNITION = 43, + SPEI_INTERFERENCE = 44, + SPEI_REQUEST_UI = 45, + SPEI_RECO_STATE_CHANGE = 46, + SPEI_ADAPTATION = 47, + SPEI_START_SR_STREAM = 48, + SPEI_RECO_OTHER_CONTEXT = 49, + SPEI_SR_AUDIO_LEVEL = 50, + SPEI_SR_RETAINEDAUDIO = 51, + SPEI_SR_PRIVATE = 52, + SPEI_ACTIVE_CATEGORY_CHANGED = 53, + SPEI_RESERVED5 = 54, + SPEI_RESERVED6 = 55, + SPEI_MIN_SR = 34, + SPEI_MAX_SR = 55, + SPEI_RESERVED1 = 30, + SPEI_RESERVED2 = 33, + SPEI_RESERVED3 = 63 + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SPEVENTENUM.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SPEVENTENUM.cs.meta new file mode 100644 index 0000000..b20b6bf --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SPEVENTENUM.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 77fb11847c4af3e4dbe279deb892d6cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SPEVENTSOURCEINFO.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SPEVENTSOURCEINFO.cs new file mode 100644 index 0000000..7cb89e2 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SPEVENTSOURCEINFO.cs @@ -0,0 +1,13 @@ +using System.Runtime.InteropServices; + +namespace SpeechLib { + [StructLayout(LayoutKind.Sequential, Pack = 8)] + [TypeLibType(528)] + public struct SPEVENTSOURCEINFO { + public ulong ullEventInterest; + + public ulong ullQueuedInterest; + + public uint ulCount; + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SPEVENTSOURCEINFO.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SPEVENTSOURCEINFO.cs.meta new file mode 100644 index 0000000..6fa47e8 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SPEVENTSOURCEINFO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d926041e2036d6f46958a0f68b89f3c5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SPVISEMES.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SPVISEMES.cs new file mode 100644 index 0000000..9eb6095 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SPVISEMES.cs @@ -0,0 +1,29 @@ +using System.Runtime.InteropServices; + +namespace SpeechLib { + [TypeLibType(16)] + public enum SPVISEMES { + SP_VISEME_0, + SP_VISEME_1, + SP_VISEME_2, + SP_VISEME_3, + SP_VISEME_4, + SP_VISEME_5, + SP_VISEME_6, + SP_VISEME_7, + SP_VISEME_8, + SP_VISEME_9, + SP_VISEME_10, + SP_VISEME_11, + SP_VISEME_12, + SP_VISEME_13, + SP_VISEME_14, + SP_VISEME_15, + SP_VISEME_16, + SP_VISEME_17, + SP_VISEME_18, + SP_VISEME_19, + SP_VISEME_20, + SP_VISEME_21 + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SPVISEMES.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SPVISEMES.cs.meta new file mode 100644 index 0000000..1c899b6 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SPVISEMES.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a65c28791d51e94b8987ffee064a2f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SPVOICESTATUS.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SPVOICESTATUS.cs new file mode 100644 index 0000000..dae6c6d --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SPVOICESTATUS.cs @@ -0,0 +1,35 @@ +using System.Runtime.InteropServices; + +namespace SpeechLib { + + [StructLayout(LayoutKind.Sequential, Pack = 4)] + [TypeLibType(528)] + public struct SPVOICESTATUS { + public uint ulCurrentStream; + + public uint ulLastStreamQueued; + + [MarshalAs(UnmanagedType.Error)] + public int hrLastResult; + + public uint dwRunningState; + + public uint ulInputWordPos; + + public uint ulInputWordLen; + + public uint ulInputSentPos; + + public uint ulInputSentLen; + + public int lBookmarkId; + + public ushort PhonemeId; + + public SPVISEMES VisemeId; + + public uint dwReserved1; + + public uint dwReserved2; + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SPVOICESTATUS.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SPVOICESTATUS.cs.meta new file mode 100644 index 0000000..e1b51b2 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SPVOICESTATUS.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7744246d43381b74c9ddbec63dd9966d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SPVPRIORITY.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SPVPRIORITY.cs new file mode 100644 index 0000000..5a0627c --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SPVPRIORITY.cs @@ -0,0 +1,10 @@ +using System.Runtime.InteropServices; + +namespace SpeechLib { + [TypeLibType(16)] + public enum SPVPRIORITY { + SPVPRI_NORMAL, + SPVPRI_ALERT, + SPVPRI_OVER + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SPVPRIORITY.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SPVPRIORITY.cs.meta new file mode 100644 index 0000000..2d118c8 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SPVPRIORITY.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 14660a10d59475c47a6cb945b87cfd12 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpAudioFormat.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SpAudioFormat.cs new file mode 100644 index 0000000..2315b3a --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpAudioFormat.cs @@ -0,0 +1,53 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [CoClass(typeof(SpAudioFormatClass))] + [Guid("E6E9C590-3E18-40E3-8299-061F98BDE7C7")] + public interface SpAudioFormat : ISpeechAudioFormat { } + + [ComImport] + [Guid("9EF96870-E160-4792-820D-48CF0649E4EC")] + [ClassInterface((ClassInterfaceType)0)] + [TypeLibType(2)] + public class SpAudioFormatClass : ISpeechAudioFormat, SpAudioFormat { + [DispId(1)] + public virtual extern SpeechAudioFormatType Type { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + [param: In] + set; + } + + [DispId(2)] + public virtual extern string Guid { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + [TypeLibFunc(64)] + [return: MarshalAs(UnmanagedType.BStr)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [TypeLibFunc(64)] + [DispId(2)] + [param: In] + [param: MarshalAs(UnmanagedType.BStr)] + set; + } + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(3)] + [TypeLibFunc(64)] + [return: MarshalAs(UnmanagedType.Interface)] + public virtual extern SpWaveFormatEx GetWaveFormatEx(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(4)] + [TypeLibFunc(64)] + public virtual extern void SetWaveFormatEx([In][MarshalAs(UnmanagedType.Interface)] SpWaveFormatEx SpeechWaveFormatEx); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpAudioFormat.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SpAudioFormat.cs.meta new file mode 100644 index 0000000..0a228ee --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpAudioFormat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 86d5321cd6800ea43be2a2e5892ad839 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpMMAudioEnum.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SpMMAudioEnum.cs new file mode 100644 index 0000000..ebcd1cb --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpMMAudioEnum.cs @@ -0,0 +1,34 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [CoClass(typeof(SpMMAudioEnumClass))] + [Guid("06B64F9E-7FDA-11D2-B4F2-00C04F797396")] + public interface SpMMAudioEnum : IEnumSpObjectTokens { } + + [ComImport] + [ClassInterface((ClassInterfaceType)0)] + [Guid("AB1890A0-E91F-11D2-BB91-00C04F8EE6C0")] + [TypeLibType(530)] + public class SpMMAudioEnumClass : IEnumSpObjectTokens, SpMMAudioEnum { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void Next([In] uint celt, [MarshalAs(UnmanagedType.Interface)] out ISpObjectToken pelt, out uint pceltFetched); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void Skip([In] uint celt); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void Reset(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void Clone([MarshalAs(UnmanagedType.Interface)] out SpMMAudioEnum ppEnum); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void Item([In] uint Index, [MarshalAs(UnmanagedType.Interface)] out ISpObjectToken ppToken); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetCount(out uint pCount); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpMMAudioEnum.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SpMMAudioEnum.cs.meta new file mode 100644 index 0000000..ba6fa62 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpMMAudioEnum.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 609bdee720cf41b4486287608f28c3d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpObjectToken.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SpObjectToken.cs new file mode 100644 index 0000000..4f70cc7 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpObjectToken.cs @@ -0,0 +1,157 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [CoClass(typeof(SpObjectTokenClass))] + [Guid("C74A3ADC-B727-4500-A84A-B526721C8B8C")] + public interface SpObjectToken : ISpeechObjectToken { } + + [ComImport] + [Guid("EF411752-3736-4CB4-9C8C-8EF4CCB58EFE")] + [TypeLibType(2)] + [ClassInterface((ClassInterfaceType)0)] + public class SpObjectTokenClass : ISpeechObjectToken, SpObjectToken, ISpObjectToken { + [DispId(1)] + public virtual extern string Id { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + [return: MarshalAs(UnmanagedType.BStr)] + get; + } + + [DispId(2)] + public virtual extern ISpeechDataKey DataKey { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [TypeLibFunc(64)] + [DispId(2)] + [return: MarshalAs(UnmanagedType.Interface)] + get; + } + + [DispId(3)] + public virtual extern SpObjectTokenCategory Category { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(3)] + [return: MarshalAs(UnmanagedType.Interface)] + get; + } + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(4)] + [return: MarshalAs(UnmanagedType.BStr)] + public virtual extern string GetDescription([In] int Locale = 0); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(5)] + [TypeLibFunc(64)] + public virtual extern void SetId([In][MarshalAs(UnmanagedType.BStr)] string Id, [In][MarshalAs(UnmanagedType.BStr)] string CategoryID = "", [In] bool CreateIfNotExist = false); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(6)] + [return: MarshalAs(UnmanagedType.BStr)] + public virtual extern string GetAttribute([In][MarshalAs(UnmanagedType.BStr)] string AttributeName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(7)] + [return: MarshalAs(UnmanagedType.IUnknown)] + public virtual extern object CreateInstance([Optional][In][IUnknownConstant][MarshalAs(UnmanagedType.IUnknown)] object pUnkOuter, [In] SpeechTokenContext ClsContext = SpeechTokenContext.STCAll); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(8)] + [TypeLibFunc(64)] + public virtual extern void Remove([In][MarshalAs(UnmanagedType.BStr)] string ObjectStorageCLSID); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(9)] + [TypeLibFunc(64)] + [return: MarshalAs(UnmanagedType.BStr)] + public virtual extern string GetStorageFileName([In][MarshalAs(UnmanagedType.BStr)] string ObjectStorageCLSID, [In][MarshalAs(UnmanagedType.BStr)] string KeyName, [In][MarshalAs(UnmanagedType.BStr)] string FileName, [In] SpeechTokenShellFolder Folder); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [TypeLibFunc(64)] + [DispId(10)] + public virtual extern void RemoveStorageFileName([In][MarshalAs(UnmanagedType.BStr)] string ObjectStorageCLSID, [In][MarshalAs(UnmanagedType.BStr)] string KeyName, [In] bool DeleteFile); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(11)] + [TypeLibFunc(64)] + public virtual extern bool IsUISupported([In][MarshalAs(UnmanagedType.BStr)] string TypeOfUI, [Optional][In][MarshalAs(UnmanagedType.Struct)] ref object ExtraData, [Optional][In][IUnknownConstant][MarshalAs(UnmanagedType.IUnknown)] object Object); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [TypeLibFunc(64)] + [DispId(12)] + public virtual extern void DisplayUI([In] int hWnd, [In][MarshalAs(UnmanagedType.BStr)] string Title, [In][MarshalAs(UnmanagedType.BStr)] string TypeOfUI, [Optional][In][MarshalAs(UnmanagedType.Struct)] ref object ExtraData, [Optional][In][IUnknownConstant][MarshalAs(UnmanagedType.IUnknown)] object Object); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(13)] + public virtual extern bool MatchesAttributes([In][MarshalAs(UnmanagedType.BStr)] string Attributes); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetData([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In] uint cbData, [In] ref byte pData); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetData([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In] ref uint pcbData, out byte pData); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetStringValue([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In][MarshalAs(UnmanagedType.LPWStr)] string pszValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetStringValue([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [MarshalAs(UnmanagedType.LPWStr)] out string ppszValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetDWORD([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In] uint dwValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetDWORD([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, out uint pdwValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void OpenKey([In][MarshalAs(UnmanagedType.LPWStr)] string pszSubKeyName, [MarshalAs(UnmanagedType.Interface)] out ISpDataKey ppSubKey); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void CreateKey([In][MarshalAs(UnmanagedType.LPWStr)] string pszSubKey, [MarshalAs(UnmanagedType.Interface)] out ISpDataKey ppSubKey); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void DeleteKey([In][MarshalAs(UnmanagedType.LPWStr)] string pszSubKey); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void DeleteValue([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void EnumKeys([In] uint Index, [MarshalAs(UnmanagedType.LPWStr)] out string ppszSubKeyName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void EnumValues([In] uint Index, [MarshalAs(UnmanagedType.LPWStr)] out string ppszValueName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetId([MarshalAs(UnmanagedType.LPWStr)] string pszCategoryId, [In][MarshalAs(UnmanagedType.LPWStr)] string pszTokenId, [In] int fCreateIfNotExist); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetId([MarshalAs(UnmanagedType.LPWStr)] out string ppszCoMemTokenId); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetCategory([MarshalAs(UnmanagedType.Interface)] out ISpObjectTokenCategory ppTokenCategory); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void CreateInstance([In][MarshalAs(UnmanagedType.IUnknown)] object pUnkOuter, [In] uint dwClsContext, [In] ref Guid riid, out IntPtr ppvObject); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetStorageFileName([In] ref Guid clsidCaller, [In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In][MarshalAs(UnmanagedType.LPWStr)] string pszFileNameSpecifier, [In] uint nFolder, [MarshalAs(UnmanagedType.LPWStr)] out string ppszFilePath); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void RemoveStorageFileName([In] ref Guid clsidCaller, [In][MarshalAs(UnmanagedType.LPWStr)] string pszKeyName, [In] int fDeleteFile); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void Remove(ref Guid pclsidCaller); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void IsUISupported([In][MarshalAs(UnmanagedType.LPWStr)] string pszTypeOfUI, [In] IntPtr pvExtraData, [In] uint cbExtraData, [In][MarshalAs(UnmanagedType.IUnknown)] object punkObject, out int pfSupported); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void DisplayUI([In][ComAliasName("SpeechLib.wireHWND")] ref _RemotableHandle hWndParent, [In][MarshalAs(UnmanagedType.LPWStr)] string pszTitle, [In][MarshalAs(UnmanagedType.LPWStr)] string pszTypeOfUI, [In] IntPtr pvExtraData, [In] uint cbExtraData, [In][MarshalAs(UnmanagedType.IUnknown)] object punkObject); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void MatchesAttributes([In][MarshalAs(UnmanagedType.LPWStr)] string pszAttributes, out int pfMatches); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpObjectToken.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SpObjectToken.cs.meta new file mode 100644 index 0000000..7f28eed --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpObjectToken.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7514e237bf33f1a4e859d3b5f798b2b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpObjectTokenCategory.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SpObjectTokenCategory.cs new file mode 100644 index 0000000..d310628 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpObjectTokenCategory.cs @@ -0,0 +1,106 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [Guid("CA7EAC50-2D01-4145-86D4-5AE7D70F4469")] + [CoClass(typeof(SpObjectTokenCategoryClass))] + public interface SpObjectTokenCategory : ISpeechObjectTokenCategory { } + + [ComImport] + [ClassInterface((ClassInterfaceType)0)] + [Guid("A910187F-0C7A-45AC-92CC-59EDAFB77B53")] + [TypeLibType(2)] + public class SpObjectTokenCategoryClass : ISpeechObjectTokenCategory, SpObjectTokenCategory, ISpObjectTokenCategory { + [DispId(1)] + public virtual extern string Id { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + [return: MarshalAs(UnmanagedType.BStr)] + get; + } + + [DispId(2)] + public virtual extern string Default { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + [return: MarshalAs(UnmanagedType.BStr)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + [param: In] + [param: MarshalAs(UnmanagedType.BStr)] + set; + } + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(3)] + public virtual extern void SetId([In][MarshalAs(UnmanagedType.BStr)] string Id, [In] bool CreateIfNotExist = false); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(4)] + [TypeLibFunc(64)] + [return: MarshalAs(UnmanagedType.Interface)] + public virtual extern ISpeechDataKey GetDataKey([In] SpeechDataKeyLocation Location = SpeechDataKeyLocation.SDKLDefaultLocation); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(5)] + [return: MarshalAs(UnmanagedType.Interface)] + public virtual extern ISpeechObjectTokens EnumerateTokens([In][MarshalAs(UnmanagedType.BStr)] string RequiredAttributes = "", [In][MarshalAs(UnmanagedType.BStr)] string OptionalAttributes = ""); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetData([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In] uint cbData, [In] ref byte pData); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetData([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In] ref uint pcbData, out byte pData); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetStringValue([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In][MarshalAs(UnmanagedType.LPWStr)] string pszValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetStringValue([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [MarshalAs(UnmanagedType.LPWStr)] out string ppszValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetDWORD([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, [In] uint dwValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetDWORD([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName, out uint pdwValue); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void OpenKey([In][MarshalAs(UnmanagedType.LPWStr)] string pszSubKeyName, [MarshalAs(UnmanagedType.Interface)] out ISpDataKey ppSubKey); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void CreateKey([In][MarshalAs(UnmanagedType.LPWStr)] string pszSubKey, [MarshalAs(UnmanagedType.Interface)] out ISpDataKey ppSubKey); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void DeleteKey([In][MarshalAs(UnmanagedType.LPWStr)] string pszSubKey); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void DeleteValue([In][MarshalAs(UnmanagedType.LPWStr)] string pszValueName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void EnumKeys([In] uint Index, [MarshalAs(UnmanagedType.LPWStr)] out string ppszSubKeyName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void EnumValues([In] uint Index, [MarshalAs(UnmanagedType.LPWStr)] out string ppszValueName); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetId([In][MarshalAs(UnmanagedType.LPWStr)] string pszCategoryId, [In] int fCreateIfNotExist); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetId([MarshalAs(UnmanagedType.LPWStr)] out string ppszCoMemCategoryId); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetDataKey([In] SPDATAKEYLOCATION spdkl, [MarshalAs(UnmanagedType.Interface)] out ISpDataKey ppDataKey); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void EnumTokens([In][MarshalAs(UnmanagedType.LPWStr)] string pzsReqAttribs, [In][MarshalAs(UnmanagedType.LPWStr)] string pszOptAttribs, [MarshalAs(UnmanagedType.Interface)] out SpMMAudioEnum ppEnum); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetDefaultTokenId([In][MarshalAs(UnmanagedType.LPWStr)] string pszTokenId); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetDefaultTokenId([MarshalAs(UnmanagedType.LPWStr)] out string ppszCoMemTokenId); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpObjectTokenCategory.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SpObjectTokenCategory.cs.meta new file mode 100644 index 0000000..a1a969c --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpObjectTokenCategory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d64596966548b0f4a8252cd13daeecaf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpVoice.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SpVoice.cs new file mode 100644 index 0000000..de14514 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpVoice.cs @@ -0,0 +1,322 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; + +namespace SpeechLib { + [ComImport] + [CoClass(typeof(SpVoiceClass))] + [Guid("269316D8-57BD-11D2-9EEE-00C04F797396")] + public interface SpVoice : ISpeechVoice, _ISpeechVoiceEvents_Event { } + + [ComImport] + [ComSourceInterfaces("SpeechLib._ISpeechVoiceEvents\0\0")] + [TypeLibType(2)] + [ClassInterface((ClassInterfaceType)0)] + [Guid("96749377-3391-11D2-9EE3-00C04F797396")] + public class SpVoiceClass : ISpeechVoice, SpVoice, _ISpeechVoiceEvents_Event, ISpVoice, ISpPhoneticAlphabetSelection { + [DispId(1)] + public virtual extern ISpeechVoiceStatus Status { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + [return: MarshalAs(UnmanagedType.Interface)] + get; + } + + [DispId(2)] + public virtual extern SpObjectToken Voice { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + [return: MarshalAs(UnmanagedType.Interface)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + [param: In] + [param: MarshalAs(UnmanagedType.Interface)] + set; + } + + [DispId(3)] + public virtual extern SpObjectToken AudioOutput { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(3)] + [return: MarshalAs(UnmanagedType.Interface)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(3)] + [param: In] + [param: MarshalAs(UnmanagedType.Interface)] + set; + } + + [DispId(4)] + public virtual extern ISpeechBaseStream AudioOutputStream { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(4)] + [return: MarshalAs(UnmanagedType.Interface)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(4)] + [param: In] + [param: MarshalAs(UnmanagedType.Interface)] + set; + } + + [DispId(5)] + public virtual extern int Rate { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(5)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(5)] + [param: In] + set; + } + + [DispId(6)] + public virtual extern int Volume { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(6)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(6)] + [param: In] + set; + } + + [DispId(7)] + public virtual extern bool AllowAudioOutputFormatChangesOnNextSet { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(7)] + [TypeLibFunc(64)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(7)] + [TypeLibFunc(64)] + [param: In] + set; + } + + [DispId(8)] + public virtual extern SpeechVoiceEvents EventInterests { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(8)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(8)] + [param: In] + set; + } + + [DispId(9)] + public virtual extern SpeechVoicePriority Priority { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(9)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(9)] + [param: In] + set; + } + + [DispId(10)] + public virtual extern SpeechVoiceEvents AlertBoundary { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(10)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(10)] + [param: In] + set; + } + + [DispId(11)] + public virtual extern int SynchronousSpeakTimeout { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(11)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(11)] + [param: In] + set; + } + + public virtual extern event _ISpeechVoiceEvents_StartStreamEventHandler StartStream; + + public virtual extern event _ISpeechVoiceEvents_EndStreamEventHandler EndStream; + + public virtual extern event _ISpeechVoiceEvents_VoiceChangeEventHandler VoiceChange; + + public virtual extern event _ISpeechVoiceEvents_BookmarkEventHandler Bookmark; + + public virtual extern event _ISpeechVoiceEvents_WordEventHandler Word; + + public virtual extern event _ISpeechVoiceEvents_SentenceEventHandler Sentence; + + public virtual extern event _ISpeechVoiceEvents_PhonemeEventHandler Phoneme; + + public virtual extern event _ISpeechVoiceEvents_VisemeEventHandler Viseme; + + public virtual extern event _ISpeechVoiceEvents_AudioLevelEventHandler AudioLevel; + + public virtual extern event _ISpeechVoiceEvents_EnginePrivateEventHandler EnginePrivate; + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(12)] + public virtual extern int Speak([In][MarshalAs(UnmanagedType.BStr)] string Text, [In] SpeechVoiceSpeakFlags Flags = SpeechVoiceSpeakFlags.SVSFDefault); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(13)] + public virtual extern int SpeakStream([In][MarshalAs(UnmanagedType.Interface)] ISpeechBaseStream Stream, [In] SpeechVoiceSpeakFlags Flags = SpeechVoiceSpeakFlags.SVSFDefault); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(14)] + public virtual extern void Pause(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(15)] + public virtual extern void Resume(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(16)] + public virtual extern int Skip([In][MarshalAs(UnmanagedType.BStr)] string Type, [In] int NumItems); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(17)] + [return: MarshalAs(UnmanagedType.Interface)] + public virtual extern ISpeechObjectTokens GetVoices([In][MarshalAs(UnmanagedType.BStr)] string RequiredAttributes = "", [In][MarshalAs(UnmanagedType.BStr)] string OptionalAttributes = ""); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(18)] + [return: MarshalAs(UnmanagedType.Interface)] + public virtual extern ISpeechObjectTokens GetAudioOutputs([In][MarshalAs(UnmanagedType.BStr)] string RequiredAttributes = "", [In][MarshalAs(UnmanagedType.BStr)] string OptionalAttributes = ""); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(19)] + public virtual extern bool WaitUntilDone([In] int msTimeout); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(20)] + [TypeLibFunc(64)] + public virtual extern nint SpeakCompleteEvent(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(21)] + public virtual extern bool IsUISupported([In][MarshalAs(UnmanagedType.BStr)] string TypeOfUI, [Optional][In][MarshalAs(UnmanagedType.Struct)] ref object ExtraData); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(22)] + public virtual extern void DisplayUI([In] int hWndParent, [In][MarshalAs(UnmanagedType.BStr)] string Title, [In][MarshalAs(UnmanagedType.BStr)] string TypeOfUI, [Optional][In][MarshalAs(UnmanagedType.Struct)] ref object ExtraData); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetNotifySink([In][MarshalAs(UnmanagedType.Interface)] ISpNotifySink pNotifySink); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetNotifyWindowMessage([In][ComAliasName("SpeechLib.wireHWND")] ref _RemotableHandle hWnd, [In] uint Msg, [In][ComAliasName("SpeechLib.UINT_PTR")] ulong wParam, [In][ComAliasName("SpeechLib.LONG_PTR")] long lParam); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetNotifyCallbackFunction([In] ref IntPtr pfnCallback, [In][ComAliasName("SpeechLib.UINT_PTR")] ulong wParam, [In][ComAliasName("SpeechLib.LONG_PTR")] long lParam); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetNotifyCallbackInterface([In] ref IntPtr pSpCallback, [In][ComAliasName("SpeechLib.UINT_PTR")] ulong wParam, [In][ComAliasName("SpeechLib.LONG_PTR")] long lParam); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetNotifyWin32Event(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void WaitForNotifyEvent([In] uint dwMilliseconds); + + [MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern IntPtr GetNotifyEventHandle(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetInterest([In] ulong ullEventInterest, [In] ulong ullQueuedInterest); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetEvents([In] uint ulCount, out SPEVENT pEventArray, out uint pulFetched); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetInfo(out SPEVENTSOURCEINFO pInfo); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetOutput([In][MarshalAs(UnmanagedType.IUnknown)] object pUnkOutput, [In] int fAllowFormatChanges); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetOutputObjectToken([MarshalAs(UnmanagedType.Interface)] out ISpObjectToken ppObjectToken); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetOutputStream([MarshalAs(UnmanagedType.Interface)] out ISpStreamFormat ppStream); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void ISpVoice_Pause(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void ISpVoice_Resume(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetVoice([In][MarshalAs(UnmanagedType.Interface)] ISpObjectToken pToken); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetVoice([MarshalAs(UnmanagedType.Interface)] out ISpObjectToken ppToken); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void Speak([In][MarshalAs(UnmanagedType.LPWStr)] string pwcs, [In] uint dwFlags, out uint pulStreamNumber); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SpeakStream([In][MarshalAs(UnmanagedType.Interface)] IStream pStream, [In] uint dwFlags, out uint pulStreamNumber); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetStatus(out SPVOICESTATUS pStatus, [MarshalAs(UnmanagedType.LPWStr)] out string ppszLastBookmark); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void Skip([In][MarshalAs(UnmanagedType.LPWStr)] string pItemType, [In] int lNumItems, out uint pulNumSkipped); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetPriority([In] SPVPRIORITY ePriority); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetPriority(out SPVPRIORITY pePriority); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetAlertBoundary([In] SPEVENTENUM eBoundary); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetAlertBoundary(out SPEVENTENUM peBoundary); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetRate([In] int RateAdjust); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetRate(out int pRateAdjust); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetVolume([In] ushort usVolume); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetVolume(out ushort pusVolume); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void WaitUntilDone([In] uint msTimeout); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetSyncSpeakTimeout([In] uint msTimeout); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void GetSyncSpeakTimeout(out uint pmsTimeout); + + [MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern IntPtr ISpVoice_SpeakCompleteEvent(); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void IsUISupported([In][MarshalAs(UnmanagedType.LPWStr)] string pszTypeOfUI, [In] IntPtr pvExtraData, [In] uint cbExtraData, out int pfSupported); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void DisplayUI([In][ComAliasName("SpeechLib.wireHWND")] ref _RemotableHandle hWndParent, [In][MarshalAs(UnmanagedType.LPWStr)] string pszTitle, [In][MarshalAs(UnmanagedType.LPWStr)] string pszTypeOfUI, [In] IntPtr pvExtraData, [In] uint cbExtraData); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void IsAlphabetUPS(out int pfIsUPS); + + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + public virtual extern void SetAlphabetToUPS([In] int fForceUPS); + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpVoice.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SpVoice.cs.meta new file mode 100644 index 0000000..54481f5 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpVoice.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0cd9856eb9478c5419fe19b0c5fe4869 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpWaveFormatEx.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SpWaveFormatEx.cs new file mode 100644 index 0000000..e34f825 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpWaveFormatEx.cs @@ -0,0 +1,95 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [ComImport] + [CoClass(typeof(SpWaveFormatExClass))] + [Guid("7A1EF0D5-1581-4741-88E4-209A49F11A10")] + public interface SpWaveFormatEx : ISpeechWaveFormatEx { } + + [ComImport] + [TypeLibType(2)] + [ClassInterface((ClassInterfaceType)0)] + [Guid("C79A574C-63BE-44B9-801F-283F87F898BE")] + public class SpWaveFormatExClass : ISpeechWaveFormatEx, SpWaveFormatEx { + [DispId(1)] + public virtual extern short FormatTag { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + [param: In] + set; + } + + [DispId(2)] + public virtual extern short Channels { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + [param: In] + set; + } + + [DispId(3)] + public virtual extern int SamplesPerSec { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(3)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(3)] + [param: In] + set; + } + + [DispId(4)] + public virtual extern int AvgBytesPerSec { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(4)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(4)] + [param: In] + set; + } + + [DispId(5)] + public virtual extern short BlockAlign { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(5)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(5)] + [param: In] + set; + } + + [DispId(6)] + public virtual extern short BitsPerSample { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(6)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(6)] + [param: In] + set; + } + + [DispId(7)] + public virtual extern object ExtraData { + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(7)] + [return: MarshalAs(UnmanagedType.Struct)] + get; + [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(7)] + [param: In] + [param: MarshalAs(UnmanagedType.Struct)] + set; + } + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpWaveFormatEx.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SpWaveFormatEx.cs.meta new file mode 100644 index 0000000..1c95d9e --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpWaveFormatEx.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f4ed37498f153644db78885d96fca065 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechAudioFormatType.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechAudioFormatType.cs new file mode 100644 index 0000000..20bda25 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechAudioFormatType.cs @@ -0,0 +1,81 @@ +using System.Runtime.InteropServices; + +namespace SpeechLib { + public enum SpeechAudioFormatType { + [TypeLibVar(64)] + SAFTDefault = -1, + [TypeLibVar(64)] + SAFTNoAssignedFormat, + [TypeLibVar(64)] + SAFTText, + [TypeLibVar(64)] + SAFTNonStandardFormat, + [TypeLibVar(64)] + SAFTExtendedAudioFormat, + SAFT8kHz8BitMono, + SAFT8kHz8BitStereo, + SAFT8kHz16BitMono, + SAFT8kHz16BitStereo, + SAFT11kHz8BitMono, + SAFT11kHz8BitStereo, + SAFT11kHz16BitMono, + SAFT11kHz16BitStereo, + SAFT12kHz8BitMono, + SAFT12kHz8BitStereo, + SAFT12kHz16BitMono, + SAFT12kHz16BitStereo, + SAFT16kHz8BitMono, + SAFT16kHz8BitStereo, + SAFT16kHz16BitMono, + SAFT16kHz16BitStereo, + SAFT22kHz8BitMono, + SAFT22kHz8BitStereo, + SAFT22kHz16BitMono, + SAFT22kHz16BitStereo, + SAFT24kHz8BitMono, + SAFT24kHz8BitStereo, + SAFT24kHz16BitMono, + SAFT24kHz16BitStereo, + SAFT32kHz8BitMono, + SAFT32kHz8BitStereo, + SAFT32kHz16BitMono, + SAFT32kHz16BitStereo, + SAFT44kHz8BitMono, + SAFT44kHz8BitStereo, + SAFT44kHz16BitMono, + SAFT44kHz16BitStereo, + SAFT48kHz8BitMono, + SAFT48kHz8BitStereo, + SAFT48kHz16BitMono, + SAFT48kHz16BitStereo, + SAFTTrueSpeech_8kHz1BitMono, + SAFTCCITT_ALaw_8kHzMono, + SAFTCCITT_ALaw_8kHzStereo, + SAFTCCITT_ALaw_11kHzMono, + SAFTCCITT_ALaw_11kHzStereo, + SAFTCCITT_ALaw_22kHzMono, + SAFTCCITT_ALaw_22kHzStereo, + SAFTCCITT_ALaw_44kHzMono, + SAFTCCITT_ALaw_44kHzStereo, + SAFTCCITT_uLaw_8kHzMono, + SAFTCCITT_uLaw_8kHzStereo, + SAFTCCITT_uLaw_11kHzMono, + SAFTCCITT_uLaw_11kHzStereo, + SAFTCCITT_uLaw_22kHzMono, + SAFTCCITT_uLaw_22kHzStereo, + SAFTCCITT_uLaw_44kHzMono, + SAFTCCITT_uLaw_44kHzStereo, + SAFTADPCM_8kHzMono, + SAFTADPCM_8kHzStereo, + SAFTADPCM_11kHzMono, + SAFTADPCM_11kHzStereo, + SAFTADPCM_22kHzMono, + SAFTADPCM_22kHzStereo, + SAFTADPCM_44kHzMono, + SAFTADPCM_44kHzStereo, + SAFTGSM610_8kHzMono, + SAFTGSM610_11kHzMono, + SAFTGSM610_22kHzMono, + SAFTGSM610_44kHzMono + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechAudioFormatType.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechAudioFormatType.cs.meta new file mode 100644 index 0000000..5febb58 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechAudioFormatType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e1a21b43b28527448902110444d6afc0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechDataKeyLocation.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechDataKeyLocation.cs new file mode 100644 index 0000000..6a67fdc --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechDataKeyLocation.cs @@ -0,0 +1,8 @@ +namespace SpeechLib { + public enum SpeechDataKeyLocation { + SDKLDefaultLocation = 0, + SDKLCurrentUser = 1, + SDKLLocalMachine = 2, + SDKLCurrentConfig = 5 + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechDataKeyLocation.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechDataKeyLocation.cs.meta new file mode 100644 index 0000000..e086684 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechDataKeyLocation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f69aeacc2c130d4418b452d983eca3fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechRunState.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechRunState.cs new file mode 100644 index 0000000..7e0280b --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechRunState.cs @@ -0,0 +1,6 @@ +namespace SpeechLib { + public enum SpeechRunState { + SRSEDone = 1, + SRSEIsSpeaking + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechRunState.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechRunState.cs.meta new file mode 100644 index 0000000..9a28034 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechRunState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58e9378a6ea5ef54ca111f0ad71daaa5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechStreamSeekPositionType.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechStreamSeekPositionType.cs new file mode 100644 index 0000000..d91fadf --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechStreamSeekPositionType.cs @@ -0,0 +1,7 @@ +namespace SpeechLib { + public enum SpeechStreamSeekPositionType { + SSSPTRelativeToStart, + SSSPTRelativeToCurrentPosition, + SSSPTRelativeToEnd + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechStreamSeekPositionType.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechStreamSeekPositionType.cs.meta new file mode 100644 index 0000000..944c198 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechStreamSeekPositionType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 73521c15f74d9814195facc101171321 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechTokenContext.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechTokenContext.cs new file mode 100644 index 0000000..c208fd5 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechTokenContext.cs @@ -0,0 +1,9 @@ +namespace SpeechLib { + public enum SpeechTokenContext { + STCInprocServer = 1, + STCInprocHandler = 2, + STCLocalServer = 4, + STCRemoteServer = 16, + STCAll = 23 + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechTokenContext.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechTokenContext.cs.meta new file mode 100644 index 0000000..7662712 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechTokenContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b219d571b1122c14a9f6b1fc1bb533dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechTokenShellFolder.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechTokenShellFolder.cs new file mode 100644 index 0000000..acc5f58 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechTokenShellFolder.cs @@ -0,0 +1,8 @@ +namespace SpeechLib { + public enum SpeechTokenShellFolder { + STSF_AppData = 26, + STSF_LocalAppData = 28, + STSF_CommonAppData = 35, + STSF_FlagCreate = 32768 + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechTokenShellFolder.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechTokenShellFolder.cs.meta new file mode 100644 index 0000000..1976822 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechTokenShellFolder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a7053e5bb777ac74c93de2329487d2f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVisemeFeature.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVisemeFeature.cs new file mode 100644 index 0000000..c7eb039 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVisemeFeature.cs @@ -0,0 +1,7 @@ +namespace SpeechLib { + public enum SpeechVisemeFeature { + SVF_None, + SVF_Stressed, + SVF_Emphasis + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVisemeFeature.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVisemeFeature.cs.meta new file mode 100644 index 0000000..2271499 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVisemeFeature.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c4348b51540a69d4ca1ce2f402101ec4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVisemeType.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVisemeType.cs new file mode 100644 index 0000000..9f85878 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVisemeType.cs @@ -0,0 +1,26 @@ +namespace SpeechLib { + public enum SpeechVisemeType { + SVP_0, + SVP_1, + SVP_2, + SVP_3, + SVP_4, + SVP_5, + SVP_6, + SVP_7, + SVP_8, + SVP_9, + SVP_10, + SVP_11, + SVP_12, + SVP_13, + SVP_14, + SVP_15, + SVP_16, + SVP_17, + SVP_18, + SVP_19, + SVP_20, + SVP_21 + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVisemeType.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVisemeType.cs.meta new file mode 100644 index 0000000..97c021f --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVisemeType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e18a18641e2f468408eee5f6fce27591 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoiceEvents.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoiceEvents.cs new file mode 100644 index 0000000..ac337bd --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoiceEvents.cs @@ -0,0 +1,15 @@ +namespace SpeechLib { + public enum SpeechVoiceEvents { + SVEStartInputStream = 2, + SVEEndInputStream = 4, + SVEVoiceChange = 8, + SVEBookmark = 16, + SVEWordBoundary = 32, + SVEPhoneme = 64, + SVESentenceBoundary = 128, + SVEViseme = 256, + SVEAudioLevel = 512, + SVEPrivate = 32768, + SVEAllEvents = 33790 + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoiceEvents.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoiceEvents.cs.meta new file mode 100644 index 0000000..15b507a --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoiceEvents.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c19aff03b3b80ad4f9f1f3c7fd0cbd8e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoicePriority.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoicePriority.cs new file mode 100644 index 0000000..e775968 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoicePriority.cs @@ -0,0 +1,7 @@ +namespace SpeechLib { + public enum SpeechVoicePriority { + SVPNormal, + SVPAlert, + SVPOver + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoicePriority.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoicePriority.cs.meta new file mode 100644 index 0000000..9c86582 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoicePriority.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4755f32e8e4892f40abe8166e6ad372c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoiceSpeakFlags.cs b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoiceSpeakFlags.cs new file mode 100644 index 0000000..d2f7697 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoiceSpeakFlags.cs @@ -0,0 +1,19 @@ +namespace SpeechLib { + public enum SpeechVoiceSpeakFlags { + SVSFDefault = 0, + SVSFlagsAsync = 1, + SVSFPurgeBeforeSpeak = 2, + SVSFIsFilename = 4, + SVSFIsXML = 8, + SVSFIsNotXML = 16, + SVSFPersistXML = 32, + SVSFNLPSpeakPunc = 64, + SVSFParseSapi = 128, + SVSFParseSsml = 256, + SVSFParseAutodetect = 0, + SVSFNLPMask = 64, + SVSFParseMask = 384, + SVSFVoiceMask = 511, + SVSFUnusedFlags = -512 + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoiceSpeakFlags.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoiceSpeakFlags.cs.meta new file mode 100644 index 0000000..6b1ce6d --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/SpeechVoiceSpeakFlags.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 033baa98d3577584e95a52615e026a3f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/_FILETIME.cs b/Assets/Plugins/Windows/Interop.SpeechLib/_FILETIME.cs new file mode 100644 index 0000000..c966ab2 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/_FILETIME.cs @@ -0,0 +1,10 @@ +using System.Runtime.InteropServices; + +namespace SpeechLib { + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct _FILETIME { + public uint dwLowDateTime; + + public uint dwHighDateTime; + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/_FILETIME.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/_FILETIME.cs.meta new file mode 100644 index 0000000..cc475f0 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/_FILETIME.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 75d9604bceee7f94cb9465693c3bdff7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/_ISpeechVoiceEvents.cs b/Assets/Plugins/Windows/Interop.SpeechLib/_ISpeechVoiceEvents.cs new file mode 100644 index 0000000..c7ef2eb --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/_ISpeechVoiceEvents.cs @@ -0,0 +1,805 @@ +using System; +using System.Collections; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; +using System.Threading; + +namespace SpeechLib { + [ComVisible(false)] + public delegate void _ISpeechVoiceEvents_StartStreamEventHandler([In] int StreamNumber, [In][MarshalAs(UnmanagedType.Struct)] object StreamPosition); + + [ComVisible(false)] + public delegate void _ISpeechVoiceEvents_EndStreamEventHandler([In] int StreamNumber, [In][MarshalAs(UnmanagedType.Struct)] object StreamPosition); + + [ComVisible(false)] + public delegate void _ISpeechVoiceEvents_VoiceChangeEventHandler([In] int StreamNumber, [In][MarshalAs(UnmanagedType.Struct)] object StreamPosition, [In][MarshalAs(UnmanagedType.Interface)] SpObjectToken VoiceObjectToken); + + [ComVisible(false)] + public delegate void _ISpeechVoiceEvents_BookmarkEventHandler([In] int StreamNumber, [In][MarshalAs(UnmanagedType.Struct)] object StreamPosition, [In][MarshalAs(UnmanagedType.BStr)] string Bookmark, [In] int BookmarkId); + + [ComVisible(false)] + public delegate void _ISpeechVoiceEvents_WordEventHandler([In] int StreamNumber, [In][MarshalAs(UnmanagedType.Struct)] object StreamPosition, [In] int CharacterPosition, [In] int Length); + + [ComVisible(false)] + public delegate void _ISpeechVoiceEvents_SentenceEventHandler([In] int StreamNumber, [In][MarshalAs(UnmanagedType.Struct)] object StreamPosition, [In] int CharacterPosition, [In] int Length); + + [ComVisible(false)] + public delegate void _ISpeechVoiceEvents_PhonemeEventHandler([In] int StreamNumber, [In][MarshalAs(UnmanagedType.Struct)] object StreamPosition, [In] int Duration, [In] short NextPhoneId, [In] SpeechVisemeFeature Feature, [In] short CurrentPhoneId); + + [ComVisible(false)] + public delegate void _ISpeechVoiceEvents_VisemeEventHandler([In] int StreamNumber, [In][MarshalAs(UnmanagedType.Struct)] object StreamPosition, [In] int Duration, [In] SpeechVisemeType NextVisemeId, [In] SpeechVisemeFeature Feature, [In] SpeechVisemeType CurrentVisemeId); + + [ComVisible(false)] + public delegate void _ISpeechVoiceEvents_AudioLevelEventHandler([In] int StreamNumber, [In][MarshalAs(UnmanagedType.Struct)] object StreamPosition, [In] int AudioLevel); + + [ComVisible(false)] + public delegate void _ISpeechVoiceEvents_EnginePrivateEventHandler([In] int StreamNumber, [In] int StreamPosition, [In][MarshalAs(UnmanagedType.Struct)] object EngineData); + + [ComImport] + [InterfaceType(2)] + [Guid("A372ACD1-3BEF-4BBD-8FFB-CB3E2B416AF8")] + [TypeLibType(4096)] + public interface _ISpeechVoiceEvents { + [MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(1)] + void StartStream([In] int StreamNumber, [In][MarshalAs(UnmanagedType.Struct)] object StreamPosition); + + [MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(2)] + void EndStream([In] int StreamNumber, [In][MarshalAs(UnmanagedType.Struct)] object StreamPosition); + + [MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(3)] + void VoiceChange([In] int StreamNumber, [In][MarshalAs(UnmanagedType.Struct)] object StreamPosition, [In][MarshalAs(UnmanagedType.Interface)] SpObjectToken VoiceObjectToken); + + [MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(4)] + void Bookmark([In] int StreamNumber, [In][MarshalAs(UnmanagedType.Struct)] object StreamPosition, [In][MarshalAs(UnmanagedType.BStr)] string Bookmark, [In] int BookmarkId); + + [MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(5)] + void Word([In] int StreamNumber, [In][MarshalAs(UnmanagedType.Struct)] object StreamPosition, [In] int CharacterPosition, [In] int Length); + + [MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(7)] + void Sentence([In] int StreamNumber, [In][MarshalAs(UnmanagedType.Struct)] object StreamPosition, [In] int CharacterPosition, [In] int Length); + + [MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(6)] + void Phoneme([In] int StreamNumber, [In][MarshalAs(UnmanagedType.Struct)] object StreamPosition, [In] int Duration, [In] short NextPhoneId, [In] SpeechVisemeFeature Feature, [In] short CurrentPhoneId); + + [MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(8)] + void Viseme([In] int StreamNumber, [In][MarshalAs(UnmanagedType.Struct)] object StreamPosition, [In] int Duration, [In] SpeechVisemeType NextVisemeId, [In] SpeechVisemeFeature Feature, [In] SpeechVisemeType CurrentVisemeId); + + [MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(9)] + void AudioLevel([In] int StreamNumber, [In][MarshalAs(UnmanagedType.Struct)] object StreamPosition, [In] int AudioLevel); + + [MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] + [DispId(10)] + void EnginePrivate([In] int StreamNumber, [In] int StreamPosition, [In][MarshalAs(UnmanagedType.Struct)] object EngineData); + } + + [ComEventInterface(typeof(_ISpeechVoiceEvents), typeof(_ISpeechVoiceEvents_EventProvider))] + [TypeLibType(16)] + [ComVisible(false)] + public interface _ISpeechVoiceEvents_Event { + event _ISpeechVoiceEvents_StartStreamEventHandler StartStream; + + event _ISpeechVoiceEvents_EndStreamEventHandler EndStream; + + event _ISpeechVoiceEvents_VoiceChangeEventHandler VoiceChange; + + event _ISpeechVoiceEvents_BookmarkEventHandler Bookmark; + + event _ISpeechVoiceEvents_WordEventHandler Word; + + event _ISpeechVoiceEvents_SentenceEventHandler Sentence; + + event _ISpeechVoiceEvents_PhonemeEventHandler Phoneme; + + event _ISpeechVoiceEvents_VisemeEventHandler Viseme; + + event _ISpeechVoiceEvents_AudioLevelEventHandler AudioLevel; + + event _ISpeechVoiceEvents_EnginePrivateEventHandler EnginePrivate; + } + + internal sealed class _ISpeechVoiceEvents_EventProvider : _ISpeechVoiceEvents_Event, IDisposable { + private readonly IConnectionPointContainer m_ConnectionPointContainer; + + private ArrayList m_aEventSinkHelpers; + + private IConnectionPoint m_ConnectionPoint; + + private void Init() { + Guid riid = new(new byte[16] + { + 209, 172, 114, 163, 239, 59, 189, 75, 143, 251, + 203, 62, 43, 65, 106, 248 + }); + m_ConnectionPointContainer.FindConnectionPoint(ref riid, out IConnectionPoint ppCP); + m_ConnectionPoint = ppCP; + m_aEventSinkHelpers = new ArrayList(); + } + + public event _ISpeechVoiceEvents_StartStreamEventHandler StartStream { + add { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_ConnectionPoint == null) { + Init(); + } + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = new(); + m_ConnectionPoint.Advise(iSpeechVoiceEvents_SinkHelper, out int pdwCookie); + iSpeechVoiceEvents_SinkHelper.m_dwCookie = pdwCookie; + iSpeechVoiceEvents_SinkHelper.m_StartStreamDelegate = value; + m_aEventSinkHelpers.Add(iSpeechVoiceEvents_SinkHelper); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + remove { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_aEventSinkHelpers == null) { + return; + } + int count = m_aEventSinkHelpers.Count; + int num = 0; + if (0 >= count) { + return; + } + do { + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = (_ISpeechVoiceEvents_SinkHelper)m_aEventSinkHelpers[num]; + if (iSpeechVoiceEvents_SinkHelper.m_StartStreamDelegate != null && ((iSpeechVoiceEvents_SinkHelper.m_StartStreamDelegate.Equals(value) ? 1u : 0u) & 0xFFu) != 0) { + m_aEventSinkHelpers.RemoveAt(num); + m_ConnectionPoint.Unadvise(iSpeechVoiceEvents_SinkHelper.m_dwCookie); + if (count <= 1) { + Marshal.ReleaseComObject(m_ConnectionPoint); + m_ConnectionPoint = null; + m_aEventSinkHelpers = null; + } + break; + } + num++; + } + while (num < count); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + } + + public event _ISpeechVoiceEvents_EndStreamEventHandler EndStream { + add { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_ConnectionPoint == null) { + Init(); + } + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = new(); + m_ConnectionPoint.Advise(iSpeechVoiceEvents_SinkHelper, out int pdwCookie); + iSpeechVoiceEvents_SinkHelper.m_dwCookie = pdwCookie; + iSpeechVoiceEvents_SinkHelper.m_EndStreamDelegate = value; + m_aEventSinkHelpers.Add(iSpeechVoiceEvents_SinkHelper); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + remove { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_aEventSinkHelpers == null) { + return; + } + int count = m_aEventSinkHelpers.Count; + int num = 0; + if (0 >= count) { + return; + } + do { + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = (_ISpeechVoiceEvents_SinkHelper)m_aEventSinkHelpers[num]; + if (iSpeechVoiceEvents_SinkHelper.m_EndStreamDelegate != null && ((iSpeechVoiceEvents_SinkHelper.m_EndStreamDelegate.Equals(value) ? 1u : 0u) & 0xFFu) != 0) { + m_aEventSinkHelpers.RemoveAt(num); + m_ConnectionPoint.Unadvise(iSpeechVoiceEvents_SinkHelper.m_dwCookie); + if (count <= 1) { + Marshal.ReleaseComObject(m_ConnectionPoint); + m_ConnectionPoint = null; + m_aEventSinkHelpers = null; + } + break; + } + num++; + } + while (num < count); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + } + + public event _ISpeechVoiceEvents_VoiceChangeEventHandler VoiceChange { + add { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_ConnectionPoint == null) { + Init(); + } + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = new(); + m_ConnectionPoint.Advise(iSpeechVoiceEvents_SinkHelper, out int pdwCookie); + iSpeechVoiceEvents_SinkHelper.m_dwCookie = pdwCookie; + iSpeechVoiceEvents_SinkHelper.m_VoiceChangeDelegate = value; + m_aEventSinkHelpers.Add(iSpeechVoiceEvents_SinkHelper); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + remove { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_aEventSinkHelpers == null) { + return; + } + int count = m_aEventSinkHelpers.Count; + int num = 0; + if (0 >= count) { + return; + } + do { + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = (_ISpeechVoiceEvents_SinkHelper)m_aEventSinkHelpers[num]; + if (iSpeechVoiceEvents_SinkHelper.m_VoiceChangeDelegate != null && ((iSpeechVoiceEvents_SinkHelper.m_VoiceChangeDelegate.Equals(value) ? 1u : 0u) & 0xFFu) != 0) { + m_aEventSinkHelpers.RemoveAt(num); + m_ConnectionPoint.Unadvise(iSpeechVoiceEvents_SinkHelper.m_dwCookie); + if (count <= 1) { + Marshal.ReleaseComObject(m_ConnectionPoint); + m_ConnectionPoint = null; + m_aEventSinkHelpers = null; + } + break; + } + num++; + } + while (num < count); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + } + + public event _ISpeechVoiceEvents_BookmarkEventHandler Bookmark { + add { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_ConnectionPoint == null) { + Init(); + } + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = new(); + m_ConnectionPoint.Advise(iSpeechVoiceEvents_SinkHelper, out int pdwCookie); + iSpeechVoiceEvents_SinkHelper.m_dwCookie = pdwCookie; + iSpeechVoiceEvents_SinkHelper.m_BookmarkDelegate = value; + m_aEventSinkHelpers.Add(iSpeechVoiceEvents_SinkHelper); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + remove { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_aEventSinkHelpers == null) { + return; + } + int count = m_aEventSinkHelpers.Count; + int num = 0; + if (0 >= count) { + return; + } + do { + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = (_ISpeechVoiceEvents_SinkHelper)m_aEventSinkHelpers[num]; + if (iSpeechVoiceEvents_SinkHelper.m_BookmarkDelegate != null && ((iSpeechVoiceEvents_SinkHelper.m_BookmarkDelegate.Equals(value) ? 1u : 0u) & 0xFFu) != 0) { + m_aEventSinkHelpers.RemoveAt(num); + m_ConnectionPoint.Unadvise(iSpeechVoiceEvents_SinkHelper.m_dwCookie); + if (count <= 1) { + Marshal.ReleaseComObject(m_ConnectionPoint); + m_ConnectionPoint = null; + m_aEventSinkHelpers = null; + } + break; + } + num++; + } + while (num < count); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + } + + public event _ISpeechVoiceEvents_WordEventHandler Word { + add { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_ConnectionPoint == null) { + Init(); + } + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = new(); + m_ConnectionPoint.Advise(iSpeechVoiceEvents_SinkHelper, out int pdwCookie); + iSpeechVoiceEvents_SinkHelper.m_dwCookie = pdwCookie; + iSpeechVoiceEvents_SinkHelper.m_WordDelegate = value; + m_aEventSinkHelpers.Add(iSpeechVoiceEvents_SinkHelper); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + remove { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_aEventSinkHelpers == null) { + return; + } + int count = m_aEventSinkHelpers.Count; + int num = 0; + if (0 >= count) { + return; + } + do { + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = (_ISpeechVoiceEvents_SinkHelper)m_aEventSinkHelpers[num]; + if (iSpeechVoiceEvents_SinkHelper.m_WordDelegate != null && ((iSpeechVoiceEvents_SinkHelper.m_WordDelegate.Equals(value) ? 1u : 0u) & 0xFFu) != 0) { + m_aEventSinkHelpers.RemoveAt(num); + m_ConnectionPoint.Unadvise(iSpeechVoiceEvents_SinkHelper.m_dwCookie); + if (count <= 1) { + Marshal.ReleaseComObject(m_ConnectionPoint); + m_ConnectionPoint = null; + m_aEventSinkHelpers = null; + } + break; + } + num++; + } + while (num < count); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + } + + public event _ISpeechVoiceEvents_SentenceEventHandler Sentence { + add { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_ConnectionPoint == null) { + Init(); + } + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = new(); + m_ConnectionPoint.Advise(iSpeechVoiceEvents_SinkHelper, out int pdwCookie); + iSpeechVoiceEvents_SinkHelper.m_dwCookie = pdwCookie; + iSpeechVoiceEvents_SinkHelper.m_SentenceDelegate = value; + m_aEventSinkHelpers.Add(iSpeechVoiceEvents_SinkHelper); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + remove { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_aEventSinkHelpers == null) { + return; + } + int count = m_aEventSinkHelpers.Count; + int num = 0; + if (0 >= count) { + return; + } + do { + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = (_ISpeechVoiceEvents_SinkHelper)m_aEventSinkHelpers[num]; + if (iSpeechVoiceEvents_SinkHelper.m_SentenceDelegate != null && ((iSpeechVoiceEvents_SinkHelper.m_SentenceDelegate.Equals(value) ? 1u : 0u) & 0xFFu) != 0) { + m_aEventSinkHelpers.RemoveAt(num); + m_ConnectionPoint.Unadvise(iSpeechVoiceEvents_SinkHelper.m_dwCookie); + if (count <= 1) { + Marshal.ReleaseComObject(m_ConnectionPoint); + m_ConnectionPoint = null; + m_aEventSinkHelpers = null; + } + break; + } + num++; + } + while (num < count); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + } + + public event _ISpeechVoiceEvents_PhonemeEventHandler Phoneme { + add { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_ConnectionPoint == null) { + Init(); + } + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = new(); + m_ConnectionPoint.Advise(iSpeechVoiceEvents_SinkHelper, out int pdwCookie); + iSpeechVoiceEvents_SinkHelper.m_dwCookie = pdwCookie; + iSpeechVoiceEvents_SinkHelper.m_PhonemeDelegate = value; + m_aEventSinkHelpers.Add(iSpeechVoiceEvents_SinkHelper); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + remove { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_aEventSinkHelpers == null) { + return; + } + int count = m_aEventSinkHelpers.Count; + int num = 0; + if (0 >= count) { + return; + } + do { + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = (_ISpeechVoiceEvents_SinkHelper)m_aEventSinkHelpers[num]; + if (iSpeechVoiceEvents_SinkHelper.m_PhonemeDelegate != null && ((iSpeechVoiceEvents_SinkHelper.m_PhonemeDelegate.Equals(value) ? 1u : 0u) & 0xFFu) != 0) { + m_aEventSinkHelpers.RemoveAt(num); + m_ConnectionPoint.Unadvise(iSpeechVoiceEvents_SinkHelper.m_dwCookie); + if (count <= 1) { + Marshal.ReleaseComObject(m_ConnectionPoint); + m_ConnectionPoint = null; + m_aEventSinkHelpers = null; + } + break; + } + num++; + } + while (num < count); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + } + + public event _ISpeechVoiceEvents_VisemeEventHandler Viseme { + add { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_ConnectionPoint == null) { + Init(); + } + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = new(); + m_ConnectionPoint.Advise(iSpeechVoiceEvents_SinkHelper, out int pdwCookie); + iSpeechVoiceEvents_SinkHelper.m_dwCookie = pdwCookie; + iSpeechVoiceEvents_SinkHelper.m_VisemeDelegate = value; + m_aEventSinkHelpers.Add(iSpeechVoiceEvents_SinkHelper); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + remove { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_aEventSinkHelpers == null) { + return; + } + int count = m_aEventSinkHelpers.Count; + int num = 0; + if (0 >= count) { + return; + } + do { + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = (_ISpeechVoiceEvents_SinkHelper)m_aEventSinkHelpers[num]; + if (iSpeechVoiceEvents_SinkHelper.m_VisemeDelegate != null && ((iSpeechVoiceEvents_SinkHelper.m_VisemeDelegate.Equals(value) ? 1u : 0u) & 0xFFu) != 0) { + m_aEventSinkHelpers.RemoveAt(num); + m_ConnectionPoint.Unadvise(iSpeechVoiceEvents_SinkHelper.m_dwCookie); + if (count <= 1) { + Marshal.ReleaseComObject(m_ConnectionPoint); + m_ConnectionPoint = null; + m_aEventSinkHelpers = null; + } + break; + } + num++; + } + while (num < count); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + } + + public event _ISpeechVoiceEvents_AudioLevelEventHandler AudioLevel { + add { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_ConnectionPoint == null) { + Init(); + } + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = new(); + m_ConnectionPoint.Advise(iSpeechVoiceEvents_SinkHelper, out int pdwCookie); + iSpeechVoiceEvents_SinkHelper.m_dwCookie = pdwCookie; + iSpeechVoiceEvents_SinkHelper.m_AudioLevelDelegate = value; + m_aEventSinkHelpers.Add(iSpeechVoiceEvents_SinkHelper); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + remove { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_aEventSinkHelpers == null) { + return; + } + int count = m_aEventSinkHelpers.Count; + int num = 0; + if (0 >= count) { + return; + } + do { + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = (_ISpeechVoiceEvents_SinkHelper)m_aEventSinkHelpers[num]; + if (iSpeechVoiceEvents_SinkHelper.m_AudioLevelDelegate != null && ((iSpeechVoiceEvents_SinkHelper.m_AudioLevelDelegate.Equals(value) ? 1u : 0u) & 0xFFu) != 0) { + m_aEventSinkHelpers.RemoveAt(num); + m_ConnectionPoint.Unadvise(iSpeechVoiceEvents_SinkHelper.m_dwCookie); + if (count <= 1) { + Marshal.ReleaseComObject(m_ConnectionPoint); + m_ConnectionPoint = null; + m_aEventSinkHelpers = null; + } + break; + } + num++; + } + while (num < count); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + } + + public event _ISpeechVoiceEvents_EnginePrivateEventHandler EnginePrivate { + add { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_ConnectionPoint == null) { + Init(); + } + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = new(); + m_ConnectionPoint.Advise(iSpeechVoiceEvents_SinkHelper, out int pdwCookie); + iSpeechVoiceEvents_SinkHelper.m_dwCookie = pdwCookie; + iSpeechVoiceEvents_SinkHelper.m_EnginePrivateDelegate = value; + m_aEventSinkHelpers.Add(iSpeechVoiceEvents_SinkHelper); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + remove { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_aEventSinkHelpers == null) { + return; + } + int count = m_aEventSinkHelpers.Count; + int num = 0; + if (0 >= count) { + return; + } + do { + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = (_ISpeechVoiceEvents_SinkHelper)m_aEventSinkHelpers[num]; + if (iSpeechVoiceEvents_SinkHelper.m_EnginePrivateDelegate != null && ((iSpeechVoiceEvents_SinkHelper.m_EnginePrivateDelegate.Equals(value) ? 1u : 0u) & 0xFFu) != 0) { + m_aEventSinkHelpers.RemoveAt(num); + m_ConnectionPoint.Unadvise(iSpeechVoiceEvents_SinkHelper.m_dwCookie); + if (count <= 1) { + Marshal.ReleaseComObject(m_ConnectionPoint); + m_ConnectionPoint = null; + m_aEventSinkHelpers = null; + } + break; + } + num++; + } + while (num < count); + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + } + + public _ISpeechVoiceEvents_EventProvider(object P_0) { + m_ConnectionPointContainer = (IConnectionPointContainer)P_0; + } + + public void Finalize() { + bool lockTaken = default; + try { + Monitor.Enter(this, ref lockTaken); + if (m_ConnectionPoint == null) { + return; + } + int count = m_aEventSinkHelpers.Count; + int num = 0; + if (0 < count) { + do { + _ISpeechVoiceEvents_SinkHelper iSpeechVoiceEvents_SinkHelper = (_ISpeechVoiceEvents_SinkHelper)m_aEventSinkHelpers[num]; + m_ConnectionPoint.Unadvise(iSpeechVoiceEvents_SinkHelper.m_dwCookie); + num++; + } + while (num < count); + } + Marshal.ReleaseComObject(m_ConnectionPoint); + } + catch (Exception) { + } + finally { + if (lockTaken) { + Monitor.Exit(this); + } + } + } + + public void Dispose() { + Finalize(); + GC.SuppressFinalize(this); + } + } + + [TypeLibType(TypeLibTypeFlags.FHidden)] + [ClassInterface(ClassInterfaceType.None)] + public sealed class _ISpeechVoiceEvents_SinkHelper : _ISpeechVoiceEvents { + public _ISpeechVoiceEvents_StartStreamEventHandler m_StartStreamDelegate; + + public _ISpeechVoiceEvents_EndStreamEventHandler m_EndStreamDelegate; + + public _ISpeechVoiceEvents_VoiceChangeEventHandler m_VoiceChangeDelegate; + + public _ISpeechVoiceEvents_BookmarkEventHandler m_BookmarkDelegate; + + public _ISpeechVoiceEvents_WordEventHandler m_WordDelegate; + + public _ISpeechVoiceEvents_SentenceEventHandler m_SentenceDelegate; + + public _ISpeechVoiceEvents_PhonemeEventHandler m_PhonemeDelegate; + + public _ISpeechVoiceEvents_VisemeEventHandler m_VisemeDelegate; + + public _ISpeechVoiceEvents_AudioLevelEventHandler m_AudioLevelDelegate; + + public _ISpeechVoiceEvents_EnginePrivateEventHandler m_EnginePrivateDelegate; + + public int m_dwCookie; + + public void StartStream(int P_0, object P_1) { + m_StartStreamDelegate?.Invoke(P_0, P_1); + } + + public void EndStream(int P_0, object P_1) { + m_EndStreamDelegate?.Invoke(P_0, P_1); + } + + public void VoiceChange(int P_0, object P_1, SpObjectToken P_2) { + m_VoiceChangeDelegate?.Invoke(P_0, P_1, P_2); + } + + public void Bookmark(int P_0, object P_1, string P_2, int P_3) { + m_BookmarkDelegate?.Invoke(P_0, P_1, P_2, P_3); + } + + public void Word(int P_0, object P_1, int P_2, int P_3) { + m_WordDelegate?.Invoke(P_0, P_1, P_2, P_3); + } + + public void Sentence(int P_0, object P_1, int P_2, int P_3) { + m_SentenceDelegate?.Invoke(P_0, P_1, P_2, P_3); + } + + public void Phoneme(int P_0, object P_1, int P_2, short P_3, SpeechVisemeFeature P_4, short P_5) { + m_PhonemeDelegate?.Invoke(P_0, P_1, P_2, P_3, P_4, P_5); + } + + public void Viseme(int P_0, object P_1, int P_2, SpeechVisemeType P_3, SpeechVisemeFeature P_4, SpeechVisemeType P_5) { + m_VisemeDelegate?.Invoke(P_0, P_1, P_2, P_3, P_4, P_5); + } + + public void AudioLevel(int P_0, object P_1, int P_2) { + m_AudioLevelDelegate?.Invoke(P_0, P_1, P_2); + } + + public void EnginePrivate(int P_0, int P_1, object P_2) { + m_EnginePrivateDelegate?.Invoke(P_0, P_1, P_2); + } + + internal _ISpeechVoiceEvents_SinkHelper() { + m_dwCookie = 0; + m_StartStreamDelegate = null; + m_EndStreamDelegate = null; + m_VoiceChangeDelegate = null; + m_BookmarkDelegate = null; + m_WordDelegate = null; + m_SentenceDelegate = null; + m_PhonemeDelegate = null; + m_VisemeDelegate = null; + m_AudioLevelDelegate = null; + m_EnginePrivateDelegate = null; + } + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/_ISpeechVoiceEvents.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/_ISpeechVoiceEvents.cs.meta new file mode 100644 index 0000000..ed35715 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/_ISpeechVoiceEvents.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1c3c12f0b7ed21640bd682a93c424cc5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/_LARGE_INTEGER.cs b/Assets/Plugins/Windows/Interop.SpeechLib/_LARGE_INTEGER.cs new file mode 100644 index 0000000..27f3506 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/_LARGE_INTEGER.cs @@ -0,0 +1,13 @@ +using System.Runtime.InteropServices; + +namespace SpeechLib { + [StructLayout(LayoutKind.Sequential, Pack = 8)] + public struct _LARGE_INTEGER { + public long QuadPart; + } + + [StructLayout(LayoutKind.Sequential, Pack = 8)] + public struct _ULARGE_INTEGER { + public ulong QuadPart; + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/_LARGE_INTEGER.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/_LARGE_INTEGER.cs.meta new file mode 100644 index 0000000..6bfec17 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/_LARGE_INTEGER.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a5d63bfbaad7d3140ba60ec09219c6ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/_RemotableHandle.cs b/Assets/Plugins/Windows/Interop.SpeechLib/_RemotableHandle.cs new file mode 100644 index 0000000..249fe4f --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/_RemotableHandle.cs @@ -0,0 +1,11 @@ +using System.Runtime.InteropServices; + +namespace SpeechLib { + + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct _RemotableHandle { + public int fContext; + + public __MIDL_IWinTypes_0009 u; + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/_RemotableHandle.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/_RemotableHandle.cs.meta new file mode 100644 index 0000000..9b0ac88 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/_RemotableHandle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1aee00bb40b368e458000dc92975b950 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/__MIDL_IWinTypes_0009.cs b/Assets/Plugins/Windows/Interop.SpeechLib/__MIDL_IWinTypes_0009.cs new file mode 100644 index 0000000..e0bef26 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/__MIDL_IWinTypes_0009.cs @@ -0,0 +1,12 @@ +using System.Runtime.InteropServices; + +namespace SpeechLib { + [StructLayout(LayoutKind.Explicit, Pack = 4)] + public struct __MIDL_IWinTypes_0009 { + [FieldOffset(0)] + public int hInproc; + + [FieldOffset(0)] + public int hRemote; + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/__MIDL_IWinTypes_0009.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/__MIDL_IWinTypes_0009.cs.meta new file mode 100644 index 0000000..78ce097 --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/__MIDL_IWinTypes_0009.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 437c5caaf12898c44a25f238ed519d70 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/tagSTATSTG.cs b/Assets/Plugins/Windows/Interop.SpeechLib/tagSTATSTG.cs new file mode 100644 index 0000000..655ca6a --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/tagSTATSTG.cs @@ -0,0 +1,30 @@ +using System; +using System.Runtime.InteropServices; + +namespace SpeechLib { + [StructLayout(LayoutKind.Sequential, Pack = 8)] + public struct tagSTATSTG { + [MarshalAs(UnmanagedType.LPWStr)] + public string pwcsName; + + public uint Type; + + public _ULARGE_INTEGER cbSize; + + public _FILETIME mtime; + + public _FILETIME ctime; + + public _FILETIME atime; + + public uint grfMode; + + public uint grfLocksSupported; + + public Guid clsid; + + public uint grfStateBits; + + public uint reserved; + } +} diff --git a/Assets/Plugins/Windows/Interop.SpeechLib/tagSTATSTG.cs.meta b/Assets/Plugins/Windows/Interop.SpeechLib/tagSTATSTG.cs.meta new file mode 100644 index 0000000..88e7b3c --- /dev/null +++ b/Assets/Plugins/Windows/Interop.SpeechLib/tagSTATSTG.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4bc0a06fd8444bb4a8c516efc53cb0fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: