Hady Elsahar
Hady Elsahar

Reputation: 2151

can't Get stream of mp3 file in wp7 application

i'm building a wp7 application for a game using silverlight & XNA i have an mp3 file called "Punch1.mp3" (Build action : resource ) stored inside a folder called "SoundEffects" inside the project folder

and i want to play the file using this code

         StreamResourceInfo info;

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

punch is defined in the code here :

public static SoundEffect punch1;

the problem is that it raises a nullreference exception in the third line claiming that info is null and that's true in the debugging mode , i found that the resource stream info is null
i think this is because the it can't read the file although the uri is correct

enter image description here

Upvotes: 2

Views: 1756

Answers (5)

Jalute George
Jalute George

Reputation: 1

I was experiencing the same issue on my machine, the InvalidOperationException is a little confusing. All I had to do was re-encode the wav file to the specifications listed on MSDN.

After I did that, it worked perfectly.

Upvotes: 0

Hady Elsahar
Hady Elsahar

Reputation: 2151

in the following code :

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

SoundEffect.FromStream() expects a wave file stream not an MP3 as shown here : http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.audio.soundeffect.fromstream.aspx . so solution to find a mp3 > wav convertor or just find another way to load mp3 to WP7

considering the picture this is normal URI in normal cases can't evaluate expression of isfile .

Upvotes: 0

JasonRShaver
JasonRShaver

Reputation: 4394

I agree with Haris Haqsan that your URI string is bad.

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

But you should also consider switching to using content files instead embedding them at resources as it can help your application start up time. Depending on the amount of files we are talking about, it can make a big difference.

Set your Build Action to content and your code should look like:

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

Upvotes: 0

keyboardP
keyboardP

Reputation: 69362

Since you're using the XNA assembly anyway, you can use TitleContainer.OpenStream instead (with a relative URI) and have the audio file build set as Content.

Upvotes: 1

Haris Hasan
Haris Hasan

Reputation: 30097

You can try two things

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

Upvotes: 2

Related Questions