我有一个使用SAPI进行TTS的Web应用程序.我在默认安装了MS Sam的Windows Server 2003上运行它.
据我所知,有很多第三方公司都在销售声音.对于商业应用,哪些公司提供的许可证不收取大量费用?他们有API可以轻松地与ASP.NET应用程序集成吗?
我真的想为应用程序添加更多声音.
编辑:再说一遍?谢谢
我有一个演讲项目,需要在代码中完成声学训练.我成功地使用SAPI在Windows 7下创建了带有脚本及其相关注册表项的培训文件.但是,我无法确定识别引擎是否成功使用这些文件并调整其模型.我的问题如下:
通过控制面板培训UI执行培训时,系统将培训文件存储在"{AppData}\Local\Microsoft\Speech\Files\TrainingAudio"中.音频训练文件是否必须存储在此位置,或者只要配置文件的注册表项反映正确的路径,我是否可以将它们存储在其他位置?
一)不要用我的训练代码创建的注册表项必须被放置在"{00000000-0000-0000-0000-0000000000000000} \文件"或者我可以创建{下} ProfileGUID一个新的随机GUID?
b)子项是否必须命名为"文件"?
c)注册表值是否必须遵循"TrainingAudio-xxxx-xxxxxxxx-xxxxxxxx"格式,还是可以使用其他值?
d)最后,注册表值数据的格式为"%1c%\ Microsoft\Speech\Files\TrainingAudio\SP-xxx .... xxx".我可以指定绝对路径吗?
e)文件名是否必须遵循"SP-xxx .... xxx.wav"格式,或者我可以使用任何唯一的文件名吗?
谢谢.
吉里
如何通过按任何字母键来获得拼音?例如,我想A通过按下'A'键来获得语音声音.
我正在使用Microsoft SAPI v5.1.你能指出我正确的方向吗?
我在我的 C# WPF 项目中实现了 TTS。
以前,我使用 System.Speech.Synthesis 命名空间中的 TTS 来说话。说话内容为SSML格式(语音合成器标记语言,支持自定义语速、语音、强调)如下:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US"><prosody rate="x-fast">hello world. This is a long sentence speaking very fast!</prosody></speak>
Run Code Online (Sandbox Code Playgroud)
但不幸的是,System.Speech.Synthesis TTS 存在内存泄漏问题,正如我在问题Memory Leak in .Net Speech.Synthesizer?中提到的那样。。
所以我决定使用SAPI COM组件。我可以轻松地让SAPI讲纯文本内容。但后来我继续尝试让它说出 SSML 字符串,但失败了。代码如下:
//Initialize TTS instance
SpeechLib.SpVoiceClass tts = new SpeechLib.SpVoiceClass();
//Generate SSML string
string textToSpeak = "hello world speak Extra Fast.";
PromptBuilder pb = new PromptBuilder();
pb.StartStyle(new PromptStyle(PromptRate.ExtraFast));
pb.AppendText(textToSpeak);
pb.EndStyle();
ssmlString = pb.ToXml(); //ssmlString = @"<speak version=""1.0"" ....
//Speak!
tts.Speak(ssmlString, SpeechLib.SpeechVoiceSpeakFlags.SVSFParseSsml);
Run Code Online (Sandbox Code Playgroud)
代码的重要部分是
tts.Speak(ssmlString, SpeechLib.SpeechVoiceSpeakFlags.SVSFParseSsml);
Run Code Online (Sandbox Code Playgroud)
它使用 …
我正在尝试使用SAPI 5.4(也是MS Speech Platform SDK v11)对来自Skype呼叫的音频执行连续语音识别.
我可以使用SKYPE4COMLib来获取来自Skype的音频,并通过发出ALTER CALL指令将其推送到TCP端口.您可以将Skype音频定向到文件或TCP套接字.文件工作正常,但我想让它现场运行识别,所以使用TCP套接字.
然后,我构建了一个TCP侦听器来收集传入的数据(音频原始格式),并将字节数组作为MemoryStream传递给SAPI.我已经设置了SAPI,以期望16bit,16khz,mono,PCM格式的原始音频.然而,识别事件永远不会发生?!
我已经尝试将原始音频保存到磁盘,然后将其读入SAPI并且工作正常......因此数据本身很好,Skype正在发送音频.然而,这不能让我做我需要的持续认可.
使用WAV文件或从磁盘或麦克风加载的原始文件,SAPI识别代码可以正常工作.我无法从MemoryStream中获取它.
我发现这篇类似的文章,似乎没有任何建议对我有用,讨论似乎已经变得安静了.
将输入流式传输到System.Speech.Recognition.SpeechRecognitionEngine
有没有人对如何成功让SAPI持续识别C#中作为MemoryStream发送的原始音频的语音有任何指导?
好吧,我在 Windows 桌面开发论坛上问过这个问题,但仍然没有答案。所以我会在这里试试。
Microsoft Sapi 5.4 和 Microsoft Speech Platform SDK 11 有什么区别?如果您知道,请说明优缺点。
我终于构建了一个程序来使用 NAudio 收听内部音频环回,并输出识别的文本。问题是它会倾听,并且总是说,例如:
Recognized text: had
Recognized text: had
Recognized text: had
Recognized text: had
Recognized text: had had phone Le K add phone Laton
Recognized text: had phone looked had phone looked had phone looked had phone lo
oked zone
Recognized text: had phone lines to had, had phone looked had phone looked had p
hone line had phone
Recognized text: had phone line had phone looked had phone
Recognized text: had phone looked had phone looked had phone …Run Code Online (Sandbox Code Playgroud) 以下工作完美(Delphi 7):
procedure TMainForm.SayIt(s:string); // s is the string to be spoken
var
voice: OLEVariant;
begin
memo1.setfocus;
voice := CreateOLEObject ('SAPI.SpVoice');
voice.Voice := voice.GetVoices.Item(combobox1.ItemIndex); // current voice selected
voice.volume := tbVolume.position;
voice.rate := tbRate.position;
voice.Speak (s, SVSFDefault);
end;
Run Code Online (Sandbox Code Playgroud)
以上工作在"同步"模式(SVSFDefault标志),但如果我在尝试以异步模式播放声音时将标志更改为SVSFlagsAsync,则不会产生声音.没有给出错误消息,但扬声器上没有播放任何内容.
问题可能是什么?我在Delphi的Imports文件夹中有SpeechLib_TLB单元.
编辑:这是在Windows XP中
谢谢,布鲁诺.
所以我用事件示例尝试了MSAPI 5.4 TTS。现在我创建了一个使用 SetNotifyCallbackFunction 的 cmd 提示应用程序,但我传递的函数没有被调用。我不是 C++ 专家,所以我在解决这个问题时遇到了困难,谁能指出我正确的方向,或者至少给我一个 SetNotifyCallbackFunction 的好例子?
这是我的代码的简化版本:
typedef void __stdcall SPNOTIFYCALLBACK(WPARAM wParam, LPARAM lParam);
void __stdcall outsideeventFunction(WPARAM, LPARAM);
void __stdcall outsideeventFunction(WPARAM wParam, LPARAM lParam){
std::cout << "Event called::wParam: " << wParam << " lParam: " << lParam << std::endl;
SPEVENT eventItem;
memset(&eventItem, 0, sizeof(SPEVENT));
while (SUCCEEDED(pV->GetEvents(1, &eventItem, NULL)))
{
bool exitNa = false;
switch (eventItem.eEventId)
{
case SPEI_WORD_BOUNDARY:
SPVOICESTATUS eventStatus;
pV->GetStatus(&eventStatus, NULL);
ULONG start, end;
start = eventStatus.ulInputWordPos;
end = eventStatus.ulInputWordLen; …Run Code Online (Sandbox Code Playgroud) 我试图使用此代码使用Python 3.4将文本转换为语音,但由于我的计算机的主要语言不是英语(我使用的是Win7x64),因此语音和口音是错误的(因为我希望它“说”英语) 。
import win32com.client
speaker = win32com.client.Dispatch("SAPI.SpVoice")
speaker.Speak("Hello, it works!")
Run Code Online (Sandbox Code Playgroud)
那么,有没有办法改变(程序的,而不是系统的)语音/语言?另外,您认为有更好的方法吗?也许一个模块可以在每个系统上工作?