【发布时间】:2013-01-19 19:58:04
【问题描述】:
我正在转换一个用 Silverlight 编写的应用程序,到目前为止,我已经成功解决了所有问题,除了一个问题:
由于某种原因,模拟器拒绝播放应用程序的任何音频文件,甚至没有抛出异常。我查过,在铃声类别中它可以发出声音。
原来的代码是:
<Grid x:Name="sharedFullScreenFilePathContainer"
Tag="{Binding StringFormat=\{0\},Converter={StaticResource fullScreenImageConverter}}">
<Image x:Name="fullScreenImage" Stretch="Fill"
Source="{Binding ElementName=sharedFullScreenFilePathContainer,Path=Tag, StringFormat=../Assets/images/\{0\}.jpg}"
ImageFailed="onFullScreenImageFailedToLoad" MouseLeftButtonDown="onPressedOnFullScreenImage" />
<MediaElement x:Name="mediaPlayer" AutoPlay="True"
Source="{Binding ElementName=sharedFullScreenFilePathContainer,Path=Tag, StringFormat=../Assets/sounds/\{0\}.wma}" />
</Grid>
所以,我设置到这个项目的上下文的图像确实显示了,但是我设置的路径上真正存在的声音没有播放(我已经检查了“Bin”文件夹)。
我尝试使用代码而不是 xaml,但我仍然遇到同样的问题。
我试过这个(虽然它通常用于背景音乐):
AudioTrack audioTrack = new AudioTrack(new Uri("../Assets/sounds/" + fileToOpen, UriKind.Relative), "", "", "", null);
BackgroundAudioPlayer player = BackgroundAudioPlayer.Instance;
player.Track = audioTrack;
player.Play();
它没有播放任何东西,也没有抛出任何异常。
我也试过下一个代码,但是它抛出了一个异常(文件未找到异常)可能是因为我没有正确调用它:
Stream stream = TitleContainer.OpenStream("@Assets/sounds/" + fileToOpen);
SoundEffect effect = SoundEffect.FromStream(stream);
FrameworkDispatcher.Update();
effect.Play();
我也尝试过使用 wma 文件,但也没有用。
我还尝试使用 mp3 文件的“复制到输出目录”参数(“始终”和“仅当新”)和“构建操作”参数(“无”和“内容” )。没有任何帮助。
谁能帮帮我?我很长时间没有为 Silverlight/WP 开发,我不知道如何修复它。
顺便说一句,因为稍后我需要知道声音何时播放完毕(并且还能够停止它),我还是想使用代码。如果你也能告诉我怎么做,我会很高兴(如果需要,我可以在新帖子上问)。
编辑: 好的,我发现了问题:在使用 MediaPlayer.Play() 方法时,我一直收到一个奇怪的异常,在检查了异常之后,我发现这是一个已知的问题,我需要在调用 Play() 方法之前调用 FrameworkDispatcher.Update();。
所以解决方案是这样做:
Song song = Song.FromUri(...);
MediaPlayer.Stop();
FrameworkDispatcher.Update();
MediaPlayer.Play(song);
例外是:
'System.InvalidOperationException'发生在 System.Windows.ni.dll"
我找到了解决方案here。
现在的问题是为什么,为什么我在 windows phone 的演示中没有找到任何相关的东西?另外,我想知道这个函数是做什么的。
好的,既然没人给我两个问题的答案,我仍然希望给予赏金,我会问另一个问题:
如果除了使用 windows phone 的 MediaPlayer 类之外真的没有其他解决方案,我如何捕获完成播放音频文件的事件?即使获取音频文件的持续时间也不起作用(无论我尝试使用哪个类,都会返回 0 length )...
【问题讨论】:
-
你看到了吗,那是因为你用XNA播放音频! msdn.microsoft.com/library/ff842408.aspx
-
请见谅。我写过我是 WP 的新手。我可以选择如何播放音频文件吗?我只想玩它(如果需要,可以停止前一个)。如果应用程序使用 XNA 是否重要?它不是 API 的一部分吗?我真的对此知之甚少,我无法理解为什么要采取如此多的步骤来做一些如此基本和简单的事情。
-
没问题,我只是认为你在将媒体资源的正确引用从应用程序写入 MediaElement 时有些问题,在 Windows Phone 上播放音频文件没什么大不了的:- )
-
不,我已将其设置为“内容”类型并将其设置为“如果较新则复制”。那不是问题。这个问题是一个非常奇怪的异常,我仍然不明白它的含义,以及为什么我找到的东西可以解决它。
-
这里描述了如何以及为什么正确使用 FrameworkDispatcher:kunal-chowdhury.com/2012/07/… 我知道,这有点痛苦,但是对于 WP8 中的某些功能,您只需要深入挖掘。并非所有内容都包含在基本示例中。
标签: mp3 media-player windows-phone-8 filenotfoundexception