The NAudio Documentation Wiki
NAudio FAQ
What is NAudio?
NAudio is an open source audio API for .NET written in C# by Mark Heath, with contributions from many other developers. It is intended to provide a comprehensive set of useful utility classes from which you can construct your own audio application.
Why NAudio?
NAudio was created because the Framework Class Library that shipped with .NET 1.0 had no support for playing audio. The System.Media namespace introduced in .NET 2.0 provided a small amount of support, and the MediaElement in WPF and Silverlight took that a bit further. The vision behind NAudio is to provide a comprehensive set of audio related classes allowing easy development of utilities that play or record audio, or manipulate audio files in some way.
Can I Use NAudio in my Project?
NAudio is licensed under the Microsoft Public License (Ms-PL) which means that you can use it in whatever project you like including commercial projects. Of course we would love it if you share any bug-fixes or enhancements you made to the original NAudio project files.
Is .NET Performance Good Enough for Audio?
While .NET cannot compete with unmanaged languages for very low latency audio work, it still performs better than many people would expect. On a fairly modest PC, you can quite easily mix multiple WAV files together, including pass them through various effects and codecs, play back glitch free with a latency of around 100ms.
How can I get help?
There are three main ways to get help. If you have a specific question concerning how to use NAudio, then I recommend that you ask on StackOverflow and tag your question with naudio. This gives you the best chance of getting a quick answer. You can also ask a question on the NAudio discussion forums here on CodePlex. I attempt to answer all questions, but since this is a spare time project, occasionally I get behind. Finally, I am occasionally able to offer paid support for situations where you need quick advice, bugfixes or new features. Use the contact feature of the Codeplex website to get in touch with Mark Heath if you wish to pursue this option.
How do I submit a patch?
I welcome contributions to NAudio and have accepted many patches, but if you want your code to be included, please familiarise yourself with the following guidelines:
- Your submission must be your own work, and able to be released under the MS-PL license.
- You will need to make sure your code conforms to the layout and naming conventions used elsewhere in NAudio.
- I don't usually accept contributions I can't test, so please write unit tests (using NUnit) if at all possible. If not, give a clear explanation of how your feature can be unit tested and provide test data if appropriate. Tell me what you did to test it yourself, including what operating systems and soundcards you used.
- If you are adding a new feature, please consider writing a short tutorial on how to use it.
- Unless your patch is a small bugfix, I will code review it and give you feedback. You will need to be willing to make the recommended changes before it can be integrated into the main code.
- Please use the Subversion patch tool to create your patch and tell me what version of the source code your patch is against. In the future, I hope to move NAudio to Mercurial, which will allow you to fork. Please familiarise yourself with these tools as they can save me a great deal of time integrating your contribution.
- Please also bear in mind that when you add a feature to NAudio, that feature will generate future support requests and bug reports. Are you willing to stick around on the forums and help out people using it?
How do I...?
The best way to learn how to use NAudio is to download the source code and look at the two demo applications - NAudioDemo and NAudioWpfDemo. These demonstrate several of the key capabilities of the NAudio framework. They also have the advantage of being kept up to date, whilst some of the tutorials you will find on the internet refer to old versions of NAudio.
- Choose an audio output driver
- Play an MP3 File
- Convert an MP3 to WAV
- Play a WAV File
- Use the WavFileWriter class
- Play streaming MP3
- Implement Looped Playback
- Trim a WAV File
- Play a Sine Wave
- Merge MP3 Files
- Convert an AIFF file to WAV
- Work with Multi-Channel Audio
Getting Started with NAudio – Downloading and Compiling
- Download a copy of the NAudio source code (or a pre-compiled version but the newest available code is available in source form first).
http://naudio.codeplex.com/SourceControl/list/changesets - The default project is set to the NAudio class library. Class Library’s don’t have anything to look at when you press F5. If this is your first time with NAudio, set the start-up project as NAudioDemo and then hit F5. The NAudioDemo project shows the base functionality you can utilise through your own project.
- In the BIN directory for the built solution, you can find a copy of the NAudio library for using and referencing in your own project. Make sure that you grab a copy of the NAudio.XML file as well if your copying it over to your own projects directory, that way you will have the intellisense documentation for use in Visual Studio when working with the NAudio API.
Additional Tutorials from OpenSebJ's blog (n.b. these are for NAudio 1.3):
- Tutorial 1: Introduction to Using NAudio
- Tutorial 2: Mixing Multiple Wave Files Together in Real Time
- Tutorial 3 - Sample Properties
- Tutorial 4 - Sample Reversing
- Tutorial 5 - Recording Audio
- Tutorial 6 - MIDI Interfacing