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
Lossless / Other Codecs / Re: HALAC (High Availability Lossless Audio Compression)
Last post by Hakan Abbas -
Normally, in stereo (a simultaneous 2-channel recording of sound), the 2 channels of music should be related to each other. If there is no real relationship between the channels, we can't really call it stereo. So we are talking about 2 completely different channels. Most probably one channel is completely silent. Or a very special different situation. Of course there are such cases. But they are exceptions.

HALAC works in stereo by default right now. But as I said, I can also make it work in mono for completely independent channels.
In 5.1 or other multichannel audio, correlation can be exploited quite well. It's interesting that FLAC doesn't do that. As I mentioned earlier, if I ever start with multichannel audio data, I will need to build a fast channel analyzer.
2
3rd Party Plugins - (fb2k) / Re: foo_vis_vumeter
Last post by boxerfan88 -
Some observations & enhancement request ... the tuning menu makes my fingers work very hard on the mouse ... click here click there roll wheel ... compounded by me testing different skins causing tuning to reset and have to tune again.

May I suggest a "one page" tuning screen enhancement  ( only if there is bandwidth to code it  )...

Example:


4
3rd Party Plugins - (fb2k) / Re: foo_uie_webview
Last post by regor -
please don't leave mad and when things start to get interesting.
Just not continuing arguing about using foobar x32 and saying RAM limits is not a problem for some components (depending on usage).

Quote
The API of WebView2 does not support a binary interface besides simple datatypes (integer, string, boolean), at best arrays of those simple datatypes. I could create a 'cursor' API that can be called from JavaScript to handle large data sets but the marshalling will always be thru JSON (unless someone with more experience contradicts me now).
I know, I know.

