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
Support - (fb2k) / Re: Foobar2000 v2.* playback sound quality lower than v1.X
Last post by Case -
WASAPI is supported natively in both foobar2000 v1.6.x and 2.x. All the default outputs are WASAPI. The ones without extra marking use shared mode, the ones with [exclusive] in the name use WASAPI exclusive mode. Thus the old component is obsolete. It has been kept online mainly for people with older foobar2000 versions.

The separate WASAPI Shared mode component you downloaded is my first attempt of making an output component. It was created in the time when default foobar2000 output used DirectSound and had poorly working smoothing for sudden sound changes. For it to work correctly the sound card drivers need to support event based reporting when buffers need filling - something that has been WHQL requirement for drivers since Windows Vista days.

The ASIO output picks best supported sample format automatically, you are correct. You should probably know that the ASIO output is done completely in the output component. It's the exact same code doing all the heavy work in all foobar2000 versions. There can be no audible differences.
3
Support - (fb2k) / Re: Foobar2000 v2.* playback sound quality lower than v1.X
Last post by Globares -
Hi Case,
First of all thank you for some details regarding the v2/v1 differences. I really appreciate it.
I’ve installed the WASAPI plugin to try this option and I’m happy to say that we have the first thing we can agree on 😉. F2k v1 and v2 sound the same to me thru WASAPI. Unfortunately it means “really bad” when using the WASAPI shared output 0.6.24 plugin, which is the only one supporting 64 bits (sound seems to miss a micro-period from time to time). The old WASAPI output support 3.4 doesn’t have such problem, but it works on f2k v1, only, and it’s quality is worse than ASIO.
All my tests are done using the WAV files, “CD quality”, i.e. 44.1khz/16 bit, or Codec: PCM, 1411kbps, 16 bit, 2 channel, as reported by Foobar.

The bit depth cannot be set for ASIO drivers (the only available option is “Automatic”). As far as I can see Foobar2 v1.6 supports the same depth - just the interface is different (Playback->Output->Output data format). Interestingly, 32 bits provide better sound quality than 16 bits, even if I use 16 bits sources.
Running f2k v2 with output set to “Default – exclusive” and 32 bits depth provides the highest quality I can get from v2, better than v2 ASIO, but still behind v1 ASIO.

Small note - binary output comparison on a driver level is a mandatory quality test – if bits differ there’s an obvious difference, but it doesn’t cover timing and more subtle differences.
5
3rd Party Plugins - (fb2k) / Re: Resampler plugin
Last post by Case -
ardftsrc filter have superior quality & speed compared to sox resamplers.
I compiled librempeg, I think there is a bug in the code as it keeps insisting on using CLAP audio stuff even though documentation claims it doesn't do dependencies by default.
Anyway, with default settings and commandline
Code: [Select]
ffmpeg -i source.wav -af "ardftsrc=48000" -acodec pcm_f32le out.wav
my binary was slower than existing ffmpeg with '-af "aresample=48000:resampler=soxr"'. And it produced worse quality and the file length changed.
6
3rd Party Plugins - (fb2k) / Re: foo_skip: skip tracks that match a specified search query
Last post by Case -
Audio format shouldn't matter at all, the component does its work as a decoder shim and can work with everything. Note that M4A doesn't tell me what audio format your file actually is, M4A is just a name for MP4 container that contains audio. It can be AAC anything, MP3, ALAC, FLAC, probably more. I tried with typical AAC in MP4 container and couldn't replicate any issues.

Do you see on the console a message "Skip Track found partial skip info from tags"? The component prints that when it is enabled and  detects a SKIP tag present.
7
General Audio / Re: Album Art Downloader XUI
Last post by AlexVallat -
I will do a worked example with you. Looking at, for example mastermixdj, I can do a test search on it and see that the search URL is https://mastermixdj.com/?s=

Running with the network inspector devtool open I can see that it's dynamically creating the results HTML by calling an API, it calls:
https://mastermixdj.com/wp-json/api/v1/get/search/results?type=albums&search=TheSearchTerm&limit=4 and also the same API with type singles and limit 10. When writing your script you can customise this to whatever you want, but for now let's just do albums and keep the same limit they have.

The JSON returned is nice and easy to deal with, we don't even have to do HTML scraping, so great.

