我正在寻找一种方法来ENG在C#转换文本(字符串),语音(声音)。 做任何人都知道一种方法或一些开源的lib,可以帮助我完成这个任务?
Answer 1:
您可以使用.NET LIB( System.Speech.Synthesis )。
据微软 :
该System.Speech.Synthesis命名空间包含类,允许你初始化和配置语音合成引擎,创建提示,产生讲话,对事件做出响应,并修改声音的特性。 语音合成通常被称为文本到语音或TTS。
一种语音合成器需要文本作为输入,并产生一个音频数据流作为输出。 语音合成也被称为文本到语音(TTS)。
一种合成器必须执行大量的分析和处理,以字符的字符串准确地转换成听起来就像单词将被说出的音频流。 想象这是如何工作的最简单方法是将图片中的前端和两部分系统的后端。
文本分析
前端擅长使用自然语言规则文本的分析。 它分析字符的字符串,以确定该字是(这是很容易用英语做,但不是在语言,如中国和日本一样简单)。 该前端也可以计算语法的细节,如功能和词类。 举例来说,这词是专有名词,数字等; 其中,句子的开始和结束; 是否一个短语是一个问题或陈述; 并且声明是过去,现在,还是将来时。
所有这些因素都对单词,短语和句子适当发音和语调的选择是至关重要的。 想想看,在英语中,问题通常用升调结尾,或者说这个词“读”的发音是非常不同,这取决于它的紧张。 显然,了解是如何被使用的单词或短语是将文本转换成声音的一个重要方面。 为了进一步使问题复杂化,规则是为每一种语言略有不同。 所以,你可以想像,前端必须做一些非常复杂的分析。
声音产生
后端有相当不同的任务。 这需要通过前端做了分析,并通过其自己的一些不平凡的分析,生成相应的声音为输入文本。 年长的合成器(和今天的以最小的足迹合成器)产生的个人语音算法,产生一个非常机器人的声音。 现代合成器,如一个在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");
}
}
}
Answer 2:
此功能主要类库中存在于System.Speech命名空间。 特别是,期待中System.Speech.Synthesis 。
请注意,您可能需要添加到System.Speech.dll参考。
所述SpeechSynthesizer类提供访问到被安装在主机计算机上的语音合成引擎的功能性。 安装语音合成引擎通过声音来表示,例如微软安娜。 一个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();
}
}
}
Answer 3:
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公司变更
Answer 4:
最近谷歌发布谷歌云文本到语音 。
Google.Cloud.TextToSpeech的.NET客户端版本可以在这里找到: 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);
Answer 5:
你可以用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);
}
}
}
Answer 6:
你可以做,使用System.Speech库。 看看这个例子