private SpeechLib.SpObjectToken FindMicByName(string name) { if (isot != null) { for (int i = 0; i < isot.Count; i++) { sot = isot.Item(i); string desc = sot.GetDescription(1033); string id = sot.Id; if (desc.Contains(name) != false) { break; } } return sot; } else return null; }
public void SetMicByName(string name, ref System.Speech.Recognition.SpeechRecognitionEngine sre) { if (isot != null) { sre.SetInputToDefaultAudioDevice(); sot = FindMicByName(name); if (sot != null) { FieldInfo fi = sre.GetType().GetField("_sapiRecognizer", BindingFlags.Instance | BindingFlags.NonPublic); object _sapiRecognizer = fi.GetValue(sre); MethodInfo mi = _sapiRecognizer.GetType().GetMethod("SetInput", BindingFlags.Instance | BindingFlags.NonPublic); object[] parms = new object[] { sot, true }; mi.Invoke(_sapiRecognizer, parms); } } }
using System; using System.Reflection; namespace RMI.SmartHouse.Service { /// <summary> /// . /// </summary> public class MicSelector : IDisposable { #region private SpeechLib.SpInProcRecoContext _siprc; private SpeechLib.ISpeechObjectTokens _isot; private SpeechLib.SpObjectToken _sot; private bool _isDisposed; #endregion #region /// <summary> /// . /// </summary> public MicSelector() { _siprc = new SpeechLib.SpInProcRecoContext(); _isot = _siprc.Recognizer.GetAudioInputs(null, null); _sot = null; } #endregion #region /// <summary> /// . /// </summary> public SpeechLib.ISpeechObjectTokens Isot { get { return _isot; } } #endregion #region /// <summary> /// . /// </summary> /// <param name="name"> .</param> /// <param name="sre"> .</param> public void SetMicByName(string name, ref System.Speech.Recognition.SpeechRecognitionEngine sre) { if (_isot != null) { sre.SetInputToDefaultAudioDevice(); _sot = FindMicByName(name); if (_sot != null) { FieldInfo fi = sre.GetType().GetField("_sapiRecognizer", BindingFlags.Instance | BindingFlags.NonPublic); if (fi != null) { object sapiRecognizer = fi.GetValue(sre); MethodInfo mi = sapiRecognizer.GetType().GetMethod("SetInput", BindingFlags.Instance | BindingFlags.NonPublic); object[] parms = { _sot, true }; mi.Invoke(sapiRecognizer, parms); } } } } /// <summary> /// . /// </summary> /// <param name="name"> .</param> /// <param name="sre"> .</param> public void SetMicByName(string name, ref Microsoft.Speech.Recognition.SpeechRecognitionEngine sre) { if (_isot != null) { sre.SetInputToDefaultAudioDevice(); _sot = FindMicByName(name); if (_sot != null) { FieldInfo fi = sre.GetType().GetField("_sapiRecognizer", BindingFlags.Instance | BindingFlags.NonPublic); if (fi != null) { object sapiRecognizer = fi.GetValue(sre); MethodInfo mi = sapiRecognizer.GetType().GetMethod("SetInput", BindingFlags.Instance | BindingFlags.NonPublic); object[] parms = { _sot, true }; mi.Invoke(sapiRecognizer, parms); } } } } /// <summary> /// . /// </summary> /// <returns> .</returns> public SpeechLib.ISpeechObjectTokens UpdateDeviceList() { if (_siprc != null) { _isot = _siprc.Recognizer.GetAudioInputs(null, null); return _isot; } return null; } /// <summary> /// . /// </summary> public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } #endregion #region /// <summary> /// . /// </summary> protected virtual void Dispose(bool disposing) { if (!_isDisposed) { if (disposing) { _sot = null; _isot = null; _siprc = null; } _isDisposed = true; } } /// <summary> /// . /// </summary> /// <param name="name"> .</param> /// <returns> .</returns> private SpeechLib.SpObjectToken FindMicByName(string name) { if (_isot != null) { for (int i = 0; i < _isot.Count; i++) { _sot = _isot.Item(i); string desc = _sot.GetDescription(1033); if (desc.Contains(name)) { break; } } return _sot; } return null; } #endregion } }
Source: https://habr.com/ru/post/214635/