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: exhale - Open Source USAC encoder (Read 371657 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

Re: exhale - Open Source USAC encoder

Reply #25
Exhale has more restrictions than I expected.

It doesn't support 44.1 and 48 kHz for Stereo@64 and 80 kbps, and even no 32 kHz support for Stereo@64 kbps, although AAC-LC, HE-AAC and Opus support 48 kHz at those bit rates.

Re: exhale - Open Source USAC encoder

Reply #26
Although Apple's AAC-LC encoder can encode 44.1kHz signal at 64kbps / 80kbps, the result is band-limited to 12kHz / 15kHz, respectively.

Re: exhale - Open Source USAC encoder

Reply #27
exhale is at an early stage of development. It will take time to get a proper quality.
I think it's worth to test at 96 kbps and higher at this point.

Re: exhale - Open Source USAC encoder

Reply #28
Exhale ... doesn't support 44.1 and 48 kHz for Stereo@64 and 80 kbps ... although AAC-LC ... and Opus support 48 kHz at those bit rates.
Supporting those sampling/bit-rate combinations doesn't mean those will sound good, i.e., better than the same bit-rate with a lower sampling rate. In fact, with AAC-LC they don't. exhale, like AAC-LC, doesn't implement Spectral Band Replication (SBR) as a means for bandwidth extension (see also my first post, #9, in this thread), so the best average sound quality you can get with CVBR preset 1 is with a sampling rate of 22.05 or 24 kHz.

That being said, the <=32-kHz restriction for CVBR preset 2 is imposed by the exhale application, not the coding library. I just removed that constraint in the Git source code so you can encode 44.1-kHz audio at roughly 80 kbit/s stereo and an audio bandwidth of 15.2 kHz. However, this is not a recommended configuration since, to my ears, at this rate exhale sounds a bit better with an input sampling rate of 32 kHz. So I added a WARNING print-out during encoding if you use that configuration.

By the way, are people interested in automatic downsampling of >32 kHz audio for encoding with CVBR modes 1 and 2? Then I'll add this to my To-Do list for a later release version.

Edit: I just released version 1.0.2 of exhale with basic joint-stereo coding support for CVBR modes below 5 and some speed-up over the previous version, see

https://gitlab.com/ecodis/exhale/-/releases/v1.0.2

Regarding the mid-quality range (CVBR modes 1 - 4), we're slowly but steadily getting to a point where I'm actually beginning to like exhale's audio quality ;) But there are some issues left to address. Most importantly, I hear some rare plops and clicks which obviously need to be fixed. At this point I don't know, though, whether these are a result of a bug or some shortcoming in exhale's psychoacoustic model. If there is anyone interested in testing exhale (e.g. with the latest foobar2000 version 1.5.3 and kode54's decoder component from https://www.foobar2000.org/components/view/foo_pd_aac, you can play xHE-AAC files in foobar2000), please help me out by reporting here any occurrences of

- signal amplifications (plops, clicks, hiss, noise bursts, etc.) or attenuations (spectral holes, drop-outs, stereo image collapse, etc.)
- undercoding (average bit-rate much lower than CVBR target rate) or overcoding (average bit-rate much higher than target rate)

on any file or audio sample in your collection. All these cases are unintended at any target rate and, therefore, indicate an issue.

Thanks and stay healthy!

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

Re: exhale - Open Source USAC encoder

Reply #29
Chris, kode54

Thank You for foobar2000 xHE decoder.  That was fast.  :)
I will try to give a try to a new release now that  real-part joint stereo was implemented.


Re: exhale - Open Source USAC encoder

Reply #30
@Christian/C.R.Helmrich
reg. https://gitlab.com/ecodis/exhale > Readme.md
after reading some notes in this topic..maybe it makes sense to optimise pointing out what exhale is aimed at, maybe also the notes about bitrate-assessments and maybe to add a chapter with simple recommendations or a list of some quote-snippets - just to better put things into a frame and as it still happens that interesting notes might get unnoted in existing evolving forum-discussions, and beside the wiki.
Of course there is https://www.iis.fraunhofer.de/de/ff/amm/rundfunk-streaming/xheaac.html, their Audio-Blog and much more.
From a user point of view it is sometimes challenging to accurately class things - there are always tech-interested-users following advancing topics 8)


Re: exhale - Open Source USAC encoder

