I'm working with a XNA game and I want my program to load music files from libary/music so I can play that music in the game. It would be great if the mediaplayer class could play a playlist of all the music in library/music.
2 Answers
Generally, in order to play an MP3 in XNA it has to go through the Content Pipeline. If you want to learn how to do it, a quick search turned up this tutorial.
Now, to your question:
Single Song
To play an MP3, you need to pass an instance of a Song
to MediaPlayer.Play
. As I stated above, you usually get the instance of your song via the Content Pipeline, but I do see it has a FromUri method.
I have never used it before, and it may only work for the Silverlight framework on Windows Phone, but you can give it a try.If I had to guess, I would assume it would work like this. Keep in mind that the file will have to exist. If it doesn't you will get an error. If you are distributing this game, Use the Content Pipeline. It is much better.
Song song = Song.FromUri(new Uri("file:///C:/Users/Joe/Music/FinalCountdown.mp3"));
MediaPlayer.Play(song);
I see there was a question on StackOverflow, and the answer looks like he is on a Windows PC. Maybe that will help get you there.
Playlist
You mention wanting a playlist, well MediaPlayer.Play can also take a SongCollection, and it will just loop through each song.
-
\$\begingroup\$ This helps me a little, but what i want to do is that the program shows me what music is in the file and wich music from that file i want to play. \$\endgroup\$ Apr 25, 2012 at 17:13
-
\$\begingroup\$ Well, use the System.IO.Directory class to get a list of all files in the directory. Once you have them you can easily lay them out on the screen and have the user select one. You have the filepath now, so just turn it into a URI and use the method above. \$\endgroup\$– user159Apr 26, 2012 at 16:12
-
\$\begingroup\$ I have used the System.IO to make a txt file to for example highscore saving, but i haven't used it any further so could you tell me how to use it? \$\endgroup\$ Apr 29, 2012 at 18:23
-
\$\begingroup\$ csharp-examples.net/get-files-from-directory \$\endgroup\$– user159Apr 29, 2012 at 18:26
As a follow up on this other question you can load all the mp3s in a directory into a Song
list with:
var songs = Directory.EnumerateFiles(directory, "*.mp3")
.Select(file => Song.FromUri(file, new Uri(file)))
.ToList();
You can look in the Music folder by setting directory to the following:
string directory = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
There's also a known bug where Song.FromUri
will throw an exception when trying to load a file that has spaces in its name. See this answer on stackoverflow for a workaround using reflection to call the internal constructor directly.