如何在UWP应用程序中播放JS的声音?

时间:2018-03-09 17:34:29

标签: javascript audio webview uwp windows-10-universal

我正在开发一个包含WebApp的UWP,该WebApp具有一些调用某些C#函数的JS函数。现在,我试图播放我存储在我的UWP应用程序的Assets文件夹中的声音:

这是我尝试播放 Windows运行时组件的功能:

public async void Beep()
{
    await CoreApplication.MainView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
    async () =>
    {
        MediaElement mysong = new MediaElement();
        StorageFolder folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("Assets");
        StorageFolder soundsFolder = await folder.GetFolderAsync("sounds");
        StorageFile file = await soundsFolder.GetFileAsync("beep.mp3");
        var stream = await file.OpenAsync(FileAccessMode.Read);
        mysong.SetSource(stream, file.ContentType);
        mysong.Play();
    });
}

顺便说一句,我也尝试过这段代码而且它也没有用过:

public async void Beep()
{
    MediaElement mysong = new MediaElement();
    StorageFolder folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("Assets");
    StorageFolder soundsFolder = await folder.GetFolderAsync("sounds");
    StorageFile file = await soundsFolder.GetFileAsync("beep.mp3");
    var stream = await file.OpenAsync(FileAccessMode.Read);
    mysong.SetSource(stream, file.ContentType);
    mysong.Play();
}

这是文件位置的结构:

location

这就是我从 JS

中调用它的方式
CallJSCSharp.Beep();

我在Windows运行时组件中有更多功能,除了这个功能外,所有功能都按预期工作。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

我找到了解决方法:

  1. 我在同一个解决方案中添加了两个项目:

    • UWP项目。
    • Windows运行时组件。
  2. example 1

    1. 我从函数中删除了额外的代码(没有必要按照之前的建议在XAML中添加媒体元素)。

      public async void Beep()
      {
          MediaElement mysong = new MediaElement();
          StorageFolder folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("Assets");
          StorageFolder soundsFolder = await folder.GetFolderAsync("sounds");
          StorageFile file = await soundsFolder.GetFileAsync("beep.mp3");
          var stream = await file.OpenAsync(FileAccessMode.Read);
          mysong.SetSource(stream, file.ContentType);
          mysong.Play();
      }
      
    2. 重要的是要记住当你调用任何JS函数时,它必须是小写,因为JS约定(即使你的函数是用大写字母写的)。

      CallJSCSharp.beep();
      
    3. 有关JS约定的更多信息:

      Using the Windows Runtime in JavaScript

答案 1 :(得分:0)

需要将

MediaElement添加到XAML UI树中才能工作;你应该只使用MediaPlayer API。您甚至不需要编写C#代码来执行此操作 - 您应该能够直接从JavaScript访问API(如果您愿意)。有关Media Playback overview page

的更多信息