Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: Can xHE-AAC be decoded by AAC-LC players? (Read 2894 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

Can xHE-AAC be decoded by AAC-LC players?

I am trying to find an answer to this, but I can't. All information I can find is about xHE-AAC players being capable of decoding the older AAC formats (which of course they can, duh). I couldn't find any information about the other way 'round, aka whether AAC-LC players can decode xHE-AAC. My post is inspired by this post which talks about playback issues on devices that should support AAC-LC playback (but the poster didn't specify the Windows version used or whether "playback" means full or partial playback).

The reason I have this question is because, traditionally, the AAC family of codecs are at least somewhat backwards compatible with AAC-LC:

- HE-AAC content can be played back by AAC-LC players, since those players will simply ignore the upper half of the frequency band (which is encoded as supplementary information using SBR) and only play back the lower half of the frequency band (which is encoded using conventional AAC-LC), which of course results in reduced audio quality but it works

- HE-AAC v2 content can be played back by HE-AAC players as mono (since HE-AAC players will ignore the parametric stereo information), and can also be played by AAC-LC players which will ignore both the parametric stereo information and the upper half of the frequency band, as mentioned above

So, does xHE-AAC follow the same pattern of being at least somewhat decodable by AAC-LC, or it doesn't and the Fraunhofer people decided to give it a name containing the "AAC" term anyway for marketing reasons?

I would be surprised if it is compatible, since I cannot see how USAC could be decoded by an AAC-LC decoder, but no harm in asking.

Re: Can xHE-AAC be decoded by AAC-LC players?

Reply #1
Hello, kurkosdr.

The answer is no. AAC-LC decoder does not decode xHE-AAC codec, they have their own decoders. Normally FFmpeg AAC native decoder decodes LC, HE and HEv2 fine, but xHE-AAC decoder native is not implemented in FFmpeg, also Fraunhofer FDK AAC decoder has xHE-AAC decode support.

If you want to play xHE-AAC audio, you can use Android 9+, IOS 13+, Windows 11 22H2+, macOS 10.15+, foobar2000 with external fdk-aac packet decoder compoment or FFmpeg & MPV with libfdk_aac feature enabled. You can use my custom builds of FFmpeg and MPV or FFmpeg libfdk_aac build on Github to play xHE-AAC, if you wanted.

Links to download FFmpeg and MPV with xHE-AAC decode support:
https://github.com/MartinEesmaa/VVCEasy/blob/master/FFMPEGVVC.md
https://github.com/MartinEesmaa/VVCEasy/blob/master/MPV.md

You could download FFmpeg with nonfree releases for Windows:
https://github.com/AnimMouse/ffmpeg-autobuild (Windows only for Github workflow automatic build)
Or you can compile FFmpeg with libfdk_aac feature, normally there is no libfdk_aac enabled of every automatic builds:
https://github.com/BtbN/FFmpeg-Builds

Code for FFplay to play:
Code: [Select]
ffplay -codec:a libfdk_aac usac.m4a
Code for MPV to play, if FFmpeg is enabled with libfdk_aac support:
Code: [Select]
mpv usac.m4a

If you have any questions or issues, let me know.
Thank you! :)

- Martin Eesmaa

Re: Can xHE-AAC be decoded by AAC-LC players?

Reply #2
Hello, kurkosdr.

The answer is no. AAC-LC decoder does not decode xHE-AAC codec, they have their own decoders. Normally FFmpeg AAC native decoder decodes LC, HE and HEv2 fine, but xHE-AAC decoder native is not implemented in FFmpeg, also Fraunhofer FDK AAC decoder has xHE-AAC decode support.

If you want to play xHE-AAC audio, you can use Android 9+, IOS 13+, Windows 11 22H2+, macOS 10.15+, foobar2000 with external fdk-aac packet decoder compoment or FFmpeg & MPV with libfdk_aac feature enabled. You can use my custom builds of FFmpeg and MPV or FFmpeg libfdk_aac build on Github to play xHE-AAC, if you wanted.

Unfortunately I am interested in hardware players, so apps and plugins won't help me. I kind of expected it won't be compatible. What can I say, shame on Fraunhofer for developing a standard not backwards compatible with AAC-LC but naming it as part of the AAC family (without even a numeric suffix), so Via Licensing can add the USAC patents to the AAC patent pool and extend the expiration date of the pool (yes, you can theoretically walk out once the HE-AAC v2 patents expire, but for that you need a patent list, and Via Licensing doesn't publish one for the AAC patent pool).

Re: Can xHE-AAC be decoded by AAC-LC players?

Reply #3
Unlikely. Good ol HE and HEv2 still retains the basic MDCT coding, so a sufficiently careless hardware codec might be able to try anyways and get it. xHE-AAC includes the new USAC speech codec.

Re: Can xHE-AAC be decoded by AAC-LC players?

Reply #4
But does every xHE-AAC encoder have to use the new features?
E.g. does exhale use the USAC speech codec, when working on music with the goal of transparency at +- 50-100kbps per channel?
a fan of AutoEq + Meier Crossfeed

Re: Can xHE-AAC be decoded by AAC-LC players?

Reply #5
Every xHE-AAC encoder needs to make use of the USAC speech coding technology at least at one bit-rate operating point (usually at low bit-rates). In the 50-100 kbps/channel range, there's little to no benefit in using that speech coding core, not even on clean speech input.

For details on why legacy (HE-)AAC decoders cannot handle xHE-AAC (or USAC) bitstreams, see also this post of mine. It's more than just the MDCT and speech core.

Chris
If I don't reply to your reply, it means I agree with you.

Re: Can xHE-AAC be decoded by AAC-LC players?

Reply #6
Unlikely. Good ol HE and HEv2 still retains the basic MDCT coding, so a sufficiently careless hardware codec might be able to try anyways and get it. xHE-AAC includes the new USAC speech codec.
HE-AAC and HE-AAC v2 are backwards compatible with AAC-LC on purpose, see my first post.