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 256675 times) previous topic - next topic
0 Members and 9 Guests are viewing this topic.

Re: exhale - Open Source USAC encoder

Reply #1125
Not sure if this has been answered / asked before.
I am wondering if Exhale could theoretically be extended to encode AAC-LC files at high bitrate ( 200Kbps )?  On the assumption there would be overlap between xhe-AAC and AAC-LC making this easier.

The reason I asked is because we currently lack high quality AAC-LC encoder that is truly open source.

Re: exhale - Open Source USAC encoder

Reply #1126
Even beyond the "theoretically," I'm puzzled: what do you hope that would accomplish?

FDK-AAC is a high quality AAC-LC encoder and is open source.

There are two issues with its license. It contains code that makes use of patented techniques, and it does not come with a grant of any patent licensing. (It explicitly denies granting any such rights, rather than just not including any patent grant as most pre-GPL3 licenses did.)

These make its use in many circumstances legally questionable, and have led some linux distributions etc to call it non-free.

While LC-AAC patents have generally expired, getting a 'patent-free FDK-AAC for LC' may not be as simple as ripping out HE-AAC and HE-AACv2 code. It could take some very careful IP review. Lawyers lawyers lawyers.

Exhale's license has exactly the same problems. xHE-AAC is quite heavily patented. Exhale uses patented techniques and explicitly states that it doesn't/can't give you the right to use those patented techniques.

xHE-AAC is different enough from its predecessors that turning it into an LC encoder, and trying to get rid of patented techniques, would involve radical change. And then you'd still need the lawyers.

(CR Helmrich did have the sense to base his license on a standard license, where AFAIK those responsible for FDK-AAC didn't. But I don't think people object on the basis of any of the rest of FDK-AAC's license text. Yes, it says you can't charge for a copyright license, but that's not actually contravening the Debian Free Software Guidelines or whatever because it doesn't say you can't sell the software, just that you can't charge for a copyright license.)

Re: exhale - Open Source USAC encoder

Reply #1127
So, I tagged the final 1.2.0 release of exhale, see https://gitlab.com/ecodis/exhale/-/releases. If you don't have any issues with exhale 1.1.9, you don't need to re-encode your audio files. This is mainly a bugfix and code stabilization release, with a major version number switch because the API changed a little. The audio quality improvement at ~128 kbps non-SBR and ~96 kbps SBR is very small on average and hardly noticeable.

exhale version 1.2.0 (December 2022)

Changes since version 1.1.9 from December 2021:
  • C API correction, some code sanitizing (issue #24, merge requests !8!11, J. Regan)
  • exhaleLib: code cleanup, very minor quality improvements in CVBR modes f and 5
  • exhaleLib: 5% speedup of all modes, better target rate matching in CVBR mode g
  • exhaleLib: work around MinGW compilation hickup (issue #26; thanks, C. Degawa!)

Not sure if this has been answered / asked before.
I am wondering if Exhale could theoretically be extended to encode AAC-LC files at high bitrate ( 200Kbps )?  On the assumption there would be overlap between xHE-AAC and AAC-LC making this easier.
Theoretically yes, but it's still quite a lot of work, see also post number 9 in this thread. For that reason it's not on my To-Do list.

Happy end-of-year holidays, everyone!

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

Re: exhale - Open Source USAC encoder

Reply #1128
Updated compiles at Rarewares. :)




Re: exhale - Open Source USAC encoder

Reply #1132
fyi, a relatively minor issue was identified last week and a fix pushed a few moments ago along with commit https://gitlab.com/ecodis/exhale/-/commit/e796ab6a.

For details see this thread. When making binaries, please call this a 1.2.0.1 sub-release since I'll tag it like that on the weekend and since the changes are so few. Planning only annual releases now, I'll make a "more official" 1.2.1 release in December. Maybe some more issues have popped up by then.

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

Re: exhale - Open Source USAC encoder

Reply #1133
Updated compiles on Rarewares suitably tagged. :)


Re: exhale - Open Source USAC encoder

Reply #1135
fyi, I just committed a bit of test code* to exhale's Git repository. Since that code is disabled by default, there is no need for recompiled binaries.

