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.
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.
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;
_waveOutDevice = new WaveOut();
_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);
catch (Exception initException)
if (Error != null)
Error("Audio - Play - Init", initException.Message, initException.StackTrace);
_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");
_volumeStream = new WaveChannel32(Reader);
The aticle is available in Italian here