8

我在 SuperUser 上问过这个问题,但它被置若罔闻。希望我能在这里得到更多的观众。

我正在寻找像ScriptVox这样的低成本(或免费)解决方案,只有更好的引擎。也就是说,阅读脚本并将字符分配给语音。我在这里读过这篇文章,但即使有那些我也必须连接 wav 文件。不是我不喜欢 Audacity,而是它很耗时。我正在考虑编写自己的代码,但我确信必须有一个解决方案。有什么建议么?

4

4 回答 4

10

我会使用微软的文字转语音引擎。他们有一个简单的例子来说明如何做你正在寻找的东西:

http://msdn.microsoft.com/en-us/library/ms717065(v=vs.85).aspx

使用该示例代码,您可以说出一些文本并将其转储到 WAV 文件中。从那里,如果您需要转换为 MP3 等格式,您可以使用 FFMPEG。

于 2012-04-13T17:30:35.327 回答
5

布拉德的答案非常棒,因为它包含您正在寻找的内容。但是,它缺少您在问题勘误表中表达的偏好的一个基础:C# 中的实现。

这是获取托管代码中语音 API 访问权限的完整教程。完全归功于 Blake Niemyjski 和 Microsoft 的相关团队,这里有一些突出的部分,因为原始文章的链接已经失效,这似乎是直接从 Microsoft 借来的:

以下链接(给计算机一个声音)将引导您到一个 Microsoft 站点,该站点将向您展示如何创建一个项目,并立即在 VB .Net 或 c# 中启动和运行基本的文本到语音应用程序!

SAPI

SAPI 是一种语音 API,可让应用程序访问语音识别和文本转语音 (TTS) 引擎。本文重点介绍 TTS。对于 TTS,SAPI 将文本作为输入,并使用 TTS 引擎将该文本作为语音输出。这与 Windows 辅助工具“讲述人”使用的技术相同。自 XP 以来的每个 Windows 版本都附带 SAPI 和英文 TTS 引擎。

TTS 让用户的耳朵发挥作用。它允许应用程序向用户发送信息,而无需用户的眼睛或手。这是一个非常强大的输出选项,在 PC 上不经常使用。

在托管应用程序中使用 TTS 需要三个步骤:

  1. 创建互操作 DLL

由于 SAPI 是一个 COM 组件,因此需要一个互操作 DLL 才能从托管应用程序中使用它。要创建它,请在 Visual Studio 中打开项目。选择项目菜单并单击添加引用。选择 COM 选项卡,在列表中选择“Microsoft Speech Object Library”,然后单击“确定”。这些步骤将此引用添加到您的项目,并在与您的可执行文件相同的文件夹中创建一个 Interop.SpeechLib.dll。此互操作 DLL 必须始终与您的 .exe 位于同一文件夹中才能正常工作。

  1. 引用互操作命名空间

在您的应用程序中包含此命名空间。在 C# 中,添加“使用 SpeechLib;”;i 在 VB 中,添加“导入 SpeechLib”。

  1. 调用说话()

创建一个 SpVoice 对象并调用 Speak():

视觉 C#

SpVoice voice = new SpVoice();
voice.Speak("Hello World!", SpeechVoiceSpeakFlags.SVSFDefault);

视觉基础

voice = New SpVoice
voice.Speak("Hello World!", SpeechVoiceSpeakFlags.SVSFDefault)

我觉得布拉德的回答让我在这里找到了正确的解决方案(因此,他比我更值得称赞),但这应该是你遗漏的最后一块。您现在应该能够在托管代码中复制从C++ 解决方案写入的 WAV 文件,并从那里转码为您想要的格式。

于 2012-04-14T17:27:54.683 回答
3

如果让程序访问互联网是可以接受的,那么您可以使用iSpeech

您可以使用他们的API,但不幸的是,它仅限于每天 200 次使用。

他们的 API 还允许format=(wav|mp3)在查询之后追加,让您以两种所需的格式获得声音。

于 2012-04-15T22:24:46.740 回答
1

http://en.wikipedia.org/wiki/Comparison_of_speech_synthesizers

这就是我所拥有的。

谷歌翻译使用 eSpeak http://support.google.com/translate/

于 2012-04-13T17:26:53.400 回答