Hello to everyone! This tutorial will explain how to play MP3 files as songs, without any external assemblies or SDKs. I dedicate this tutorial to Thomas Morgan, a new but not unwelcomed member of our forum. And to all who seek the power of .NET.
There are several technologies available
There are multiple approaches to playing audio multimedia as it seems. I could try to embed a Windows Media Player using one of the SDKs. But that would be something completely new to me. I decided to leave it for another time.
I could use Managed DirectX, too. This one is very powerful and easy to use, using the AudioVideoPlayback namespace. I very much like Managed DirectX, but not every system will be able to run my program. You need to install both .NET Framework and DirectX in correct order to be able to run it. This becomes a problem, from wider perspective.
This tutorial will be using mciSendString WinAPI function, through P/Invoke. Therefore it won't run on Mono. Honestly I hate WinAPI functions, but if that is the easiest way then let's do it.
Playing MP3 songs using mciSendString function
The whole code is just three methods long. Notice that user has to select a song to be able to press Play button. And he needs to play it to be able to stop it. It will easily prevent user from clicking buttons he should not click yet. Here is a simple file selection dialog code:
Then we need to add a P/Invoke declaration to main form's class. Afterwards it is just calling the method few times. If Windows Media Player is already playing a song then they will overlap. No exception but what noise heh. Here is the P/Invoke and the code playing and stopping the song:Code:if (openFileDialog1.ShowDialog() == DialogResult.OK) { FilenameTextbox.Text = openFileDialog1.FileName; button3.Enabled = true; //So you dont play no file. lol }
If you are still not satisfied then here is an additional joke. If you select a video then a new window will pop up and display it. Now I'm laughing at myself, lol.Code:[DllImport("winmm.dll")] private static extern long mciSendString(string strCommand, StringBuilder strReturn, int iReturnLength, IntPtr hwndCallback); private void button3_Click(object sender, EventArgs e) { mciSendString("open \"" + FilenameTextbox.Text + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero); mciSendString("play MediaFile", null, 0, IntPtr.Zero); button3.Enabled = false; button2.Enabled = true; } private void button2_Click(object sender, EventArgs e) { mciSendString("close MediaFile", null, 0, IntPtr.Zero); button2.Enabled = false; button3.Enabled = true; }
There is nothing as worthy as comments
Thanks to everyone reading my tutorial. Any comments and +rep are welcomed. Hope you enjoyed reading.![]()
Last edited by ArekBulski; 09-03-2009 at 02:25 AM.
proudly presenting my personal website and game website: F1Simulation. a thrilling Managed DirectX racing game... also my Ask Me
look at my tutorials about cropping images and Mono: bundling Mono with programs and lambda expressions
Very cool tutorial! I've used this namespace before in prior projects. It works and is indeed very powerful. +rep
Time to make my own media player.... lol Very nice, +rep
Programmer (n): An organism that can turn caffeine into code.
Programming would be so much easier without all the users.
More +rep![]()
Nice tutorial, very helpful! +rep
yeah very nice tutorial
Thank you all, guys.![]()
proudly presenting my personal website and game website: F1Simulation. a thrilling Managed DirectX racing game... also my Ask Me
look at my tutorials about cropping images and Mono: bundling Mono with programs and lambda expressions
Very nice tutorial indeed
But can you please explain this part of the code I dont fully understand it yet ...
Code:private static extern long mciSendString(string strCommand, StringBuilder strReturn, int iReturnLength, IntPtr hwndCallback);
Last edited by Darkco; 01-11-2010 at 03:02 PM. Reason: grammar
lol @ Eureka Seven
There are currently 4 users browsing this thread. (0 members and 4 guests)
Bookmarks