我創建了一個Web項目
public class HomeController : ApiController { public SpeechSynthesizer speechSyn = new SpeechSynthesizer(); /// <summary> /// 返回MP3路徑 /// </summary> /// <param name="article">文章</param> /// <param name="name">mp3名稱</param> /// <param name="isHTML">是否html</param> /// <returns></returns> [HttpPost] [Route("SpeechArticle")] public IHttpActionResult SpeechArticle(SpeechArticleViewModel model) { try { // 如果是html 則 過濾html 提取 文本 if (model.isHTML) model.article = GetStringFilterHtml(model.article); var voices = speechSyn.GetInstalledVoices().ToList(); speechSyn.SpeakAsyncCancelAll(); speechSyn.Rate = 0; //語速 speechSyn.Volume = 100; //音量 var selectedValue = voices[0]; if (selectedValue is InstalledVoice voiceInfo) { speechSyn.SelectVoice(voiceInfo.VoiceInfo.Name); }
//創建一個保存文件的文件夾 Directory.CreateDirectory("D:\\articleMP3"); string filePath = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer) + $"D:\\articleMP3\\{model.name}.mp3"; if (File.Exists(filePath)) { //File.Delete(filePath); //如果文件已經存在 直接返回文件所在路徑 return Json(filePath); } else { speechSyn.SetOutputToWaveFile(filePath); speechSyn.Speak(model.article); speechSyn.SetOutputToDefaultAudioDevice(); //保存錄音文件成功,保存路徑:filePath return Json(filePath); } } catch (Exception ex) { throw ex; } } /// <summary> /// 字符串過濾Html標簽 /// </summary> /// <param name="strHtml">待轉化的字符串</param> /// <returns>經過轉化的字符串</returns> public string GetStringFilterHtml(string strHtml) { try { if (String.IsNullOrEmpty(strHtml)) { return strHtml; } else { string[] aryReg ={ @"<script[^>]*?>.*?</script>", @"<!--.*\n(-->)?", @"<(\/\s*)?(.|\n)*?(\/\s*)?>", @"<(\w|\s|""|'| |=|\\|\.|\/|#)*", @"([\r\n|\s])*", @"&(quot|#34);", @"&(amp|#38);", @"&(lt|#60);", @"&(gt|#62);", @"&(nbsp|#160);", @"&(iexcl|#161);", @"&(cent|#162);", @"&(pound|#163);", @"&(copy|#169);", @"&#(\d+);"}; string newReg = aryReg[0]; string strOutput = strHtml.Replace(" ", " "); for (int i = 0; i < aryReg.Length; i++) { Regex regex = new Regex(aryReg[i], RegexOptions.IgnoreCase); strOutput = regex.Replace(strOutput, ""); } strOutput.Replace("<", ">"); strOutput.Replace(">", "<"); return strOutput.Replace(" ", " "); } } catch { return strHtml; } } }
這是后端的一個接口 發布到IIS上 可供所有網站使用 給方法提供內容 返回語音路徑
大家可以先用窗體程序 或者 控制台 進行測試
下面鏈接是我做的Demo及前端調用接口說明
鏈接: https://pan.baidu.com/s/1krvRkwjWmLdcUQwM1e0PRQ 提取碼: y53d
如需轉載,請標注原文。
