我想在windows 8 metro风格的应用程序中播放mp3文件中的声音。我尝试了两种方法:
方法一:
这是使用https://stackoverflow.com/a/10961201/147530提供的代码。它有效。
方法2:
在这里,我只是新建一个MediaElement
并设置其Source
属性,如下所示:
var x = new MediaElement { Source = new Uri("ms-appx:/Assets/MyMp3File.mp3") };
当我x.Play()
时,没有任何事情发生。没有例外。
问题:如何使方法2工作?
编辑:
想要更新,没有使用方法2调用MediaFailed, MediaOpened, MediaEnded
事件处理程序。
sound = new MediaElement { Source = new Uri("ms-appx:/Assets/Clook.mp3") };
sound.MediaFailed += sound_MediaFailed;
sound.MediaOpened += sound_MediaOpened;
sound.MediaEnded += sound_MediaEnded;
static void sound_MediaEnded(object sender, RoutedEventArgs e)
{
Debugger.Break();
}
static void sound_MediaOpened(object sender, RoutedEventArgs e)
{
Debugger.Break();
}
static void sound_MediaFailed(object sender, ExceptionRoutedEventArgs e)
{
Debugger.Break();
}
答案 0 :(得分:6)
要尝试的几件事。请尝试以下代码
var music = new MediaElement()
{
AudioCategory = AudioCategory.ForegroundOnlyMedia,
Source = new Uri(this.BaseUri, "Assets/MyMp3File.mp3")
};
// This is really the only difference, adding it to the visual tree
// LayoutRoot is the root of the visual tree, in the case, a grid in my XAML
LayoutRoot.Children.Add(music);
music.Play();
将其添加到可视化树可能是关键。在其上设置一个断点,以确保您的MediaElement中包含数据。
第二次(实际上发生在我身上,这就是为什么我提到它),我正在开发一个来自// Build的三星设备,它有一个扩展坞。当设备和扬声器位于扩展坞中时,它们将被禁用。您必须直接将耳机插入扩展坞,或将其从扩展坞中取出以听到任何声音。
答案 1 :(得分:2)
您必须先将MediaElement放入visualTree才能播放任何媒体:)
答案 2 :(得分:0)
使用x.autoplay = true
。使用自动播放时,它将一直等到它被加载。