在人工智慧時代,文字轉語音是現在人工智慧比較熱門的功能,各大公司都有這方面的業務,可以透過介面對各種文字轉語音,甚至能模擬真人,非常的強大。.NET 東家微軟其實也有這方面的服務。如果大家對語言轉文字的要求不高,可以用微軟自己的語音轉換類別庫,而且實作很簡單,只需要 5 行程式碼實現,本文將介紹如何使用
使用步驟
1、環境準備
新建一個控制台專案,並使用 nuget 工具安裝:System.Speech,也可以在本地類別庫新增安裝,如下圖 nuget 安裝

2、輸入如下程式碼,並加入參考using System.Speech.Synthesis;
static void Main(string[] args)
{
// 實例化 SpeechSynthesizer.
SpeechSynthesizer synth = new SpeechSynthesizer();
// 設定音訊輸出.
synth.SetOutputToDefaultAudioDevice();
// 字串轉語言.
synth.Speak("你好!DotNeT開發跳槽");
Console.WriteLine();
Console.WriteLine("按任意鍵退出...");
Console.ReadKey();
}
成功朗讀「你好!DotNeT 開發跳槽」,這裡是控制台應用,大家可以拿 winfrom 和 wpf 實現一下更加完美。
擴充範例
我們這裡拿.NET網站實現一下轉語音的功能,需求是輸入文字框一句話,用這個System.Speech控制項轉換成音訊,並載入到頁面讀取。
1、首先新建一個.NET的 web 應用,按上面的例子用nuget引入System.Speech
2、新建一個index.shtml頁面,設計一個簡單的文字框和查詢按鈕和一個音訊輸出控制項,程式碼如下
<form>
<p>
Title: <input type="text" asp-for="Speektext" />
<input type="submit" value="生成語音" />
</p>
</form>
<audio style="width:350px;height:50px;" id="bofang" controls>
<source src="@Model.filename" type="audio/mpeg" />
</audio>
3、在Index.cshtml.cs頁面新建一個輸入文字轉換文字屬性和檔案路徑屬性,並建構函式注入讀取路徑中介軟體。
private readonly IHostingEnvironment _IhostingEnvironment;
[BindProperty(SupportsGet = true)]
//用來輸入要轉換的文字
public string? Speektext { get; set; }
//用來輸出檔案路徑
public string filename { get; set; }
//注入用來讀取存放資源檔案的路徑
public IndexModel(IHostingEnvironment hostingEnvironment)
{
_IhostingEnvironment= hostingEnvironment;
}
4、在OnGetAsync方法中編寫音訊處理邏輯,程式碼如下:
public async Task OnGetAsync()
{
string wavname = "test";
string filePath = _IhostingEnvironment.WebRootPath+ $"\\speech\\{wavname}.wav";
bool isFile = System.IO.File.Exists(filePath);
if (isFile)
{
// 刪除檔案
System.IO.File.Delete(filePath);
}
if (string.IsNullOrEmpty(Speektext))
Speektext = "你好!歡迎關注「dotnet開發跳槽!」";
if (!string.IsNullOrEmpty(Speektext))
{
using (SpeechSynthesizer synth = new SpeechSynthesizer())
{
//設定音訊檔案,設定輸出流和檔案格式
synth.SetOutputToWaveFile(filePath, new SpeechAudioFormatInfo(32000, AudioBitsPerSample.Sixteen, AudioChannel.Mono));
// 建立空的 Prompt 物件,並為加入內容、選擇語音、控制語音屬性和控制朗讀單字的發音提供方法
PromptBuilder builder = new PromptBuilder();
builder.AppendText(Speektext);
//輸出檔案
synth.Speak(builder);
}
//回傳檔案路徑
filename = $"\\speech\\{wavname}.wav";
}
}
5、在前端用 js 載入到音訊控制項。
<input type="button" id="aa" value="播放" onclick="bofang()" />
<script type="text/javascript">
function bofang() {
var url = "@Model.filename.Replace("\\","\\\\")";
var audio = document.getElementById('bofang');
$('#bofang').attr('src',url);
audio.play();
}
</script>
這樣就可以用文字框輸入內容,然後讀取音訊了,大家可以拿這個程式碼封裝一下,改造成新聞語音朗讀。效果如下:

範例程式碼連結:
https://pan.baidu.com/s/1IJadMleVEM3ePHE_KHqRqA?pwd=soiq
提取碼:soiq
結語
本文介紹了.NET 簡單的使用文字轉語音的方法,大家可以參考一下,封裝成自己的方法。注意本例只支援 Windows 環境,在跨平台專案大家可以自己探究一下。希望本文對大家學習和工作有一定參考價值,謝謝大家的支持。
本文參考:微軟官方技術文件
站長擴充
參考原文 .NET 3 行程式碼實現文字轉語音功能,站長建立 MAUI Blazor 專案,按照文中步驟,新增 nuget 套件,成功實現文字轉語音功能,貼下關鍵程式碼並附上拍攝的影片:
@page "/"
@using System.Speech.Synthesis
<h1>請輸入需要轉換的文字,然後點選播放按鈕</h1>
<MRow>
<MCol Cols="12" Md="4">
<MTextField @bind-Value="_message" Label="待轉換文字"></MTextField>
</MCol>
</MRow>
<MRow>
<MCol Cols="12" Md="4">
<MButton Class="mr-4" Color="@(string.IsNullOrEmpty(_message) ? "warning" : "success")" OnClick="PlayWord">播放</MButton>
</MCol>
</MRow>
@code{
private string _message;
private SpeechSynthesizer _synth;
private void PlayWord()
{
if (_synth == null)
{
_synth = new SpeechSynthesizer();
_synth.SetOutputToDefaultAudioDevice();
}
_synth.Speak(_message);
}
}