.NET 3行のコードでテキスト読み上げ機能を実現

.NET 3行のコードでテキスト読み上げ機能を実現

人工知能時代において、テキスト読み上げは現在人工知能の比較的人気のある機能です。各大手企業はこの分野のビジネスを持っており、インターフェースを通じて様々なテキストを音声に変換でき、さらには人間を模倣することもでき、非常に強力です。

最終更新 2022/07/25 21:42
翔星 DotNet开发跳槽
読了目安 4 分
カテゴリ
.NET
タグ
.NET C# AI

AI時代において、テキスト読み上げは現在AIの注目機能の一つであり、各大手企業がこの分野で事業を展開しています。APIを通じて様々なテキストを音声に変換でき、さらには人間を模倣することも可能で、非常に強力です。.NETの本家であるMicrosoftにも、この分野のサービスがあります。もしテキスト読み上げの要求がそこまで高くなければ、Microsoft自身の音声変換ライブラリを使用することができ、実装は非常に簡単で、わずか5行のコードで実現できます。本記事ではその使用方法を紹介します。

使用手順

  1. 環境準備

コンソールプロジェクトを新規作成し、nugetツールを使用してSystem.Speechをインストールします。ローカルのライブラリに追加インストールすることも可能です。下図のようにnugetインストールを行います。

  1. 以下のコードを入力し、参照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開発転職」と読み上げが成功します。ここではコンソールアプリですが、WinFormsやWPFを使ってより完成度の高いものを作成することも可能です。

拡張例

ここでは.NETのWebサイトを使用して音声変換機能を実装します。要件は、テキストボックスに一文を入力し、この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>
  1. 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;
}
  1. 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";
    }
}
  1. フロントエンドでJavaScriptを使用して音声コントロールに読み込みます。
<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環境のみ対応している点に注意してください。クロスプラットフォームのプロジェクトでは、各自調査を行ってください。本記事が皆様の学習や業務に少しでも参考になれば幸いです。ご支援ありがとうございます。

本記事の参考:Microsoft公式技術ドキュメント

サイト管理者による拡張

元記事.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/01/05

すべての .NET 開発者に贈る 2025 年度総括

今年、皆さんは「申し訳ありません、C# は第一線から脱落しました」といった類の記事を何度も目にしたことでしょう。.NET エコシステムは実際どうなのか、本記事では 2025 年に .NET 開発者が最も注目すべき技術トレンドと重要イベントを体系的に整理します。AI の発展、.NET の進化、そして両者の融合に関する最新動向とトレンドを網羅し、皆さんが自らの立ち位置を正確に把握し、将来の挑戦と機会に備える手助けをします。

続きを読む
同じカテゴリ / 同じタグ 2023/11/17

.NET8 正式リリース、C#12 の新機能

8 では、人工知能、クラウドネイティブ、パフォーマンス、ネイティブ AOT など、多くの面での強化がもたらされましたが、私はやはり C# 言語とフレームワークレベルの変更に最も注目しています。以下では、C# 12 とフレームワークにおける実用的な新機能を紹介します。

続きを読む