无法在Windows 8中播放声音

时间:2012-06-11 16:28:52

标签: windows-8

我想在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();
        }

3 个答案:

答案 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。使用自动播放时,它将一直等到它被加载。