web-dev-qa-db-ja.com

テキスト文字列を音声に変換する方法

私はENGのテキスト(文字列)をC#のスピーチ(音)に変換する方法を探しています。このタスクで私を助けることができる方法またはオープンソースのライブラリを知っている人はいますか?

44
user2110292

.NET lib( System.Speech.Synthesis )を使用できます。

Microsoft によると:

System.Speech.Synthesis名前空間には、音声合成エンジンの初期化と構成、プロンプトの作成、音声の生成、イベントへの応答、音声特性の変更を可能にするクラスが含まれています。音声合成は、多くの場合、テキスト読み上げまたはTTSと呼ばれます。

スピーチシンセサイザは、入力としてテキストを受け取り、出力としてオーディオストリームを生成します。音声合成は、音声合成(TTS)とも呼ばれます。

シンセサイザーは、文字列を単語が話されるように聞こえる音声ストリームに正確に変換するために、十分な分析と処理を実行する必要があります。これがどのように機能するかを想像する最も簡単な方法は、2部構成のシステムのフロントエンドとバックエンドを想像することです。

テキスト分析

フロントエンドは、自然言語ルールを使用したテキストの分析を専門としています。文字列を分析して、単語の場所を判断します(英語では簡単ですが、中国語や日本語などの言語では簡単ではありません)。このフロントエンドは、機能や品詞などの文法的な詳細も把握します。たとえば、どの単語が固有名詞、数字などです。文の始まりと終わり。フレーズが質問か声明かどうか。そして、陳述が過去、現在、または未来時制であるかどうか。

これらの要素はすべて、単語、フレーズ、および文の適切な発音とイントネーションの選択に不可欠です。英語では、質問は通常ピッチの上昇で終わること、または単語「read」はその時制によって非常に異なって発音されることを考慮してください。明らかに、単語やフレーズがどのように使用されているかを理解することは、テキストを音声に変換する重要な側面です。さらに問題を複雑にするために、ルールは言語ごとにわずかに異なります。したがって、ご想像のとおり、フロントエンドは非常に高度な分析を行う必要があります。

サウンド生成

バックエンドにはかなり異なるタスクがあります。フロントエンドで行われた分析を行い、それ自体の重要な分析を通じて、入力テキストに適切な音を生成します。古いシンセサイザー(およびフットプリントが最小の今日のシンセサイザー)は、アルゴリズム的に個々のサウンドを生成し、非常にロボット的なサウンドをもたらします。 Windows VistaやWindows 7のような最新のシンセサイザーは、何時間もの録音された音声から構築されたサウンドセグメントのデータベースを使用します。バックエンドの有効性は、特定の入力に適切なサウンドセグメントを選択し、それらをスムーズにつなぎ合わせるのにどれだけ優れているかに依存します。

すぐに使用可能

上記のテキスト読み上げ機能は、Windows VistaおよびWindows 7オペレーティングシステムに組み込まれているため、アプリケーションはこのテクノロジを簡単に使用できます。これにより、独自の音声エンジンを作成する必要がなくなります。単一の関数呼び出しでこの処理をすべて呼び出すことができます。文字列の内容を話すをご覧ください。

このコードを試してください:

using System.Speech.Synthesis;

namespace ConsoleApplication5
{
    class Program
    {

        static void Main(string[] args)
        {
            SpeechSynthesizer synthesizer = new SpeechSynthesizer();
            synthesizer.Volume = 100;  // 0...100
            synthesizer.Rate = -2;     // -10...10

            // Synchronous
            synthesizer.Speak("Hello World");

            // Asynchronous
            synthesizer.SpeakAsync("Hello World");



        }

    }
}
54
One Man Crew

この機能は、 System.Speech 名前空間のメインクラスライブラリに存在します。特に、 System.Speech.Synthesis を見てください。

System.Speech.dllへの参照を追加する必要があることに注意