* In case you're interested what I did here: I added this code to verify that exhale's quantization works as efficiently as desired... which it does in the vast majority of frames. To do so, I bypassed exhale's psychoacoustic model, making exhale operate in a manner which can more easily be evaluated using SNR measurements. Note that, when setting macro #define EE_MORE_MSE 10 in source file exhaleEnc.h, then recompiling, and calling the exhale command-line tool as exhale(.exe) 9 n 99 input.wav output.m4a, high-rate encodings similar to what FSLAC produces are possible, but at a lower bit-rate.

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

Re: exhale - Open Source USAC encoder

Reply #1136
I compiled Exhale for Linux ISA RISC-V 64, you can find it here:
http://81.56.4.34:7438/share/x4pYfC1S2x2ll5YW/exhale.zip

Once the program is launched, an x64 architecture is reported. I'll leave you the output below for any corrections.

  ---------------------------------------------------------------------
 | exhale - ecodis extended high-efficiency and low-complexity encoder |
 |                                                                     |
 | version 1.2.0 (x64, built on Sep 27 2023) - written by C.R.Helmrich |
  ---------------------------------------------------------------------

 Copyright 2018-2023 C.R.Helmrich, project ecodis. See License.htm for details.

 This software is made available under the exhale Copyright License and comes
 with ABSOLUTELY NO WARRANTY. This software may be subject to other third-party
 rights, including patent rights. No such rights are granted under this License.

 Usage:   exhale preset [inputWaveFile.wav] outputMP4File.m4a

 where

 preset   =  # (0-9)  low-complexity ISO/MPEG-D Extended HE-AAC at 16*#+48 kbit/s
         (a-g)  low-complexity Extended HE-AAC using eSBR at 12*#+36 kbit/s

 inputWaveFile.wav  lossless WAVE audio input, read from stdin if not specified

 outputMP4File.m4a  encoded MPEG-4 bit-stream, extension should be .m4a or .mp4


 Notes:   The above bit-rates are for stereo and change for mono or multichannel.


  ---------------------------------------------------------------------

I suggest the following lines for the output:
| version 1.2.1 (32 bit, built on 20230927) - written by C.R.Helmrich |
| version 1.2.1 (64 bit, built on 20230927) - written by C.R.Helmrich |
| version 1.2.1 (ARM 32, built on 20230927) - written by C.R.Helmrich |
| version 1.2.1 (ARM 64, built on 20230927) - written by C.R.Helmrich |
| version 1.2.1 (RISC-V, built on 20230927) - written by C.R.Helmrich |

  ---------------------------------------------------------------------

From actual exhaleApp.cpp code:

fprintf_s (stdout, " |                                                                     |\n");
#if defined (__arm__) || defined (__aarch64__) || defined (__arm64__)
  fprintf_s (stdout, " | version %s.%s%s (ARM, built on %s) - written by C.R.Helmrich |\n",
#elif defined (_WIN64) || defined (WIN64) || defined (_LP64) || defined (__LP64__) || defined (__x86_64) || defined (__x86_64__)
  fprintf_s (stdout, " | version %s.%s%s (x64, built on %s) - written by C.R.Helmrich |\n",
#else // 32-bit OS
  fprintf_s (stdout, " | version %s.%s%s (x86, built on %s) - written by C.R.Helmrich |\n",
#endif
             EXHALELIB_VERSION_MAJOR, EXHALELIB_VERSION_MINOR, EXHALELIB_VERSION_BUGFIX, __DATE__);
  fprintf_s (stdout, "  ---------------------------------------------------------------------\n\n");

Re: exhale - Open Source USAC encoder

Reply #1137
Thanks for testing this! I'm reluctant to change the exhaleApp header text at this late stage, but can you please try the following change and tell me whether, after recompiling this on RISC-V, the garbage text disappears?

In file src/app/exhaleApp.cpp, change lines 60-62 to:

#if defined (__riscv) || defined (__riscv__) // coloring not interpreted on RISC-V
#define EXHALE_TEXT_INIT ""
#define EXHALE_TEXT_BLUE ""
#define EXHALE_TEXT_PINK ""
#else
#define EXHALE_TEXT_INIT "\x1b[0m"
#define EXHALE_TEXT_BLUE "\x1b[36m"
#define EXHALE_TEXT_PINK "\x1b[35m"
#endif

Thanks,

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



Re: exhale - Open Source USAC encoder

Reply #1140
Ah, good to know. Thanks for the clarification.

I committed a modified version of the code above, where users like celona can change line 60 as explained in the (new) comment.

Also worked some more on last month's test code* (see above). Remember, none of this stuff changes exhale's default behavior, so no need for recompiles or reencodings.

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