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.
Recent Posts
1
Opus / Re: Opus decoding complexity
Last post by Heliologue -
Define "complexity".

If decoding speed is a sufficient proxy, then it's easy to test this with foobar2000 (this assumes software decoding; specialized hardware will affect the speed), but there's lots of variables that could affect decoding speed.  My extremely rough benchmarking shows that decoding Opus files is about 1/2 as fast as a Lame-encoded MP3 of approximately the same average bitrate.

Single-threaded decoding test (3 passes)
MP3 (Lame 3.100 V2) is 1058x realtime
Opus (1.4) is 539x realtime

MP3:
Code: [Select]
System:
  CPU: AMD Ryzen 9 3900X 12-Core Processor, features: MMX SSE SSE2 SSE3 SSE4.1 SSE4.2 AVX LZCNT
  Architecture: x64
  App: foobar2000 v2.1.4
Settings:
  High priority: no
  Buffer entire file into memory: yes
  Warm-up: yes
  Passes: 3
  Threads: 1
  Postprocessing: none
Stats by codec:
  MP3: 1058.144x realtime
File: Rule 5 - James Picard.mp3
  Run 1:
    Decoded length: 3:14.640
    Opening time: 0:00.001
    Decoding time: 0:00.184
    Speed (x realtime): 1054.937
  Run 2:
    Decoded length: 3:14.640
    Opening time: 0:00.001
    Decoding time: 0:00.184
    Speed (x realtime): 1055.695
  Run 3:
    Decoded length: 3:14.640
    Opening time: 0:00.001
    Decoding time: 0:00.182
    Speed (x realtime): 1063.845
  Total:
    Opening time: 0:00.001 min, 0:00.001 max, 0:00.001 average
    Decoding time: 0:00.182 min, 0:00.184 max, 0:00.183 average
    Speed (x realtime): 1054.937 min, 1063.844 max, 1058.143 average
Total:
  Decoded length: 9:43.920
  Opening time: 0:00.002
  Decoding time: 0:00.550
  Speed (x realtime): 1058.144

Opus:
Code: [Select]
System:
  CPU: AMD Ryzen 9 3900X 12-Core Processor, features: MMX SSE SSE2 SSE3 SSE4.1 SSE4.2 AVX LZCNT
  Architecture: x64
  App: foobar2000 v2.1.4
Settings:
  High priority: no
  Buffer entire file into memory: yes
  Warm-up: yes
  Passes: 3
  Threads: 1
  Postprocessing: none
Stats by codec:
  Opus: 539.492x realtime
File: Rule 5 - James Picard.opus
  Run 1:
    Decoded length: 3:14.640
    Opening time: 0:00.000
    Decoding time: 0:00.362
    Speed (x realtime): 537.041
  Run 2:
    Decoded length: 3:14.640
    Opening time: 0:00.000
    Decoding time: 0:00.360
    Speed (x realtime): 539.971
  Run 3:
    Decoded length: 3:14.640
    Opening time: 0:00.000
    Decoding time: 0:00.359
    Speed (x realtime): 541.482
  Total:
    Opening time: 0:00.000 min, 0:00.000 max, 0:00.000 average
    Decoding time: 0:00.359 min, 0:00.362 max, 0:00.361 average
    Speed (x realtime): 537.041 min, 541.482 max, 539.491 average
Total:
  Decoded length: 9:43.920
  Opening time: 0:00.000
  Decoding time: 0:01.082
  Speed (x realtime): 539.492
