Click here to Skip to main content
14,773,757 members
Articles » Multimedia » Audio and Video » General
Posted 22 Oct 2012

Tagged as


13 bookmarked

A Simple C# Player Mp3 with NAudio

Rate me:
Please Sign up or sign in to vote.
4.33/5 (5 votes)
22 Oct 2012CPOL
A Simple C# Player Mp3 with NAudio


NAudio is a powerful library distributed with license (MS-PL), for processing and listening of audio files is written in C # and allows you to do much more than you can even think of this kind of files.

Whenever we are faced with such complex projects there is always a great difficulty in looking for starting point of the work, particularly if you do not want to look at all the endless possibilities offered by the library, but we need something simple and stable included in our code. 


NAudio is no exception to this general rule, having to model processes that are by their nature complex. The project site and blog of Mark Heath (the developer) there is a fairly complete documentation and software is available excellent example.

But if we just want to "play" a MP3 file?  

Using the code

I developed a small class c # trying to solve this problem.

The class uses the dll NAudio to play the file and has the following features:

  • full control over the implementation of the audio file (load, play stop and pause)
  • volume control audio level and balance of sound.
  • indication of the execution time 

The routine for me the most important is the one that is invoked to initialize the chain of classes NAudio.


public Audio ( string FileName )
if (!System.IO.File.Exists(FileName)) return;
// Creazione della classe di interfaccia di riproduzione
   _waveOutDevice = new WaveOut();
     // creazione dello Stram di input dal file dato
    _mainOutputStream = CreateInputStream(FileName);
    if (_mainOutputStream == null)
         throw new InvalidOperationException("Unsupported file extension");
    catch (Exception createException)
      if (Error != null)
        Error("Audio - Play - CreateInputStream", createException.Message, createException.StackTrace);
    // inizializzazione della risproduzione
    catch (Exception initException)
      if (Error != null)
        Error("Audio - Play - Init", initException.Message, initException.StackTrace);
    // L'evento locale di stop dell'esecuzione viene aggangiato a quello della class NAudio
    _waveOutDevice.PlaybackStopped += new 

The class _waveOutDevice is an instance of the class IWavePlayer NAudio that allows the control of reproduction. this class is first created and then initialized.

The routine CreateInputStream 

 private WaveStream CreateInputStream(string fileName)
   WaveStream Reader = CreateReaderStream(fileName);
   if (Reader == null)
     throw new InvalidOperationException("Unsupported extension");
   // viene creata una classe WaveChannel32 agganciata allo stram di riproduzione per
   // poter controllare l'esecuzione
   _volumeStream = new WaveChannel32(Reader);
   return _volumeStream;


The aticle is available in Italian here 


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Software Developer (Senior)
Italy Italy
No Biography provided

Comments and Discussions

SuggestionNeeded dll Pin
Member 113009178-Feb-19 22:25
MemberMember 113009178-Feb-19 22:25 
Questionhow to Normalize audio Pin
soheaila13-Jun-16 4:32
Membersoheaila13-Jun-16 4:32 
QuestionSome problems with this Pin
Tom Jeffries5-Aug-13 9:17
MemberTom Jeffries5-Aug-13 9:17 
Questiona possible problem about the state indicator? Pin
arash.mhd11-Jun-13 19:32
Memberarash.mhd11-Jun-13 19:32 
AnswerRe: a possible problem about the state indicator? Pin
antrov20-Jun-13 1:39
Memberantrov20-Jun-13 1:39 
QuestionMy Vote of 4 Pin
MarkJoel608-May-13 8:45
MemberMarkJoel608-May-13 8:45 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.