Even if no other datatypes are available,  at some point I imagine you would at least provide some method to run a query against the library (even if it just return paths), and also TF evaluation over a list (even if it's over a list of paths on library), etc. That will output either JSON or just an array.  And then, at that point, it's the component the one providing the data (and thus RAM limited on x32).

Quote
That means that the 'state' of the cursor must be maintained in the component, relying on the Javascript to call an API to release the resources at appropriate times. That's a big responsibility in these days of managed languages.

JSP has methods to dispose objects, and that has been the standard in all JS components until SMP, where automatic garbage collection took care of that (although that opens other set of problems if you want to finetune RAM usage). Also callbacks involving objects just pass temporal pointers, and they are invalid after a few ms outside the scope of the callback call (so you are forced to deep clone them before using).

Anyway, without having any idea about the SDK. I don't think you really need to expose the actual internal data of handles at all. You can pass an object compatible with JSON just containing the same data found on SMP. i.e. Raw Path, path, subsong index, etc. All your methods would ingest that object, and the actual matching with tracks would be done internally by your component (being invisible to the web view code) -either by raw path + subsong or with some internal uuid-. That would involve some performance loss, obviously, but it's doable.
5
General Audio / Re: Unusual sampling rates
Last post by [JAZ] -
@Klymins : You've been given lots of explanations, theory and reasoning since you first started posting in this site. And yet in most of your posts you try to tell the others that they are wrong because your preference is different.

I have a clear example of how aliasing sounds and why a bad resampling might feel better even though its quality is worse.
Check these two videos on youtube with the same song rendered one with ZOH and the other with SINC interpolator:
Song with aliasing (ZOH)
Song without aliasing (SINC)

Especially the start of the song has a very pronounced aliasing.
You might feel that the song sounds better WITH aliasing than without, but that does not mean better quality.
(Note: Since this is ZOH instead of linear, the aliasing extends to almost all the frequency range. Linear interpolation would kindly lowpass filter itself like what C.R.Helmrich posted)


Aliasing is an artifact that causes mirroring of the frequencies. There is no control of this mirroring, and it would rarely resemble what existed there before sampling it at a too low sample rate. 
The lack of control means that you can hear aliasing on a bass sound that should not have high pitched sound at all,  or you might hear a hihat that "magically restores" the missing part. 
So in the end it is a gamble if the aliasing will be an improvement or it will annoy and that's why pretending to use aliasing as a kind of sound improvement is a nonsense.

Mechanisms like SBR, used in MP3PRO or HE-AAC fullfill this functionality in a controlled way, and it still can sound bad in certain cases.
6
foobar2000 for Mac / Re: foobar2000 for Mac: bugs
Last post by heybart -
with preview 2.24 for Mac (M1 mini, Sequoia 15.1.1), Audio Units plugins seem to stop working at some point. Animation stops and changing presets/parameters has no effect on audio output.
7
3rd Party Plugins - (fb2k) / Re: foo_uie_webview
Last post by pqyt -
I'm out of this conversation, you seem to not want to understand how thing works on purpose. You are happy that way, fine.
@regor

please don't leave mad and when things start to get interesting.

I read your insights but you overlook the point I made earlier:

The API of WebView2 does not support a binary interface besides simple datatypes (integer, string, boolean), at best arrays of those simple datatypes. I could create a 'cursor' API that can be called from JavaScript to handle large data sets but the marshalling will always be thru JSON (unless someone with more experience contradicts me now).

That means that the 'state' of the cursor must be maintained in the component, relying on the Javascript to call an API to release the resources at appropriate times. That's a big responsibility in these days of managed languages.

But I think it can be done.
8
Lossless / Other Codecs / Re: HALAC (High Availability Lossless Audio Compression)
Last post by Porcus -
I make normal use of the correlation between the channels, so there is no separate evaluation for each block. Because in normal stereo music the correlation between the channels remains the same in most cases throughout the music.
So they are always transformed to average & difference?

The FLAC reference encoder will brute-force between dual mono and left+side, mid+side, right+side in five of the nine presets.  Among the four remaining, -0 and -3 encode dual mono, and in -1 and -4 it will make a selection and let it live on for a number of blocks before brute-forcing a block again.

@mycroft refers to how TAK selects multichannel decorrelation. Which has big effects: http://audiograaf.nl/losslesstest/revision%206/Average%20of%205.1%20surround%20sources.pdf
FLAC encodes independent channels (n-fold mono) except for stereo. IIRC, WavPack will default to pairing together FL & FR, pair together BL & BR, and SL & SR etc.

But as of now, HALAC is stereo-only?
9
General - (fb2k) / Re: Title formatting/syntax for proper bitdepth
Last post by Case -
Thanks for the crash reports. The crash is indeed triggered by the length, stupid bug but that's what I do these days.
As I don't have time to immediately improve things I nuked the buggy component from my site for now. Too many incomplete changes to get it release-worthy before the night.
10
3rd Party Plugins - (fb2k) / Re: foo_uie_webview
Last post by regor -
Not spending more time to prove anything, anyone with a bit of knowledge about how threading works would understand you are simply mixing things. It's not a matter of being able to do X or Y with any component, if you just span 3rd party threads outside foobar, they obviously have ram limits according to their own process. But data exchange between the external thread and component (unless done async in chunks) and storing size limit (this has no workaround) is still limited to x32 limits if you use foobar x32.

Want to test it?
- Use .print(text) method on a JSON parsed data greater than 3Gb.  In fact probably if you pass it as an object it will crash when trying to parse it ::)
- readAllText(filePath, codePage) on any text file greater than 3 Gb. (unless the dev coded it in some magic way to parse the file on chunks or the file is actually read by webView process directly)
- getPlaylistItems(playlistIndex) may also fail if the playlist is too big.
- I suppose the shared buffer only exposes the current playback and not the entire audio file, so that should be safe for big audio files.
- GetArtwork(artworktype) works fine as long as it's called on single tracks. If at some point it may be called on an entire list, it will crash when passing more than 2 Gbs.

The list will continue to grow when more methods are added which return metadata on batch, etc. And obviously you see nothing of this because the current scripts are obviously not designed to do anything of this, and the current component is designed mainly to manage a single track (now playing/selection) and display things for it. Now perform a lookup by fingerprint in the entire library and that's an entirely different thing.

I'm out of this conversation, you seem to not want to understand how thing works on purpose. You are happy that way, fine.