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
21
Lossless / Other Codecs / Re: HALAC (High Availability Lossless Audio Compression)
Last post by Hakan Abbas -
Hi Case.
First of all, if we start with error checking, after 0.2.7, I did most of them in the first stage. Some of these can be seen in the screenshot below. In addition, a warning message is sent when there is incorrect/missing data in the audio data, but the process is not stopped. However, the structural changes have not yet come to an end. In other words, I am waiting for the file structure to become more obvious. Then I can do these checks in more detail. When I can finish all this, I think the codec will no longer be my code. Thanks for the warning.

X
Now let's get to the other API issue. Your experiences and comments on these issues are very important to me. Since I don't know the exact functioning of the sound world, I try to do most things on my own. I'm mainly on the compression/speed side of the job. In this case, of course, some things may be missing.

With version 0.2.8, we do not stick to file names and proceed according to a memory startup address sent directly to us. Of course, since we work on a file basis, we should have the header information. In this case, the dimensions of the compressed data frames for random memory access are available in the header section. We only use the frame number to solve them. Therefore, since we load only the frames we want into memory, the memory consumption problem is also solved. You can see this by trying it on the player. In other words, it is enough to change the frame start and end numbers at the bottom right and play them. If it is on a different application, the GET_WAV_FRAME function should be used. (the frame size is currently set to 1 mb).

Of course, I didn't add a flow control mechanism to the Player. It is also necessary to deal with this because it is a special process. My goal is not to develop a full-fledged player. There are already countless applications that can do this job.

What I have described so far was the situation that happened when I was working with a .halac extension file. If there is a mistake in what I will write next, please correct it. I mean, about streaming...

If valid HALAC data(frame) is coming from any source that does not contain header information, what do we do? How are we going to solve them? I think that's the problem. Because we don't have an HALAC file. For this, first of all, information such as the number of channels, bit depth, processing mode should be known while compressing the data in the data source that comes to us, right? In other words, the source that compresses the data and sends it compresses with this information. And communication(broadcasting, etc.) in the beginning, don't the receivers(decoders) get this information in the first place? There must be some rules of communication between them. I tried to act thinking that this information was on both sides. That's why I created the GET_RAW_FRAME function. The information provided(number of channels, bit depth, compressed frame size...) can decode in light of.

So what exactly is the solution needed for streaming? And in this case, I think the data flow should be happening sequentially without skipping. Is it necessary that when we have a completely independent HALAC frame, it should be solved without needing anything, without asking anyone anything? If this is what is desired, it is necessary to keep this side information for each frame as well. When working as a file, there will be redundancy, as this information will be stored in both the header and frame headers. Actually, that's not a lot.

I can do whatever addition/improvement is needed in version 0.2.9. In other words, new functions can be added, old ones can be removed.
22
Support - (fb2k) / No icon WV file
Last post by mihelson -
The WV Audio file icon has no style. The set of icons in the folder is complete. Files have associations. This is on any 2.0 version foobar2000.
24
WavPack / Experimental WavPack 5.7.2 (hybrid enhancements)
Last post by bryant -
A month ago @guruboolez let me know about an issue he had discovered with WavPack’s hybrid mode. When experimenting with very low bitrates and high sampling rates (i.e., 2 bits / sample with 96 kHz or 192 kHz audio) the quantization noise would sometimes jump way up in level and become audible. Using a higher bitrate or forcing dynamic noise shaping (--use-dns) would fix it.

This reminded me of a situation I had seen several months earlier, also with the 2 bps setting. In this case it was 24-bit file with just a 1001 Hz sine tone, and the -x6 setting would generate over 10 dB more quantization noise than -x5.

Lastly, there was the sample pointed out by @Klymins and @shadowking where WavPack’s dynamic noise shaping was definitely not doing the right thing (which I described at depth in this post).

I started investigating all this and quickly descended into the rabbit hole! The first thing I discovered is there is a feedback issue with the hybrid mode at low bitrates. In other words, the quantization noise makes the prediction worse, which in turn increases the quantization noise, which makes the prediction worse, etc. There’s no real fix for it (at least I haven’t come up with one), but it is possible to mitigate it. For example, positive noise shaping makes it worse, which is why guru saw the problem with high sample rates that force first-order shaping in an attempt to shift the quantization noise into the inaudible range. One of my fixes is to limit this forcing for low bitrates.

To fix the killer sample issue, I came up with a smarter noise-shaping algorithm that actually filters the audio into high and low bands (split at fs / 6) and then compares the two averaged levels to determine the optimum shaping. This is more accurate than the old method, and so I have tuned it to be more aggressive, including stronger negative shaping (which helps with the feedback issue also). It greatly improves the killer sample (to my old ears) and might improve other samples (with any luck).