2
Development - (fb2k) / pfc container types do not satisfy the c++20 range concepts
Last post by pnck -
Hi, I was recently developing a component with a context menu. And I wanted to do something like this:
Code: [Select]
void my_menu::context_command(unsigned int p_index, metadb_handle_list_cref p_data, const GUID &p_caller) {
    switch (p_index) {
    case CMD1: {
        auto to_process = p_data | std::views::filter([](auto item) { /* filter by some interested fields */});
        // ...
    }

Sadly this is not possible because metadb_handle_list_cref AKA pfc::list_base_t doesn't satisfy the std::ranges::range concept.

range<T> requires a begin() function to return a std::input_or_output_iterator.
And the iterator is required to have an operator++ returning the reference to itself:
https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator
https://en.cppreference.com/w/cpp/iterator/weakly_incrementable

But in pfc the operator++ is implemented as a void function:
Code: [Select]
namespace pfc {
template<typename arr_t>
class list_const_iterator {
typedef list_const_iterator<arr_t> self_t;
public:
typedef ptrdiff_t difference_type;
typedef typename arr_t::t_item value_type;
typedef const value_type* pointer;
typedef const value_type& reference;
typedef std::random_access_iterator_tag iterator_category;

list_const_iterator(arr_t* arr, size_t index) : m_arr(arr), m_index(index) {}
void operator++() { ++m_index; } // <--
void operator--() { --m_index; }

So the containers implemented in pfc can't be treated as ranges, nor adapted to views.

Since we've been gradually moving to c++20, would this problem be fixed soon?
4
3rd Party Plugins - (fb2k) / Re: Playlist-Tools-SMP
Last post by regor -
Well, actually you're a bit wrong here, haha :) I did read the change log at the time but I simply forgot to do those changes later when I updated, I assumed I already made those changes....I guess lately I was frustrated by so many annoyances...Foobar v2, foo_plorg, and the list is very very long...Or as you saw recently foo_skipcount....where you helped the developer with those bugs, some of them I've also noticed...When you have many components it's hard to keep track with so many changes , especially now with Foobar v2...

I solved the problem by resetting the toolbar, then I reimported the user presets for the Playlist Tools, the other buttons didn't have many settings, so nothing is lost.
Understandable hahaha nothing to add. Glad you got it working.
6
3rd Party Plugins - (fb2k) / Re: Playlist-Manager-SMP
Last post by regor -
Thanks to your tip I managed to solve this, I didn't use the package.
I remembered that I created a smart playlist , probably 2-3 months ago....I removed that smart playlist and everything seems ok now, that error doesn't appear. I'll send you a PM with the details of that smart playlist, just in case it's useful.
But there is one more issue....something that I forgot to mention last time. I also have this error:

Error: Spider Monkey Panel v1.6.1-mod (Playlist Manager: Playlist Manager v0.16.0 by regorxxx)
unknown format:

File: chroma.min.js
Line: 86, Column: 1596
Stack trace:
  g@chroma.min.js:86:1596
  m@chroma.min.js:86:1908
  getColorName@playlist_manager_menu.js:3218:36
  createMenuRightTop/<@playlist_manager_menu.js:3237:61
  createMenuRightTop@playlist_manager_menu.js:3224:13
  func@playlist_manager_list.js:7174:6
  _list/this.lbtn_up@playlist_manager_list.js:1845:14
  @playlist_manager.js:669:9
  fireEvents/</<@callbacks_xxx.js:149:37
  fireEvents/<@callbacks_xxx.js:145:30

It happens when I try to right click Action button, and also when I try to left click settings button.
Thx for your patience.

Your playlist was referencing itself, which is obviously wrong. You made Playlist X with a query using Playlist X as source xd Obviously that should crash. I didn't test that specific case, but I think my latest changes should also warn about it.

About your other error, that seems some error from past versions with some color missing not added at a later update. Will look for it tomorrow. If you post here your properties of the panel (you can skip anything with paths), I will surely find it faster.
7
Uploads - (fb2k) / Re: foo_converter.dll.cfg
Last post by eahm -
Added MP3 (Helix) with the settings "-HF2 -V110 (~195kbps)" according to this guide: https://wiki.hydrogenaud.io/index.php?title=Helix_MP3_Encoder#Reasonable_Settings, I don't know much about this encoder but since it's being resurrected I wanted to add at least one parameter.

@Peter, I noticed the new foobar2000 2.x manages foo_converter.dll.cfg in a completely different way and it saves it inside the database once loaded and I have to use an older version to modify/edit it, is there a way to still save the .cfg with the new foobar2000 or force it to keep the file inside the 'configuration" dir? Thank you.
9
Other Lossy Codecs / Re: NellyMoser Asao patent
Last post by jarsonic -
I am not a lawyer, so this is not legal advice, however:

Looking at NellyMoser's patent portfolio and all the patents by the inventors of their associated patent filings, all of the patents appear to be expired due to a failure to pay maintenance fees to the USPTO as of about 2009.  Even if that hadn't been the case, it seems like they would have expired around December 2023.
10
Lossless / Other Codecs / Re: Tested: Lossless decoding speed, multithreaded - and fast verification
Last post by Porcus -
BLUNDER on me and on ffmpeg.

ffmpeg errs out on the ¨3x.flac-0b65535--no-md5--uncompressed.flac also when decoding. Of course I should have checked that when it refuses to demux.

It is not about it using the only-verbatim-subframes flac - likely it is about frames being too big.
The attached 1.3 second flac file - good old Merzbow at it again - has 57330 samples and is created with
-0r0 --no-padding -fb57330 --lax
So one frame, both subframes are FIXED, order 1.
ffmpeg cannot decode it. Recompress it with smaller block size, and it will - 57300 is still too large though.

Edit: reuploaded without artwork, that is not the blame - and seems the "r0" is superfluous.
Fiddling around with files I found out that padding-or-not could even influence the max block size. I got a file where 53207 with default padding is OK, 53208 with default padding is not, 53208 with --no-padding is OK.


@ktf, of course there is nothing wrong with the file? The blame is squarely on ffmpeg?
It makes decoding much more complicated, less predictable and less stable.
You might have had a point ...