2016-04-15 52 views
0

我想将文本更改为语音语音语言。 这是我的代码:如何更改合成语音语音UWP?

 private async void readText(string text) 
    { 

     var voices = SpeechSynthesizer.AllVoices; 
     SpeechSynthesizer speech = new SpeechSynthesizer(); 
     speech.Voice = voices.First(x => x.Gender == VoiceGender.Female && x.Language.Contains("fr-FR")); 
     SpeechSynthesisStream stream = await speech.SynthesizeTextToStreamAsync(text); 
     mediaElement.SetSource(stream, stream.ContentType); 
    } 

    private void btnSay_Click(object sender, RoutedEventArgs e) 
    { 
     readText(txtWhat.Text); 
    } 

但是当我尝试运行这段代码,有例外抛出线:

speech.Voice = voices.First(x => x.Gender == VoiceGender.Female && x.Language.Contains("fr-FR")); 

“System.InvalidOperationException”类型的异常出现在系统.Linq.dll但未在用户代码中处理。

我该怎么做?

+1

尝试FirstOrDefault。你确定安装了法语吗? 我已经使用 speech.Voice =(从Windows.Media.SpeechSynthesis.SpeechSynthesizer.AllVoices中的语音中获得语音。语音。语言==“fr-FR” 选择语音).First(); –

+0

你有清单功能的麦克风吗?

+0

我还没有安装法语,我该怎么做? – ktos1234

回答

2

请检查你的应用程序有麦克风访问授权(在清单)

<Capabilities> 
<DeviceCapability Name="microphone" /> 
</Capabilities> 

弗罗姆代码,你可以用一下:

bool permissionGained = await AudioCapturePermissions.RequestMicrophonePermission(); 
if (!permissionGained) 
{ 
//ask user to modify settings 
} 

,更好的检查首先被安装在系统语言:

var list = from a in SpeechSynthesizer.AllVoices 
     where a.Language.Contains("en") 
     select a; 

if (list.Count() > 0) 
{ 
synthesizer.Voice = list.Last(); 
} 
+0

我检查了我已安装的语言: foreach(语音合成器中的var voice.AllVoices) { txtVoices.Text = voice.Language; } 看来我没有法语。 TextBox只显示一个语言。 – ktos1234

+0

这里是文章如何安装语言并将其设置为语音识别 [安装Windows 10语音识别附加语言包](https://zulja.wordpress.com/2015/08/11/installing-additional-language-packs -for-windows-10-speech-recognition /) –

+0

谢谢,我安装了语言,现在它可以处理我的原始代码。 我还有一个问题,使用SpeechSynthesizer可以改变音高,音量或速度吗?我怎样才能做到这一点? – ktos1234