рдЧреИрд░-рдорд╛рдирдХ рдорд╛рдЗрдХреНрд░реЛрдлреЛрди рдорд╛рдиреНрдпрддрд╛

рдХреБрдЫ рдХреЛ рднрд╛рд╖рдг рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ, рдкрд╛рда рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрдИ рдмрд╛рд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рднреА рд╣реИрдВ рддрд╛рдХрд┐ Google рдорджрдж рдХрд░ рд╕рдХреЗ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЧреИрд░-рддреБрдЪреНрдЫ рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЕрд░реНрдерд╛рддреН рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдлреЛрди рд╕реЗ рднрд╛рд╖рдг рдкрд╣рдЪрд╛рди рдХреИрд╕реЗ рдХрд░реЗрдВ рдЬреЛ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ" рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИред рдЕрдЧрд░ рдЖрдкрдХреЛ рднреА рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ, рддреЛ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЗ рд▓рд┐рдП рд╣реИред

рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ - Microsoft Windows (рдорд╛рдирдХ рдФрд░ Microsoft рднрд╛рд╖рдг рдПрд╕рдбреАрдХреЗ 11) рдореЗрдВ рднрд╛рд╖рдг рдорд╛рдиреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЗрдВрдЬрди рд╣реИрдВ, рдФрд░ рддреБрд░рдВрдд рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд░реВрд╕реА рднрд╛рд╖рд╛ рдЕрдм рддрдХ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ, рдЕрд░реНрдерд╛рддреН Microsoft рднрд╛рд╖рдг рдПрд╕рдбреАрдХреЗ 11 рд╕реНрдерд╛рдкрд┐рдд рд░реВрд╕реА рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рдеред рдпрджрд┐ рдЖрдк рдзреНрдпрд╛рди рд╕реЗ рджреЛрдиреЛрдВ рдЗрдВрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЗрд╡рд▓ DefaultInputDevice рдХреЛ рдПрдХ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЧрд╣рд░реА рдЦреБрджрд╛рдИ, рдЕрд░реНрдерд╛рддреН, Telerik JustDecompile decompiler рдХреЗ рд╕рд╛рде рдЕрд╕реЗрдВрдмрд▓реА рдЦреЛрд▓рдирд╛, рдореИрдВрдиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рдХрд┐ рд╕рднреА рд╡рд░реНрдЧ COM рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдкрд░ рд╕рд┐рд░реНрдл рдПрдХ рдЖрд╡рд░рдг рд╣реИ, рдФрд░ рдЗрди COM рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдЖрдкрдХреЛ рдмрд╕ рдЬрд░реВрд░рдд рд╣реИ рд╕рдорд╛рд░реЛрд╣ рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╕рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рддрд░рд╣, рдореИрдВ рдЖрд▓рд╕реА рдерд╛ рдФрд░ COM рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рджреЛрдиреЛрдВ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдПрдВред рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкрд╣рд▓реА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕ рдорд╛рдЗрдХреНрд░реЛрдлреЛрди рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЙрд╕рдХреЗ рдЯреЛрдХрди рдХреЛ рджреЗрдЦреЗрдВ, рдирд┐рдореНрди рдлрд╝рдВрдХреНрд╢рди рдореМрдЬреВрдж рд╣реИ:
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); } } } 

рдЕрдВрдд рдореЗрдВ рдореИрдВ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рдХрд╛ рдкреВрд░рд╛ рдкрд╛рда рджреВрдВрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЗрд░реЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдкреВрд░реНрдг рдпрд╛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдмрд╕ рдЕрдкрдиреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдм рд╡рд┐рдВрдбреЛрдЬ 7,8,8.1, рдиреЗрдЯ 4.0, 4.5 рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдиреНрдп рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
 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/In214635/


All Articles