如何在 SpeechSynthesizer 播放时播放 IMFMediaEngine 背景音频

Posted

技术标签:

【中文标题】如何在 SpeechSynthesizer 播放时播放 IMFMediaEngine 背景音频【英文标题】:How to play IMFMediaEngine background audio while SpeechSynthesizer is playing 【发布时间】:2012-11-19 08:23:46 【问题描述】:

我想在播放背景音频时播放 Windows Phone 8 的语音合成器。但每次,我激活语音合成器,背景音频停止播放,并在合成器完成后恢复。

有什么建议吗? 谢谢。

下面的一些代码sn-ps: 背景音频:在 C++ 中使用 IMFMediaEngine,播放成功。

Microsoft::WRL::ComPtr<IMFMediaEngine> m_mediaEngine;
m_mediaEngine->Play();

在 C#/XAML 中,我有一个带有按钮的 XAML 页面,当我单击它时,它会从 WP8 的最新语音类中播放。播放文本。

using Windows.Phone.Speech.Synthesis; 


public async void SpeakText(string text)

    SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer();
    await speechSynthesizer.SpeakTextAsync(text);

我尝试将 SpeakTextAsync 通过线程,但我想我做错了,因为我仍然无法同时播放两个音频。

    private void bubble_Click(object sender, RoutedEventArgs e)
    
       App.Manager.SpeakText("hello how are you");

// TRY 1: plays text only, background doesn't play
       //new Thread(() =>
       //
       //    App.Manager.SpeakText(chinese);
       //).Start();

// TRY 2: plays text only, background doesn't play
       //Deployment.Current.Dispatcher.BeginInvoke(() =>
       //
       //    App.Manager.SpeakText(chinese);
       //);

// TRY 3: plays text only, background doesn't play
       //ThreadPool.QueueUserWorkItem(new WaitCallback(SpeakTextProc));

   

   private void SpeakTextProc(Object stateInfo)
   
      App.Manager.SpeakText("Hello how are you");
   

【问题讨论】:

【参考方案1】:

在 Windows Phone 7 上,我能够使用 XNA 获得两个单独的音频流,但看到 XNA 不支持在 Windows Phone 8 上进行进一步开发,这不是一个很好的解决方案,祝你好运。

【讨论】:

不支持不代表暂时不能使用。 XNA 仍包含在 Windows Phone 8 中以实现向后兼容性。这是我所知道的在不破坏背景音乐的情况下播放音效的唯一方法。

以上是关于如何在 SpeechSynthesizer 播放时播放 IMFMediaEngine 背景音频的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure Web App(.NET Framework 4.7)上发布后,“SpeechSynthesizer”不起作用

C# 语音合成

C# 中的 SpeechSynthesizer 创建具有 22kHz 的 wav ...需要为 16kHz

asp.net使用SpeechSynthesizer类生成语音文件部署到iis遇到的几个坑

无人地磅自助机开发总结语音播报

有没有办法让自定义类在UIView上进行操作而不需要在初始化时传递ViewController(作为参考)?