The new shaping algorithm is very quick to react, and so sometimes generates very short frames in the hybrid lossless mode. These short frames exposed some sub-optimal code and even some outright bugs in the “extra” modes, which is code that hasn’t had any meaningful updates in almost a decade. Fortunately the issues mostly concern these very short special-case blocks, but I have attempted to fix everything I found.
 
Bottom line is that I have created a very experimental version 5.7.2 that incorporates lots of changes to address both guru’s discovery and possibly do better noise-shaping in the hybrid/lossy mode. Here’s a quick, partial summary of the changes:

  • fixed bug: use the correct residuals for parameter estimation in extra levels 4 through 6
  • fixed bug: very rare edge-case where we would skip writing the correction bitstream
  • new dynamic noise shaping (DNS) algorithm using frequency splitting filters with averaging
  • only force positive noise shaping for sample rates >= 88,200 Hz and bitrates >= 4.5 bits / sample
  • in the “extra” modes only take header overhead into account in pure lossless mode
  • allow noise shaping to go further negative with bitrates under 3.0 bits / sample
  • improve decorrelation and entropy parameter estimation for very short frames

I would be interested in any feedback on this, but please do not use this (at least yet) for any important archiving. And, as always, be sure to use the -v mode to verify any lossless compression operation. Note that this still uses the same simple noise-shaping curves as before (only the selection is new), so everything is completely compatible with prior decoders.

BTW, the lossless hybrid mode is very slow because the new DNS code is not fully optimized. I don’t think it will ever be as fast as the old code (which was super simple), but it will get better than this. Also, because of the shorter frames, the overall compression ratio has dropped roughly 1% (at least for now).

Experimental branch on Github


 
25
Other Lossy Codecs / Re: lossyWAV 1.4.2 Development (was 1.5.0)
Last post by Nick.C -
Thanks very much for taking the time to perform such a comprehensive test of how lossless handle lossyWAV processed audio. Much appreciated.

For me another consideration is the "cost", in terms of CPU load / battery life of portable devices, of playing the audio. In that respect FLAC seems to do well - not sure about the others.
26
3rd Party Plugins - (fb2k) / Re: NEW ESLyric v0.5 - an alternative lyric show component
Last post by ngs428 -
@sveakul Correction, I have a Deezer Sid (cookie), the API is what is needed. 
According to this..  Following the steps, Deezer is not accepting new applications.  Is there a different way for the API?   
https://www.educative.io/courses/getting-started-with-the-deezer-api-in-javascript/getting-started-with-the-deezer-api
None that I know of.

OK, thanks.  I fixed my install issue, had the wrong folder location, but does not do much good without the API. 

On an unrelated question....   In the Lyric Search Window (right click in ESLyrics > Search), if you click on the "Search" dropdown in the top right corner, and pick "Sync Settings" what does that do? 
27
foobar2000 mobile / Stop playback after each track in Foobar2000 mobile
Last post by pcetp -
Hello everyone,
I need a bit of help to make Foobar2000 Mobile stop playback after each track.

In the Android and ios versions,  the Foobar2000 Mobile option "Stop after current" automatically deactivates after 1 track is played.
This means you have to press the "Stop after current" option for the next track if you want that function.
In Foobar2000 Mobile I would like to be able to toggle a function which always stops after the current track.

In the desktop Windows version of Foobar2000 I found the options:
Preferences > Playback > "Stop playback after current track" and underneath the option "Reset the above when stopping."
This works and is exactly what I am looking for in Foobar2000 Mobile.

Is this function unavailable in Foobar2000 Mobile?
If it is available, can somebody point me in the right direction?

Many thanks in advance for your help.
28
3rd Party Plugins - (fb2k) / Re: foo_uie_lyrics3
Last post by Defender -
Forwarded post from 2024-05-14

@Veksho

I'm having issues with the foo_multisource 0.56 component.
My install is foobar 2.2 x86 always newest beta running foo_ui_lyrics3 0.6. Also newest c++ runtime library versions 14.40.33810.

Lately I have increasing crash errors upon exiting foobar and almost always having visual c++ runtime errors while starting foobar which mostly only runs after trying to start 4/5 times in a row. It was kind of acceptable for me because I'm always testing (maybe less stable) stuff, but now the amount of crashes were becoming unbearable.

So today I started debugging by removing one component after another to isolate the cause for this almost constant startup bug. After having removed some 20 different components including foo_ui_lyrics3 (actually the third one I removed), I removed foo_multisource and all of a sudden I did not experience exit or startup errors anymore.

I reloaded my full skin including foo_ui_lyrics and multisource and back where the exit/startup errors.
Then I removed foo_ui_lyric3 but kept multisource ... still exit/start crashes. After removing multisource no more errors.

Reloaded full skin one more including foo_ui_lyrics and multisource and back where the exit/startup errors.
Then removed multisource but kept foo_ui_lyrics3 ... no errors.

Please investigate