【问题标题】:UWP speech synthesis without a XAML MediaElement没有 XAML MediaElement 的 UWP 语音合成
【发布时间】:2017-09-16 17:07:42
【问题描述】:

我能找到的每个 UWP 文本转语音示例都使用使用 XAML 创建的 MediaElement 控件。例如,像这样的东西,效果很好:

using namespace Windows::Media::SpeechSynthesis;

//..........

void App::MainPage::buttonSpeak_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
    create_task(synthesizer->SynthesizeTextToStreamAsync(L"I am ready."))
        .then([this](SpeechSynthesisStream ^stream)
    {
        MediaElement ^media = mediaElement; //created in a separate XAML file
        media->AutoPlay = true;
        media->SetSource(stream, stream->ContentType);
        media->Play();
    });
}

在没有基于 XAML 的界面(在我的例子中是全息 DirectX 应用程序)的情况下,如何调整它以使其工作?我尝试过以编程方式创建 MediaElement,例如。 G。 MediaElement ^media = ref new MediaElement();,总是抛出"The application called an interface that was marshalled for a different thread"异常。

【问题讨论】:

标签: uwp text-to-speech c++-cx


【解决方案1】:

补充 Headcrab 的答案并使用 Source 而不是 SetStreamSource

替换:

player->SetStreamSource(stream);

与:

player->Source = Windows::Media::Core::MediaSource::CreateFromStream(stream, stream->ContentType)

【讨论】:

    【解决方案2】:

    它抛出异常是因为 MediaElement 只能在 UI 线程上工作。

    您可以使用AudioGraph。它可以在任何线程上运行。

    【讨论】:

      【解决方案3】:

      我是用MediaPlayer 而不是MediaElement

      using namespace Windows::Media::SpeechSynthesis;
      using namespace Windows::Media::Playback;
      
      //...
      
      SpeechSynthesizer ^synthesizer = ref new SpeechSynthesizer();
      MediaPlayer ^player = ref new MediaPlayer();
      
      //...
      create_task(synthesizer->SynthesizeTextToStreamAsync(L"I am ready."))
          .then([this](SpeechSynthesisStream ^stream)
      {
          player->SetStreamSource(stream);
          player->Play();
      });
      

      它可以工作,虽然编译器会发出警告说SetStreamSource 已被弃用,应该使用Source,但我还没有弄清楚如何使用它。

      【讨论】:

      • 我的用例非常相似,但音频播放是通过后台任务触发的。在这种情况下,媒体播放器似乎不起作用。如果你能帮我一些建议,我的问题就会发布在这里。 stackoverflow.com/questions/53750227/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多