Silverlight MediaElement自动重复剪辑,有时无法播放

Silverlight MediaElement自动重复剪辑,有时无法播放,silverlight,windows-phone-7,mediaelement,Silverlight,Windows Phone 7,Mediaelement,我有一个应用程序,可以播放一些简短的声音片段。要播放它们,我只需将源设置为新的剪辑路径,这是一个使用WP7设置的表达式编码器编码的WMA。这甚至不值得共享代码——有一个事件处理程序。在其中,我将ME.Source属性设置为一个新的Uri。设置为自动播放,就这样!在这里: private void PlaySound(ItemViewModel sound) { Model.CurrentSound = sound; CurrentSound.Source

我有一个应用程序,可以播放一些简短的声音片段。要播放它们,我只需将源设置为新的剪辑路径,这是一个使用WP7设置的表达式编码器编码的WMA。这甚至不值得共享代码——有一个事件处理程序。在其中,我将ME.Source属性设置为一个新的Uri。设置为自动播放,就这样!在这里:

    private void PlaySound(ItemViewModel sound) {
        Model.CurrentSound = sound;
        CurrentSound.Source = new Uri(sound.Path, UriKind.Relative);
    }

    private void Sounds_SelectionChanged(object sender, SelectionChangedEventArgs e) {
        var list = ((ListBox) sender);
        var item = (ItemViewModel) list.SelectedItem;
        SelectItem(item);
    }
我还应该指出,这些声音都是资源(buildtype=Resource)。我需要它们,因为应用程序需要动态地发现它们。路径都是这样的,“sounds/foo/bar/sound.wma”。有时路径中有一个空格,它是用%20编码的url(这是资源管理器返回路径的方式,我没有这样做)

问题是很多人,但不是所有人,都说声音会自动重复。声音很短,只有几秒钟,所以很烦人。我不明白这是怎么回事,MediaElement甚至没有自动重复功能

也许有关,但也有人抱怨,时不时的声音不播放。他们必须再次点击它。我所能想到的是,声音的编码方式有问题,但它们是WMA,正如我所说,我使用expression encoder中的“在WP7中播放”设置对它们进行编码。如果是这样的话,它怎么可能正常工作,而不是其他时间

我不知所措,因为这种行为,我的应用程序得到了一些不好的评价。救命啊

“有和事件处理程序”,但你不说什么?在某些情况下,事件可能会反复发生,也可能根本不会发生。代码可能存在逻辑错误,无法分离现有处理程序,然后添加另一个处理程序。随着使用的进展,您最终会看到一个事件由多个处理程序处理

编辑


“选择更改”事件因发射频率比我们希望的要高而臭名昭著。我建议您添加一些去盎司代码,记录最后选择的项目以及选择时间。如果下一个选定的项目与上一个项目相同,并且在不到一秒钟前说出,则不做任何其他操作就吞下该事件。

听起来您可能正在尝试播放音效-在这种情况下,您最好使用XNA SoundEffect机制

e、 g

SoundEffect仅适用于WAV文件(PCM)-但我在几个应用程序和脚本中使用过它,包括嵌入式内容文件和下载的文件(例如和)


XNA类在SL中运行良好,允许同时播放多种音效。

重复的问题在于需要这样做:

MediaPlayer.IsRepeating = false;

我认为发生的事情是,用户将在另一个应用程序中设置为true,并且在打开我的应用程序时,该值仍然为true!这一定是个错误,完全出乎意料。如果你看看其他声音播放应用程序,比如soundboard应用程序,就会有用户在评论中抱怨同样的事情。。“我希望它不会重复这些声音……”

很明显,发生了一些非常奇怪的事情,在这种情况下,你有多确定“不值得分享代码的事件”是对事情的一个很好的评估?很公平:)我添加了代码和一些更详细的信息。谢谢我认为,问题是我特别想一次只播放一个声音。另外,UI有一个播放/暂停按钮,我不知道你如何知道声音何时停止播放SoundEffect。有没有一种更复杂的播放声音的方式可以让你在XNA中更好地控制声音,你可以使用Silverlight?我自己没有这样做,但我认为你可以创建和跟踪
SoundEffectInstance
实例-这些实例有状态告诉你它们是
播放
还是
停止
-谢谢。。。嗯,我看不到任何事件,这需要我创建一个计时器来轮询状态。讨厌。。在有游戏循环的游戏中是有意义的,但这是一个非常简单的SL应用程序。总是有CompositionTarget。渲染如果你想要一个非常紧密的循环(啊哈,对不起,我应该给出很好的建议,而不是黑客的东西…)哇,这真是出乎意料。这种不可靠的行为有记录吗?这一定是问题所在,我会尽力防止再加油。我认为只要看看声音是否与上一个相同,就可以在我的场景中使用,而不是计时机制。你知道为什么ME有时无法加载声音吗?我还有我提到的另一个问题。即使在添加代码以确保同一声音不会连续播放两次之后,它也会失败。MediaFailed事件激发。如果我转到另一个声音,然后再回到它,同样的声音也会起作用。这是在模拟器中,但我的用户报告了相同的事情。非常令人沮丧。。。我想把代码放在MediaFailed中,让它重试,但这真是一个黑客行为,它可能会给我带来其他问题。所有这些声音都是资源,并且大部分时间都能成功播放。@InfinitiesLoop:由于您已经能够复制并获得媒体失败事件,下一步是检查事件args的
exception
属性在
mediafiled
事件中暴露的异常。mediafiled从不提供任何详细信息--据我所知,这是有意泛化的。事件的参数具有ErrorException属性,该属性仅包含消息“AG_E_NETWORK_ERROR”。关于这个异常,没有任何其他信息。没有堆栈跟踪,什么都没有。我讨厌接受我自己的答案,但就是这样@AnthonyWJones的回答是有帮助的,但失败的问题是一条红鲱鱼,我之所以提起它,是因为我认为它可能与重复的问题有关,而不是。