Reply #32
@Christian/C.R.Helmrich
reg. https://gitlab.com/ecodis/exhale > Readme.md
after reading some notes in this topic..maybe it makes sense to optimise pointing out what exhale is aimed at, maybe also the notes about bitrate-assessments and maybe to add a chapter with simple recommendations or a list of some quote-snippets - just to better put things into a frame and as it still happens that interesting notes might get unnoted in existing evolving forum-discussions, and beside the wiki.
You mean summarizing, e.g. in the Read-Me, things like the fact that SBR is not implemented in exhale, some notes of my first post in this thread, and how to decode xHE-AAC files? I'll add some of that information into the exhale Wiki, but I guess you're right, I could link to more information in the Read-Me. Thanks for the suggestion!

I will try to give a try to a new release now that real-part joint stereo was implemented.
Note that only a basic full-frame version of that tool is implemented so far. I'll add a bit more joint stereo functionality to fully exploit what the USAC standard allows, hopefully during the next few weeks.

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

Re: exhale - Open Source USAC encoder

Reply #33
Bug in the Windows version: If you give it a relative path for the input files (and possibly also the output files), it will resolve that path against the current working directory, which the executable appears to set to its own location, rather than whatever it was when it was invoked. Thus, I find I need to give it absolute paths.

This also breaks use with the foobar2000 converter, which uses CWD plus pathless filename, rather than absolute paths, when invoking converters.

Re: exhale - Open Source USAC encoder

Reply #34
Note that only a basic full-frame version of that tool is implemented so far. I'll add a bit more joint stereo functionality to fully exploit what the USAC standard allows, hopefully during the next few weeks.
Yes,  it's true. xHE-AAC also implements complex-value (MDST) joint stereo.

I haven't performed critical listening test yet, hopefully will get into it sooner.  But I have encoded few albums +critical samples  at ~96 kbps (CVBR 3)  and quality actually is very good!  Maybe it's not perfect-perfect (considering bitrate) but it's on high side, that's for sure.  I hear some HF flushing, smearing and slightly metallic noise that's typical to AAC family codecs, some minor transients artifacts. But it's  just very slightly and only in some situations, so no showstopper .  :)  I haven't noticed any heavy stereo coupling either.

Some numbers. Right now exhale codes up to 15.6-15.8 kHz at 96 kbps, similar as for high-quality LC-AAC encoders.

Encoding speed on my i7-9750H
1 thread - ~13-14x
all 12 threads - ~90x

Decoding speed - ~174x

As for my hardware it's fast enough.

All in all, it's a good release and definitely great start.

Thank You.

P.S. Bitrate distribution (CVBR) is fair and conservative, similar to Apple AAC CVBR.

Re: exhale - Open Source USAC encoder

Reply #35
 First and fast test of xHE at ~96 kbps. I just jumped to compare exhale xHE-AAC encoder with today best performers, Opus and Apple AAC.

Files exhale 1.0.2.1  test 96 kbps

TL;DR

Opus performs best on transients
Apple AAC and exhale xHE-AAC  perform best on tonal samples.
xHE-AAC exhale is in active development, so quality will improve.

Q: Why AAC and Opus are on par in my personal test while  Opus outperforms  AAC in public test?
A: Because my particular perception is somewhat different from a perfectly representative listener.  https://listening-test.coresv.net/s/donator_IgorC.svg

I think other members of Hydrogenaudio forum can try and report issues, bugs and hard samples  while exhale is in active development.  You can find everything in previous posts, binaries of encoder and foobar decoder.


Re: exhale - Open Source USAC encoder

Reply #36
I was wondering how much does the 'low complexity' part of xHE-AAC differ from normal LC-AAC?
The reason why I'm asking is, if there isn't any difference then can exhale be modified to also generate files compatible with older LC-AAC decoders?

Re: exhale - Open Source USAC encoder

Reply #37
USAC has some additional tools such as time-warped filter bank, noise filling or something (which can be disabled by defining RESTRICT_TO_AAC when building exhale), and also uses arithmetic coder while AAC uses Huffman (which is not implemented in exhale).

Re: exhale - Open Source USAC encoder

Reply #38
Add on top of that  MDST  joint-stereo prediction so, yes,  'low complexity' xHE-AAC is quite different from LC-AAC.

And it's not interesting anymore to develop LC-AAC encoders  :-\ .  Patents have expired   :D

