.NET 3行程式碼實現文字轉語音功能

.NET 3行程式碼實現文字轉語音功能

在人工智慧時代,文字轉語音是現在人工智慧比較熱門的功能,各大公司都有這方面的業務,可以透過介面對各種文字轉語音,甚至能模擬真人,非常的強大

最後更新 2022/7/25 下午9:42
翔星 DotNet开发跳槽
預計閱讀 5 分鐘
分類
.NET
標籤
.NET C# AI

在人工智慧時代,文字轉語音是現在人工智慧比較熱門的功能,各大公司都有這方面的業務,可以透過介面對各種文字轉語音,甚至能模擬真人,非常的強大。.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);
    }

}
繼續探索

延伸閱讀

更多文章
同分類 / 同標籤 2026/1/5

寫給所有 .NET 開發者的 2025 年度總結

相信今年大家沒少看到 《抱歉,C# 已經跌出第一梯隊》類似的文章,.NET 生態到底如何,本文將為你系統梳理 2025 年 .NET 開發者最應該關注的技術趨勢和重要事件,涵蓋AI發展、.NET演進及兩者融合的最新動態和趨勢,以求幫助大家找准定位,迎接未來的挑戰與機遇。

繼續閱讀
同分類 / 同標籤 2023/11/17

.NET8 正式發佈,C#12 新變化

雖然 8 又帶來了許多方面的增強,比如:人工智慧、雲原生、效能、native AOT 等,但我還是最關注 C# 語言和一些框架層面的變化,下面介紹下 C# 12 和框架中我認為比較實用的新增功能。

繼續閱讀