Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to play a sound file

Tags:

c#

audio

mp3

With C#, How do I play (Pause, Forward...) a sound file (mp3, ogg)? The file could be on the hard disk, or on the internet.

Is there any library or Class out there that can ease me the work ?

like image 756
Black Horus Avatar asked Sep 24 '08 20:09

Black Horus


3 Answers

If you don't mind including Microsoft.VisualBasic.dll in your project, you can do it this way:

var audio = new Microsoft.VisualBasic.Devices.Audio();
audio.Play("some file path");

If you want to do more complex stuff, the easiest way I know of is to use the Windows Media Player API. You add the DLL and then work with it. The API is kind of clunky, but it does work; I've used it to make my own music player wrapper around Windows Media Player for personal use. Here are some helpful links to get you started:

Building a Web Site with ASP .NET 2.0 to Navigate Your Music Library

Windows Media Object Model

Let the Music Play!

EDIT:

Since I wrote this, I've found an easier way, if you don't mind including WPF classes in your code. WPF (.NET 3.0 and forward) has a MediaPlayer class that's a wrapper around Windows Media Player. This means you don't have to write your own wrapper, which is nice since, as I mentioned above, the WMP API is rather clunky and hard to use.

like image 75
Ryan Lundy Avatar answered Oct 17 '22 21:10

Ryan Lundy


I would recommend the BASS Library. It can play both filebased music files and streaming content. There is also a .NET wrapper available.

like image 28
Magnus Johansson Avatar answered Oct 17 '22 23:10

Magnus Johansson


Alvas.Audio has RecordPlayer class with these possibilities:

        public static void TestRecordPlayer()
        {
            RecordPlayer rp = new RecordPlayer();
            rp.PropertyChanged += new PropertyChangedEventHandler(rp_PropertyChanged);
            rp.Open(new Mp3Reader(File.OpenRead("in.mp3")));
            rp.Play();
            rp.Forward(1000);
            rp.Pause();
        }

        static void rp_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            switch (e.PropertyName)
            {
                case RecordPlayer.StateProperty:
                    RecordPlayer rp = ((RecordPlayer)sender);
                    if (rp.State == DeviceState.Stopped)
                    {
                        rp.Close();
                    }
                    break;
            }
        }
like image 2
Basil Avatar answered Oct 17 '22 21:10

Basil