using Microsoft.CognitiveServices.Speech; using Microsoft.CognitiveServices.Speech.Audio; using System; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.IO; using System.Diagnostics; namespace BPASmartClient.Device { public class Speech { public static uint SND_ASYNC = 0x0001; public static uint SND_FILENAME = 0x0002; [DllImport("winmm.dll", CharSet = CharSet.Auto)] public static extern int mciSendString(string m_strCmd, string m_strReceive, int m_v1, int m_v2); [DllImport("Kernel32", CharSet = CharSet.Auto)] public static extern Int32 GetShortPathName(string path, StringBuilder shortPath, Int32 shortPathLength); private volatile static Speech _Instance; public static Speech GetInstance => _Instance ?? (_Instance = new Speech()); private Speech() { } /// /// 播放语音 /// /// public void Speak(string SpeakText) { string path = $"{AppDomain.CurrentDomain.BaseDirectory}Sound";//设置音频文件保存路径 Directory.CreateDirectory(path); string SpeakPath = $"{path}\\{SpeakText}.wav"; SpeakPath = SpeakPath.Replace(' ', '_'); if (!File.Exists(SpeakPath)) { var res = SynthesizeAudioAsync(SpeakText, SpeakPath); } StringBuilder shortPath = new StringBuilder(200); int result = GetShortPathName(SpeakPath, shortPath, shortPath.Capacity); string shortName = shortPath.ToString(); mciSendString(@"close all", null, 0, 0); mciSendString(@"open " + shortName + " alias song", null, 0, 0); mciSendString(@"play song", null, 0, 0); //return "22"; } /// /// 文字转音频 /// /// /// private string SynthesizeAudioAsync(string text, string path) { var config = SpeechConfig.FromSubscription("b88f6907c8f64075a6169dc4d7dff65a", "chinanorth2"); config.SpeechSynthesisLanguage = "zh-CN"; //config.SpeechSynthesisVoiceName = ""; using var audioConfig = AudioConfig.FromWavFileOutput(path); using var synthesizer = new SpeechSynthesizer(config, audioConfig); synthesizer.SpeakTextAsync(text).Wait(); //await Task.Delay(TimeSpan.FromSeconds(2)); return "1"; } } }