For JSON, the idea is to create a class that matches the bits structure of the JSON returned that we are interested in, and then do:
Code: [Select]
json = JavaScriptSerializer()
searchResults = json.Deserialize[of (SearchResults)](jsonSearchResults)
on it to parse it. SearchResult is wrapped in () because in the case of MasterMixDj it's an array of results retuned. If it was a single object, it wouldn't have those parenthesis. The JSON structure returned by MasterMixDj is an array of objects, where the interesting bits of the object (for us) are labelled title, artwork and link, so this would mean a class like:

Code: [Select]
	class SearchResult:
public title as String
public artwork as String
public link as String

Now we've parsed the results, they must be reported to AlbumArtDownloader. This is done using the results.Add method, which takes the parameters object thumbnail, string name, string infoUri, int fullSizeImageWidth, int fullSizeImageHeight, object fullSizeImageCallback, CoverType coverType, string suggestedFilenameExtension. There are overloads with fewer parameters you can see at IScriptResults.cs. For our case, we know the artwork, title (name) and link (infoUri). For artwork, this source doesn't provide separate small thumbnail images, it just shows the full size images resized. So we won't bother with thumbnails and just provide the artwork as the thumbnail.

As we don't have a separate full size image, we can just ignore fullSizeImageCallback and pass null to that. It's what gets given back to us in the RetrieveFullSizeImage method, which again, as we don't have separate full size images, we don't care about.

For size, we don't know it. the source doesn't provide that info, so just use -1, -1 for "unknown". For cover type, it looks like they are all just front covers, so we can pass CoverType.Front for that and end up with:

Code: [Select]
		for searchResult in searchResults:
results.Add(searchResult.artwork, searchResult.title, searchResult.link, -1, -1, null, CoverType.Front)

Final result is attached.

There's more that could be done with this source. For example, looking at the album page I can see that there is a facility for getting thumbnails, by appending "-100x100" to the artwork between "primary" and "jpg" so we could use that for faster results without downloading the full size one for every result. I can also see that there are additional images that could be found by replacing primary with "additional-1" (and presumably numbers past 1 if they existed). I'll leave all of that as an exercise for the reader, though.

This should give you enough of an idea as to how to do it that you can work on other scripts. If you produce any, please post them here for others to enjoy too!

Alex
8
News Submissions / TSAC: ultra-low bitrate ultra effective audio compressor by Fabrice Bellard
Last post by birdie -
TSAC: Very Low Bitrate Audio Compression

TSAC is an audio compression utility reaching very low bitrates such as 5.5 kb/s for mono or 7.5 kb/s for stereo at 44.1 kHz with a good perceptual quality. Hence TSAC compresses a 3.5 minute stereo song to a file of 192 KiB.

An Nvidia GPU is necessary for fast operation. CPU only is also supported but slower.

Technical information
  • TSAC is based on a modified version of the Descript Audio Codec extended for stereo and a Transformer model to further increase the compression ratio. Both models are quantized to 8 bits per parameter.
  • The transformer model is evaluated in a deterministic and reproducible way. Hence the result does not depend on the exact GPU or CPU model nor on the number of configured threads. This key point ensures that a compressed file can be decompressed using a different hardware or software configuration.
  • In order to get reasonable speed, you need an Nvidia Ampere, ADA or Hopper GPU (e.g. RTX 3090, RTX 4090, RTX A6000, A100 or H100) with CUDA >= 12.x. At least 4 GB memory should be available on the GPU. x86 CPUs are supported too but the program is much slower. The CPU must support the AVX2 instruction set in order to run the program. The FFmpeg utility is required to convert input files to raw format.
9
Support - (fb2k) / Re: Foobar2000 v2.* playback sound quality lower than v1.X
Last post by misio -
You people claiming to have a difference can very easily prove it. For example @misio's ESI Juli@ has nice high quality analog inputs. Just connect cables from outputs to inputs, play a demo track in both foobars while recording the output and share the recordings here. I at least would love to examine the claimed differences.
Doing the recording digitally would make comparison easier, but that would require getting a device that can record the digital output of the card. And you probably don't trust recording done inside the computer on driver level.
I do not use WASAPI at all, so I can tell nothing about this protocol.
Of course I can make an analog recording. Just give me a bit of time.
It will be Foobar -> ASIO -> Juli@ digital optical out -> DAC optical input -> DAC analog output -> Juli@ analog input