2016-12-14 63 views
0

我試圖創建帶文本到語音通知的Toast通知作爲音頻通知。當用戶輸入「Let's eat」這樣的描述並保存吐司時,當時間到了時,吐司會說「Let's eat」。它就像一個烤麪包的鈴聲。無法從UWP上的文本到語音音頻創建URI文件

我從Social MSDN得到了答案如何從文本到語音創建敬酒通知,但是在我的程序中它總是轉向異常。

這是一個用於創建文本到語音Toast通知代碼:

private static async Task<Uri> AudioforToast(string text) 
    { 
     var voices = SpeechSynthesizer.AllVoices; 
     using (var synthesizer = new SpeechSynthesizer()) 
     { 
      if (!String.IsNullOrEmpty(text)) 
      { 
       try 
       { 
        synthesizer.Voice = voices.First(gender => gender.Gender == VoiceGender.Female); 

        // Create a stream from the text. 
        SpeechSynthesisStream synthesisStream = await synthesizer.SynthesizeTextToStreamAsync(text); 

        // And now write that to a file 
        var file = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("ToastAudio", CreationCollisionOption.ReplaceExisting); 
        using (var fileStream = await file.OpenStreamForReadAsync()) 
        { 
         await synthesisStream.AsStream().CopyToAsync(fileStream); 
        } 

        // And then return the file path 
        return new Uri("ms-appdata:///temp/ToastAudio"); 
       } 

       catch (Exception) 
       { 
        // If the text is unable to be synthesized, throw an error message to the user.    
        var messageDialog = new Windows.UI.Popups.MessageDialog("Unable to synthesize text. Toast Audio is default"); 
        await messageDialog.ShowAsync(); 
       } 
      } 
     } 

     // If the text is unable to be synthesized, don't return a custom sound 
     return null; 
    } 

當我試圖調試它,代碼無法保存文本到語音轉換結果存入檔案。

此音頻稍後將用作烤麪包的自定義音頻。

回答

0

當我試圖調試它時,代碼無法將文本到語音結果保存到文件中。

我測試了你的代碼在我身邊。我得到了「流不支持寫」的異常,所以問題非常明顯。在你的代碼中,你只需打開流以供閱讀file.OpenStreamForReadAsync()你應該使用file.OpenStreamForWriteAsync()然後它會工作。

+0

感謝您的回答。在更改爲OpenStreamForWriteAsync()之後,它將嘗試部分,但文本到語音仍然不出來。 –

+0

@OliviaOlgaClarissa我已經與相關團隊聯繫過。目前,它不支持臨時文件夾。您可以將音頻文件複製到本地文件夾。我們將考慮在未來版本的Windows中添加對臨時文件夾的支持。 –

+0

好的,謝謝你的信息,澤維爾 –