SpeechSynthesizerクラスは、ホストコンピューターにインストールされている音声合成エンジンの機能へのアクセスを提供します。インストールされた音声合成エンジンは、Microsoft Annaなどの音声で表されます。 SpeechSynthesizerインスタンスは、デフォルトの音声に初期化されます。インストールされている他の音声のいずれかを使用するようにSpeechSynthesizerインスタンスを構成するには、SelectVoiceまたはSelectVoiceByHintsメソッドを呼び出します。インストールされているボイスに関する情報を取得するには、GetInstalledVoicesメソッドを使用します。

すべてのMSDNドキュメントと同様に、使用するコードサンプルがあります。以下は、System.Speech.Synthesis.SpeechSynthesizerクラスのものです。

using System;
using System.Speech.Synthesis;

namespace SampleSynthesis
{
  class Program
  {
    static void Main(string[] args)
    {

      // Initialize a new instance of the SpeechSynthesizer.
      SpeechSynthesizer synth = new SpeechSynthesizer();

      // Configure the audio output. 
      synth.SetOutputToDefaultAudioDevice();

      // Speak a string.
      synth.Speak("This example demonstrates a basic use of Speech Synthesizer");

      Console.WriteLine();
      Console.WriteLine("Press any key to exit...");
      Console.ReadKey();
    }
  }
}
20
David
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Speech.Synthesis; // first import this package

    namespace textToSpeech
    {
        public partial class home : Form
        {
            public string s = "pran"; // storing string (pran) to s

            private void home_Load(object sender, EventArgs e)
                {
                    speech(s); // calling the function with a string argument
                }

            private void speech(string args) // defining the function which will accept a string parameter
                {
                    SpeechSynthesizer synthesizer = new SpeechSynthesizer();
                    synthesizer.SelectVoiceByHints(VoiceGender.Male , VoiceAge.Adult); // to change VoiceGender and VoiceAge check out those links below
                    synthesizer.Volume = 100;  // (0 - 100)
                    synthesizer.Rate = 0;     // (-10 - 10)
                    // Synchronous
                    synthesizer.Speak("Now I'm speaking, no other function'll work");
                    // Asynchronous
                    synthesizer.SpeakAsync("Welcome" + args); // here args = pran
                }       
         }
    }
  • 「SpeakAsync」を使用するほうが適切です

VoiceGenderの変更
VoiceAgeの変更

5
Pran

System.Speech.Synthesis名前空間を使用してこれを行うことができます。そのためには、最初にSystem.speech.dllへの参照を追加する必要があります。

これを試して:

using System.Speech.Synthesis;

namespace TextToSpeech
{
   public partial class Form1 : Form
   {
     SpeechSynthesizer speak;
     public Form1()
     {
        InitializeComponent();
        speak = new SpeechSynthesizer();
     }

     private void button1_Click(object sender, EventArgs e)
     {
        string text="Speak this";
        speak.SpeakAsync(text);
     }
  }
}
1
Ashin

Googleが最近公開したGoogle Cloud Text To Speech

。NETGoogle.Cloud.TextToSpeechのクライアントバージョンは、ここにあります: https://github.com/jhabjan/Google.Cloud .TextToSpeech.V1

Nuget:Install-Package JH.Google.Cloud.TextToSpeech.V1

クライアントの使用方法の簡単な例を次に示します。

GoogleCredential credentials =
    GoogleCredential.FromFile(Path.Combine(Program.AppPath, "jhabjan-test-47a56894d458.json"));

TextToSpeechClient client = TextToSpeechClient.Create(credentials);

SynthesizeSpeechResponse response = client.SynthesizeSpeech(
    new SynthesisInput()
    {
        Text = "Google Cloud Text-to-Speech enables developers to synthesize natural-sounding speech with 32 voices"
    },
    new VoiceSelectionParams()
    {
        LanguageCode = "en-US",
        Name = "en-US-Wavenet-C"
    },
    new AudioConfig()
    {
        AudioEncoding = AudioEncoding.Mp3
    }
);

string speechFile = Path.Combine(Directory.GetCurrentDirectory(), "sample.mp3");

File.WriteAllBytes(speechFile, response.AudioContent);
1
HABJAN

System.Speech libraryを使用してそれを行うことができます。 この例 を見てください

0
user4340666