4

我想在 Windows 8 Metro 风格的应用程序中播放 mp3 文件中的声音。我尝试了两种方法来做到这一点:

方法 1:
这是使用https://stackoverflow.com/a/10961201/147530提供的代码。有用。

方法2:
在这里我只是新建一个MediaElement并设置它的Source属性,如下所示:

var x = new MediaElement { Source = new Uri("ms-appx:/Assets/MyMp3File.mp3") };  

但是,当我做x.Play()任何事情时,什么都没有发生。没有抛出异常。

问题:我怎样才能使方法2起作用?

编辑:想要更新没有MediaFailed, MediaOpened, MediaEnded使用方法 2 调用任何事件处理程序。

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();
        }
4

3 回答 3

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 有一个扩展坞。当设备位于扩展坞中时,设备上的音频插孔和扬声器被禁用。您必须将耳机直接插入坞站或将其从坞站中取出才能听到任何声音。

于 2012-06-11T20:30:21.203 回答
2

您必须先将 MediaElement 放在 visualTree 中才能播放任何媒体:)

于 2012-10-11T12:15:56.850 回答
0

使用x.autoplay = true. 使用自动播放,它将等到加载完毕。

于 2013-02-25T13:41:34.567 回答