无法在wp7应用程序中获取mp3文件流

时间:2012-01-04 19:47:53

标签: c# windows-phone-7 nullreferenceexception

我正在为使用silverlight& amp;的游戏构建一个wp7应用程序。 XNA  我有一个名为“Punch1.mp3(Build action : resource )的mp3文件,存储在项目文件夹中名为“SoundEffects"的文件夹中

我想使用此代码播放文件

         StreamResourceInfo info;

         Uri myuri = new Uri("/SoundEffects/Punch1.mp3", UriKind.Relative);
         info = App.GetResourceStream (myuri);
         punch1 = SoundEffect.FromStream(info.Stream ) ; 

punch在这里的代码中定义:

public static SoundEffect punch1;

问题是它在第三行引发了一个null引用异常,声称info为null 在调试模式下也是如此,我发现资源流信息为空 我认为这是因为虽然uri是正确的,但它无法读取文件

enter image description here

5 个答案:

答案 0 :(得分:2)

你可以尝试两件事

- Clean and rebuild the project
- Try appending project name in URI "/PhoneApp1;component/SoundEffects/Punch.mp3"

答案 1 :(得分:1)

由于您仍在使用XNA程序集,因此可以使用TitleContainer.OpenStream(使用相对URI)并将音频文件构建设置为Content

答案 2 :(得分:0)

我同意Haris Haqsan的说法,你的URI字符串很糟糕。

Uri myuri = new Uri("/PhoneBoxing;component/SoundEffects/Punch1.mp3", UriKind.Relative);

但您还应该考虑切换到使用内容文件,而不是将它们嵌入资源,因为它可以帮助您的应用程序启动时间。根据我们所讨论的文件数量,它可以产生很大的不同。

将构建操作设置为内容,代码应如下所示:

FileStream stream = new FileStream("/SoundEffects/Punch1.mp3", FileMode.Open, FileAccess.Read);

答案 3 :(得分:0)

在以下代码中:

     Uri myuri = new Uri("/SoundEffects/Punch1.mp3", UriKind.Relative);
     info = App.GetResourceStream (myuri);
     punch1 = SoundEffect.FromStream(info.Stream ) ; 

SoundEffect.FromStream()要求wave文件流不是MP3,如下所示:http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.audio.soundeffect.fromstream.aspx。 所以找到一个mp3的解决方案> wav转换器或只是找到另一种方法将mp3加载到WP7

考虑到图片这是正常的URI,在正常情况下无法评估isfile的表达式。

答案 4 :(得分:0)

我在我的机器上遇到了同样的问题,InvalidOperationException有点令人困惑。我所要做的就是将wav文件重新编码为规范listed on MSDN

在我这样做之后,它完美地运作了。