微軟Speech語音合成技術


我創建了一個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("&nbsp;", " "); for (int i = 0; i < aryReg.Length; i++) { Regex regex = new Regex(aryReg[i], RegexOptions.IgnoreCase); strOutput = regex.Replace(strOutput, ""); } strOutput.Replace("<", "&gt;"); strOutput.Replace(">", "&lt;"); return strOutput.Replace(" ", "&nbsp;"); } } catch { return strHtml; } } }

這是后端的一個接口 發布到IIS上 可供所有網站使用 給方法提供內容 返回語音路徑

大家可以先用窗體程序 或者 控制台 進行測試

下面鏈接是我做的Demo及前端調用接口說明

鏈接: https://pan.baidu.com/s/1krvRkwjWmLdcUQwM1e0PRQ 提取碼: y53d

 

如需轉載,請標注原文。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM