SpeechHelper.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System.Diagnostics;
  2. using System.Runtime.InteropServices;
  3. using System.Speech.AudioFormat;
  4. using System.Speech.Recognition;
  5. using System.Speech.Synthesis;
  6. namespace TextToSpeechService;
  7. public class SpeechHelper
  8. {
  9. public static void TTS(MemoryStream ms,string txt ,int? rate,int? vol)
  10. {
  11. // 只能在Windows平台运行
  12. if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
  13. {
  14. return;
  15. }
  16. using var synthesizer = new SpeechSynthesizer();
  17. synthesizer.Rate = rate ?? 0;
  18. synthesizer.Volume = vol ?? 90;
  19. synthesizer.SetOutputToWaveStream(ms);
  20. synthesizer.Speak(txt);
  21. }
  22. public static string SST(MemoryStream ms)
  23. {
  24. // 只能在Windows平台运行
  25. if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
  26. {
  27. return "";
  28. }
  29. var recognizer = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("zh-CN"));
  30. recognizer.SetInputToWaveStream(ms);
  31. recognizer.InitialSilenceTimeout = TimeSpan.FromSeconds(500);
  32. RecognitionResult result = recognizer.Recognize();
  33. return result.Text;
  34. }
  35. public static string SST(byte[] bytes)
  36. {
  37. // 只能在Windows平台运行
  38. if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
  39. {
  40. return "";
  41. }
  42. //foreach (var x in SpeechRecognitionEngine.InstalledRecognizers())
  43. //{
  44. // Debug.WriteLine(x.Culture.Name);
  45. //}
  46. using var recognizer = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("zh-CN"));
  47. recognizer.LoadGrammar(new DictationGrammar());
  48. //string inFile = AppDomain.CurrentDomain.BaseDirectory + "/test/demo.wav";
  49. //recognizer.SetInputToWaveFile(inFile);
  50. recognizer.SetInputToWaveStream(new MemoryStream(bytes));
  51. recognizer.InitialSilenceTimeout = TimeSpan.FromSeconds(0);
  52. RecognitionResult result = recognizer.Recognize();
  53. return result?.Text ?? "";
  54. }
  55. }