BTW there were some interesting changes.  Current version 1.0.2.5  brings some improvements, especially to transients. https://gitlab.com/ecodis/exhale/-/commits/master



Re: exhale - Open Source USAC encoder

Reply #39
LithosZA, on top of what nu774 and IgorC mentioned, the USAC bitstream format is also quite different from that of (HE-)AAC, and only the USAC one is implemented in exhale.

IgorC, thanks a lot for your careful listening above! I analyzed your encodings and comments and released exhale version 1.0.3 today, see https://gitlab.com/ecodis/exhale/-/releases/v1.0.3

exhale 1.0.3 - Change Log
- extended basic joint-stereo coding functionality for mid/high rates, minor bugfixes
- exhaleLib: band adaptive joint-stereo coding for all CVBR modes, fixed rare crash
- exhaleLib: audio quality fine-tuning, especially for very tonal and transient signals
- makefile: -std=c++11 to allow for compilation with older versions of gcc (issue #4)

There is also an updated version 1.9 of kode54's foobar2000 packet decoder available at https://www.foobar2000.org/components/view/foo_pd_aac so I highly recommend updating both the encoder and decoder.

I'm still not totally happy with the way exhale handles click-like transients in some electronic music, but overall, all quality critical mid/high-rate xHE-AAC coding components are now implemented in exhale, so I believe we can focus on sample specific "killer sample tuning" now. For help with that I'd like to repeat my previous call for volunteers doing what Igor has done, and reporting any quality issues or crashes (see also my previous post above). Of course you can use whatever audio samples you like for that purpose.

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

Re: exhale - Open Source USAC encoder

Reply #40
Hello,

1.0.3 binaries (win32 & win64, MSYS2/GCC 9.3.0).

AiZ


Re: exhale - Open Source USAC encoder

Reply #42
Hi, I compared the 1.0.2 x86 to the john33 1.0.3 binary. System is i5-core 32-bit OS:
Code: [Select]
exhale  1.0.2 win32   enc     1.0.3 x86               enc
 mode    filesize    speed     filesize (vs. 1.0.2)  speed (vs. 1.0.2)
------  -----------  -----    ----------- ---------  ----- ---------
mode 1   68.72 kbps  6.81x     64.38 kbps  (-6.32%)  7.44x  (+9.15%)
mode 2   79.08 kbps  6.67x     74.97 kbps  (-5.20%)  7.17x  (+9.30%)
mode 3   93.89 kbps  6.07x     90.44 kbps  (-3.67%)  6.46x  (+9.40%)
mode 4  106.01 kbps  5.70x     98.43 kbps  (-7.15%)  6.18x  (+9.22%)
mode 5  120.88 kbps  5.12x    111.25 kbps  (-8.00%)  5.84x  (+8.77%)
mode 6  137.75 kbps  5.98x    120.21 kbps (-12.73%)  6.92x  (+8.64%)
mode 7  143.44 kbps  5.90x    131.57 kbps  (-8.30%)  6.66x  (+8.56%)
mode 8  159.53 kbps  5.74x    146.43 kbps  (-8.21%)  6.41x  (+9.00%)
mode 9  168.30 kbps  5.68x    154.58 kbps  (-8.15%)  6.28x  (+9.04%)

For what I can tell the files sound fine for their given bitrates (I primarily use lossless in studio projects, but getting back into speed benchmarks lately).

@AiZ: Is your x86 compile all 32-bit? I get an error "Entry point Not Found (GetTickCount64)."
"Something bothering you, Mister Spock?"

Re: exhale - Open Source USAC encoder

Reply #43
Hi, I compared the 1.0.2 x86 to the john33 1.0.3 binary. System is i5-core 32-bit OS
...
For what I can tell the files sound fine for their given bitrates (I primarily use lossless in studio projects, but getting back into speed benchmarks lately).
Thanks very much for testing, especially the 32-bit compile (I tend to focus on 64-bit in my own tests since that's a bit faster). But your reported bit-rates scare me a bit, for all modes above 1 they are much lower than the target rate (e.g., mode 9 should average at 192 kbit/s). What kind of audio content are you compressing here, and how much of it (duration)? Is it particularly easy to compress, e.g., does it contain a lot of silence or is it mono-signal-in-stereo-channel audio?

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

Re: exhale - Open Source USAC encoder

Reply #44
Damn,
@AiZ: Is your x86 compile all 32-bit? I get an error "Entry point Not Found (GetTickCount64)."
Are you still running Windows XP? Can you download and try again (archive updated)?

    AiZ

Re: exhale - Open Source USAC encoder

Reply #45
@C.R. Helmrich: I admit for not trying many types of music in the previous test, I used mixes of my studio tracks (3-piece group, alternative/hard rock). The material is monophonic to a point, but at the same time it's not. I thought if quality didn't suffer you would have been happier about the drop in bitrate between 1.0.2 and 1.0.3, especially since 1.0.2 mode 6 and mode 7 were fairly close in bitrate (which seems corrected in 1.0.3).

Instead of using unknown/unheard material I retried with a couple CD's I had nearby that other users might also have.

Here's some data on the tested material, then the results:

Code: [Select]
Foobar 2000 1.5.1 Replay Gain / Album Gain scan:

studio tracks {WIP, unreleased}            -10.82 dB
Dire Straits "Brothers In Arms" [W2 25264]  +4.81 dB
Legion Of The Damned "Feel The Blade"      -14.13 dB
Code: [Select]
exhale
v1.0.3  Brothers In Arms      Feel The Blade
 x86     filesize    speed     filesize    speed
------  -----------  -----    -----------  -----
mode 1   63.89 kbps  7.48x     57.97 kbps  7.08x
mode 2   78.39 kbps  7.08x     68.48 kbps  7.08x
mode 3   90.71 kbps  6.59x     82.68 kbps  6.40x
mode 4   97.05 kbps  6.37x     89.97 kbps  6.12x
mode 5  109.47 kbps  6.04x    104.02 kbps  5.71x
mode 6  118.19 kbps  7.19x    113.52 kbps  6.70x
mode 7  129.49 kbps  6.91x    125.69 kbps  6.39x
mode 8  143.91 kbps  6.63x    141.39 kbps  6.10x
mode 9  151.60 kbps  6.47x    150.04 kbps  5.96x

These results are not what I expected: most of the modes had bitrates less than the previous test. I seriously doubt the CD's tested are more monophonic than my studio works.

@AiZ: You're right, Im running WinXP x86 to several factors too boring to explain :/ (All cards on the table, I have to change the Minimum OS Version of the john33 binaries so they can run on my machine.) Also, I re-downloaded the x86 from the link  afew hours ago and and ended up with the same binary.
"Something bothering you, Mister Spock?"

Re: exhale - Open Source USAC encoder

Reply #46
Well,

Put my hands on a Pentium4 running Windows XP so I could test the win32 binary. Should be Ok now (archive updated again).

    AiZ

Re: exhale - Open Source USAC encoder

Reply #47
The link for the x86 version at Reply #41, above, has been recompiled and re-uploaded and should now be 'XP friendly'. ;)

Re: exhale - Open Source USAC encoder

Reply #48
@C.R. Helmrich: I admit for not trying many types of music in the previous test, I used mixes of my studio tracks (3-piece group, alternative/hard rock). The material is monophonic to a point, but at the same time it's not. I thought if quality didn't suffer you would have been happier about the drop in bitrate between 1.0.2 and 1.0.3, especially since 1.0.2 mode 6 and mode 7 were fairly close in bitrate (which seems corrected in 1.0.3).
...
These results are not what I expected: most of the modes had bitrates less than the previous test.
Thanks for the clarification. The slightly lower bit-rate for "easy to code" stereo audio in exhale 1.0.3 can be expected because the joint-stereo coding implementation in exhale got a bit more efficient in version 1.0.3. I also have the Dire Straits "Brothers In Arms" CD (mid-1990s remaster) and just tried it myself. I have to say, I get totally different bit-rates: for CVBR modes 2, 3, 4, 5, 6, 7, 8, and 9 and 44.1 kHz sampling rate, I get 79, 98, 110, 128, 140, 157, 176, and 189 kbit/s, respectively. Are you encoding at a different sampling rate?

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

Re: exhale - Open Source USAC encoder

Reply #49
I am sorry if I am intruding, but what is this codec, exactly? Some sort of upgrade over traditional LC-AAC codecs? Are old AAC decoders capable of decoding this stream? I've tested few songs, and at L3 they sound OK, I didn't do any ABX, will wait for a bit for that.
TAPE LOADING ERROR