SharpJaad 0.2.0

dotnet add package SharpJaad --version 0.2.0
                    
NuGet\Install-Package SharpJaad -Version 0.2.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SharpJaad" Version="0.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SharpJaad" Version="0.2.0" />
                    
Directory.Packages.props
<PackageReference Include="SharpJaad" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SharpJaad --version 0.2.0
                    
#r "nuget: SharpJaad, 0.2.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package SharpJaad@0.2.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=SharpJaad&version=0.2.0
                    
Install as a Cake Addin
#tool nuget:?package=SharpJaad&version=0.2.0
                    
Install as a Cake Tool

SharpJaad

JAAD is an AAC decoder and MP4 demultiplexer library written completely in Java. It uses no native libraries, is platform-independent and portable. It can read MP4 container from almost every input-stream (files, network sockets etc.) and decode AAC-LC (Low Complexity) and HE-AAC (High Efficiency/AAC+).

SharpJaad is a netstandard2.0 port of the original Java code base with a few small fixes. It has no third-party dependencies and it's portable as it does not use any platform-specific APIs.

NuGet version

SharpJaad.AAC

SharpJaad.AAC is just the AAC decoder without any MP4 code. It's well suited for applications in RTP where the MP4 container is not needed.

NuGet version

Example

To decode stereo AAC Low Complexity (AAC-LC) with 44.1kHz, start with creating the configuration:

var decoderConfig = new DecoderConfig();
decoderConfig.SetProfile(Profile.AAC_LC);
decoderConfig.SetSampleFrequency(SampleFrequency.SAMPLE_FREQUENCY_44100);
decoderConfig.SetChannelConfiguration((ChannelConfiguration)2);

Create the decoder:

var aacDecoder = new Decoder(decoderConfig);

Create an output buffer for the result:

SampleBuffer buffer = new SampleBuffer();
buffer.SetBigEndian(false);

Decode the AAC frame:

byte[] aacFrame = { ... } // AAC frame to decode
aacDecoder.DecodeFrame(aacFrame, buffer);

Convert it to PCM:

short[] pcm = new short[buffer.Data.Length / sizeof(short)];
Buffer.BlockCopy(buffer.Data, 0, pcm, 0, buffer.Data.Length);

Allocations

After the first frame, DecodeFrame allocates nothing for AAC-LC, AAC Main, AAC LTP, HE-AAC (SBR) and HE-AACv2 (PS) streams: the decoder reuses its buffers, and the SampleBuffer keeps its Data array as long as the frame size stays the same. Reuse one SampleBuffer for all frames to keep it that way, and copy Data if you need it after the next call. Only a frame that fails to decode allocates (its exception). For this, a mono HE-AAC decoder creates its parametric stereo state (about 130 KB) up front, as PS can start in any frame.

Untrusted input

Files and streams from untrusted sources are safe to parse and decode: malformed or malicious input makes the MP4 and ADTS readers and the decoder throw an IOException (MP4Exception, AACException or EndOfStreamException), in bounded time and without allocating more than the input holds; nothing recurses without a depth limit. DecodeFrame throws only AACException. Each Decoder has its own state: don't share one DecoderConfig object between decoders, as decoding updates it.

SharpJaadMain

A sample application that can extract AAC audio from a (MP4) file and transcode it into a WAV file.

Credits

This is a port of the https://sourceforge.net/projects/jaadec/ into C#.

Development

  • doc/testing.md: the tests, the AAC conformance streams they decode, and how to run them.
  • doc/public-api.md: how the public API is guarded against unintended changes.
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETFramework 4.8.1

    • No dependencies.
  • .NETStandard 2.0

    • No dependencies.
  • net10.0

    • No dependencies.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.2.0 147 11/9/2026
0.1.1 10,051 2/12/2026
0.1.0 288 11/15/2025
0.0.6 384 4/1/2025
0.0.4 423 1/16/2024
0.0.3 315 12/21/2023
0.0.2 471 5/8/2023
0.0.1 336 5/8/2023