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

Javascript 如何在UWP应用程序中播放JS的声音?,javascript,audio,webview,uwp,windows-10-universal,Javascript,Audio,Webview,Uwp,Windows 10 Universal,我正在开发一个UWP,它包含一个WebApp,它有一些JS函数,可以调用一些C#函数。现在,我正在尝试播放我存储在UWP应用程序资产文件夹中的声音: 这是我尝试使用的Windows运行时组件的函数: public async void Beep() { await CoreApplication.MainView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => { Medi

我正在开发一个UWP,它包含一个WebApp,它有一些JS函数,可以调用一些C#函数。现在,我正在尝试播放我存储在UWP应用程序资产文件夹中的声音:

这是我尝试使用的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();
    });
}
CallJSCSharp.Beep();
顺便说一句,我也试过这个代码,但它也不起作用:

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();
}
这是文件位置的结构:

这就是我在JS中对它的称呼:

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();
    });
}
CallJSCSharp.Beep();

我在Windows运行时组件中有更多函数,除此之外,所有函数都按预期工作。感谢您的帮助。

需要将MediaElement添加到XAML UI树中才能工作;你应该用这个来代替。您甚至不需要编写C#代码就可以做到这一点——您应该能够直接从JavaScript访问API(如果您愿意的话)。更多关于

的信息,我找到了如何修复它:

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

    • UWP项目
    • Windows运行时组件
  • 我从函数中删除了额外的代码(没有必要像前面建议的那样在XAML中添加媒体元素)

  • 重要的是要记住,当您调用任何JS函数时,它必须是小写的,因为JS约定(即使您的函数是用大写编写的)

  • 有关JS约定的更多信息:


    你打算在windows应用程序中还是在网页上播放声音?在windows应用程序中,我只是从JS调用它。你看到了吗?我也只是想播放没有可见控件的声音。嗨,Peter,据我所知,任何调用C#函数的JS都必须在windows运行时控件中编写,我知道,因为这不是我调用的第一个函数,所以我有保持屏幕打开、从JSON生成EXCEL或在外部浏览器中打开URL的函数。这就是为什么我确信我的特定函数中存在错误。现在,假设您的场景,我将控件添加到XAML,如何从WRC中选择它?因为由于UWP限制,我无法在主项目中声明类或任何其他内容。谢谢你的澄清。