我正在开发一个包含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();
}
这是文件位置的结构:
这就是我从 JS :
中调用它的方式CallJSCSharp.Beep();
我在Windows运行时组件中有更多功能,除了这个功能外,所有功能都按预期工作。谢谢你的帮助。
答案 0 :(得分: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();
}
重要的是要记住当你调用任何JS函数时,它必须是小写,因为JS约定(即使你的函数是用大写字母写的)。
CallJSCSharp.beep();
有关JS约定的更多信息:
答案 1 :(得分:0)
MediaElement
添加到XAML UI树中才能工作;你应该只使用MediaPlayer
API。您甚至不需要编写C#代码来执行此操作 - 您应该能够直接从JavaScript访问API(如果您愿意)。有关Media Playback overview page