2011-05-25 113 views
12

我的目的是让我的应用程序能够用不太流行的语言(例如福建话,马来语等)说话。我目前的做法是使用录制的MP3。语音文字到语音

我想知道是否有'语音字符到语音'引擎存在.net或任何平台?

这里的拼音字符就像纸质词典中的拼音条目。任何想法?

+0

好吧,这种方法可能无法很好地发挥作用的是,语言比一系列“预先录制”的声音复杂得多。例如,像中国语气这样的语言真的很吸引人。 – 2012-12-04 18:13:34

回答

6

这里是VB.NET代码:

'create the object. This object will store your phonetic 'characters' 
Dim PBuilder As New System.Speech.Synthesis.PromptBuilder 

'add your phonetic 'characters' here. Just ignore the first parameter. 
'The second parameter is your phonetic 'characters' 
PBuilder.AppendTextWithPronunciation("test", "riːdɪŋ") 

'now create a speaker to speak your phonetic 'characters' 
Dim SpeechSynthesizer2 As New System.Speech.Synthesis.SpeechSynthesizer 

'now actually speaking. It will speak 'reading' 
SpeechSynthesizer2.Speak(PBuilder) 

这里是转换后的C#代码:

//create the object. This object will store your phonetic 'characters' 
System.Speech.Synthesis.PromptBuilder PBuilder = new System.Speech.Synthesis.PromptBuilder(); 

//add your phonetic 'characters' here. Just ignore the first parameter. 
//The second parameter is your phonetic 'characters' 
PBuilder.AppendTextWithPronunciation("test", "riːdɪŋ"); 

//now create a speaker to speak your phonetic 'characters' 
System.Speech.Synthesis.SpeechSynthesizer SpeechSynthesizer2 = new System.Speech.Synthesis.SpeechSynthesizer(); 

//now actually speaking. It will speak 'reading' 
SpeechSynthesizer2.Speak(PBuilder); 
+0

,这样tts系统就可以将手机连接在一起并读出结果波形?这是会做什么? – Sriram 2011-06-03 14:38:09

+0

@Sriram:只要在那里放置任何语音“字符”,并且如果该语音“字符”可读,则系统调用会说出它。详情请参阅.Net SDK。 – user774411 2011-06-03 15:23:48

10

你需要的是一个大型的词汇TTS引擎。微软有一个speech SDK,它允许你在你输入其他内容时说,还有Windows SAPI(Speech API - 不确定SDK和API是否是相同的东西)。我知道他们确实有男性和女性的英语声音,但也许不适用于其他语言,如马来语(目前市场可能还没有很多)。你可能想看看Festival Project at CMU。他们通常有不同语言的声音,但一些不太为人所知的声音可能不像英语那样发达。

进一步更新:
检查MBROLA site出来。这是一个开发多语言大型词汇TTS引擎的开源项目,它们也有一个马来语扩展。我不知道它有多好。我尝试了印地语,并觉得还有很多工作还需要完成。

另外,请查看BabelFish site。他们有很多免费的TTS引擎的链接,这些引擎应该对马来语有一定的支持。

更新3:我不知道这是否会适合你的目的,但如果应用程序必须讲出来的文字是低,那么你可以尝试concatenative speech synthesislimited vocabulary了。记录马来语(或任何其他语言)的句子片段,并将程序输出传递到您自己创建输出的有限词汇引擎。一个例子可能是(英文):“是最有价值的球员。”在这里,“最有价值的球员”成为一个片段,而“球员X”可以随意改变。这一点,如果它符合你的目的,应该运作良好。

5

也许这样? System.Speech.Recognition.SrgsGrammar.SrgsPhoneticAlphabet

6

.Net System.Speech.Synthesis.PromptBuilder类将从SSML字符串创建音频。您可以使用这些来构建来自原始音素和采样音频的声音。音频不是语言相关的。

3

我已经尝试了System.Speech.Synthesis.PromptBuilder。而且我不得不说目前语音字符的实现是非常基本的并且不准确。例如,PromptBuilder缺乏语音语调,并且缺乏强调单词的强调。 PromptBuilder只能够输出单调和机器人的声音,这是非常烦人的。

我的建议是继续使用您目前的方法。用时间来表达语音的完美语音特征所需的时间方面,使用mp3传递信息更为自然和经济高效。