在Windows 7手机上播放音频文件

18

我正在开发基于Silverlight的Windows 7应用程序。我无法找到一种在Windows 7手机上以编程方式播放音频文件的方法。过去几天以来,我一直在谷歌上搜索,但没有找到任何解决方案。C#中有一个SoundPlayer类,但我猜它在Windows 7手机上不可用。请问有人可以帮忙吗?

4个回答

19
您可以在XAML视图中放置一个MediaElement:
<MediaElement 
    x:Name="sound" 
    Source="sound.wma" 
    AutoPlay="False" />

然后在代码后台:

sound.Play();

支持的格式为MP3和WMA。


1
直到我将AutoPlay="True"设置为真时,这个程序才能正常工作。不确定原因。我在XAML中设置了名称和自动播放,并在代码中设置了源和sound.play()(因为我要用它来播放多个声音),但是如果AutoPlay设置为false,它就无法正常工作,但是将其设置为true后,它可以完美地工作。谢谢。 - Rich Hopkins
1
-1 是因为这种方式会杀死任何其他的 mp3 播放,并且还会停止设备上正在播放的音乐。如果您没有得到用户关闭其音乐的明确许可,那么您的 WP7 应用程序将无法通过验证。我就是因为这个原因被拒绝了。目前在 WP7 平台上使用压缩音频真的没有好的方法。在媒体支持方面,WP7 显然相当薄弱。 - Jonny

14

使用Xna播放声音。虽然您可以从Silverlight应用程序中交叉引用Xna,但要播放声音文件,您需要遵循以下步骤:

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio
// ...
Stream stream = TitleContainer.OpenStream("sounds/bonk.wav");
SoundEffect effect = SoundEffect.FromStream(stream);
FrameworkDispatcher.Update();
effect.Play();

祝您的应用开发一切顺利!


5
不对,Silverlight适用于Windows Phone 7并且支持音频播放。请参见http://msdn.microsoft.com/en-us/library/system.windows.controls.mediaelement(VS.95).aspx。 - Olivier Payen
2
注意 - 您应该仅使用SoundEffect播放短音频片段,而不是用于背景音乐。对于此,您应该使用MediaElement。 - Matt Lacey
1
然后设置它的可见性,或折叠该元素。 - Jeremy
@Aqueel:这是最糟糕的答案之一,因为它对Silverlight的描述是彻头彻尾的谎言。其次,如果你要使用XNA,你需要挂钩调度的.tick事件才能真正播放soundeffect。最后,如果你在声音上使用mediaelement而不是视频,它永远不会出现在你的页面上作为可见项。为什么这个答案被接受了呢? - Todd Main
我对Silverlight音频播放的观点已经改正。感谢您的评论。 - prathiraj
显示剩余3条评论

3
使用内置行为怎么样?
<Button>
    <i:Interaction.Triggers>
       <i:EventTrigger EventName="Click">
           <eim:PlaySoundAction Source="/Alarm1.wma" Volume="1"/>
       </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

你需要这两个命名空间。
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
xmlns:eim="clr-namespace:Microsoft.Expression.Interactivity.Media;assembly=Microsoft.Expression.Interactions"

看起来是一个不错的解决方案。你知道它是否使用了Mediaelement吗? - Ignacio Soler Garcia

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接