Skip to content
A C# implementation of a Foundation Vorbis decoder.
Branch: master
Clone or download
ToddBertaOldham Updated
Added build targets and NuGet links.  Also removed new containers from the current plans (at least for now).
Latest commit 8833e60 Oct 29, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
.nuget * DataPacket: Don't throw on end of packet Dec 6, 2013
NVorbis Changed version number. Oct 28, 2018
TestApp Fixed assembly name of OpenTKSupport. Oct 29, 2018
TestFiles Add sound file that gets truncated Jul 22, 2013
TestHarness * Comment out testing bits that are incorrect, will redo later Mar 5, 2014
UnitTests * Comment out testing bits that are incorrect, will redo later Mar 5, 2014
.gitignore .Net Standard update Jan 4, 2018
Makefile * Add makefiles for mono Oct 12, 2012
NVorbis.sln Project clean up. Oct 27, 2018
README Update to match Apr 2, 2015 Updated Oct 29, 2018
TODO * Update README, TODO, nuspec files Jul 22, 2013

NVorbis Gitter

NVorbis is a .Net library for decoding Vorbis files. It is designed to run in partial trust environments and does not require P/Invoke or unsafe code. It is built for .Net Standard 2.0 and .Net Framework 3.5.

This implementation is based on the Vorbis specification found on The MDCT and Huffman codeword generator were borrowed from public domain implementations in

Currently the only container supported is Ogg. There are no plans for the Ogg Skeleton and Matroska / WebM containers or RTP support at this time.

To use:

// add a reference to NVorbis.dll

using (var vorbis = new NVorbis.VorbisReader("path/to/file.ogg"))
	// get the channels & sample rate
    var channels = vorbis.Channels;
    var sampleRate = vorbis.SampleRate;

    // OPTIONALLY: get a TimeSpan indicating the total length of the Vorbis stream
    var totalTime = vorbis.TotalTime;

	// create a buffer for reading samples
    var readBuffer = new float[channels * sampleRate / 5];	// 200ms

	// get the initial position (obviously the start)
    var position = TimeSpan.Zero;

    // go grab samples
    int cnt;
    while ((cnt = vorbis.ReadSamples(readBuffer, 0, readBuffer.Length)) > 0)
    	// do stuff with the buffer
    	// samples are interleaved (chan0, chan1, chan0, chan1, etc.)
    	// sample value range is -0.99999994f to 0.99999994f unless vorbis.ClipSamples == false
    	// OPTIONALLY: get the position we just read through to...
        position = vorbis.DecodedTime;

NVorbis can be downloaded on NuGet.

If you are using NAudio, support is available via NAudio.Vorbis.

Support for OpenTK also exists and can be downloaded on NuGet.

If you have any questions or comments, feel free to join us on Gitter. If you have any issues or feature requests, please submit them in the issue tracker.

You can’t perform that action at this time.