Microsoft TTS SaveToWaveFileAsync 功能不起作用

Posted

技术标签:

【中文标题】Microsoft TTS SaveToWaveFileAsync 功能不起作用【英文标题】:Microsoft TTS SaveToWaveFileAsync function not working 【发布时间】:2021-04-28 21:14:58 【问题描述】:

我正在使用 Xamarin Forms 开发移动文本到语音应用程序。 Quickstart 到目前为止工作并合成了我的文本,但将结​​果保存到文件似乎不起作用。这是合成类的代码:

        var config = SpeechConfig.FromSubscription("6e4a67f034a545e0833179044dd6d172", "westeurope");
        var synthesizer = new SpeechSynthesizer(config);
        var result = await synthesizer.SpeakSsmlAsync(xmlFirstPart + voice + xmlSecondPart + synthesisText + xmlThirdPart).ConfigureAwait(false);
        var stream = AudioDataStream.FromResult(result);
      
        string file = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "SpeechSynthesis.wav");
        await stream.SaveToWaveFileAsync(file);

它没有给出错误,但是一旦我用这个代码从另一个类调用它:

ISimpleAudioPlayer player = CrossSimpleAudioPlayer.CreateSimpleAudioPlayer();
player.Load(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "SpeechSynthesis.wav"));

它给出了以下错误:

Java.IO.FileNotFoundException: '/data/user/0/com.companyname.mobileapp/files/SpeechSynthesis.wav'

如果有人知道可能导致此错误的原因,那将对我有很大帮助。谢谢。

【问题讨论】:

对于文本到语音功能,您可以使用 Xamarin.Essentials 。检查docs.microsoft.com/en-us/xamarin/essentials/text-to-speech 【参考方案1】:

用法看起来不错,但您使用的路径似乎错误:Environment.GetFolderPath(Environment.SpecialFolder.Personal), "SpeechSynthesis.wav"

例如,尝试给"path/to/write/file.wav",它会起作用。

或者,您可以使用以下代码保存到 .wav:

using var audioConfig = AudioConfig.FromWavFileOutput("path/to/write/file.wav");

【讨论】:

遗憾的是,这并不能解决问题——同样的错误仍然存​​在。我用 File.exists 测试了文件路径。它返回 true,但每当我尝试使用 player.Load 函数时,它都会说不存在这样的文件。我很困惑,因为这两者相互矛盾。 你能试试这里解释的代码吗?:codexamarin.blogspot.com/2019/01/… 另外,您在player.Load 中提供了哪条路径?和SaveToWaveFileAsync的路径一样吗? 我使用的是相同的路径。 Player.Load 不返回错误,而只是冻结。 是的。有用。但是 wav 文件必须在资源文件夹中。我要播放的文件是在运行时创建的。

以上是关于Microsoft TTS SaveToWaveFileAsync 功能不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Speak Text, Speak SSML

微软tts每次设置

为啥我的语音属性里没有"Microsoft Simplified Chinese"选项

FreeSWITCH调用第三方TTS 使用tts_commandline

tts语音设备未开启

微软语音引擎 TTS 最基本使用