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
92
General - (fb2k) / Re: How to create an compilation of 60 flac files?
Last post by Porcus -
In any case, you will need to duplicate your physical files. i.e. a copy within the compilation folder, and then the originals in other folders.
It is possible to use hardlinks. Saves space ... as long as you don't trigger a full rewrite by retagging (note at the end)

You may also use m-tags to create virtual copies of files, which would work like you want. As far as I know m-tags are not available at x64 foobar though.
https://www.foobar2000.org/components/view/foo_tags
foo_external_tags can be used to "temporarily" retag files.
* "Create" external tags
* Modify the external tags
* Copy but hardlink instead of copy
* Then one can "Remove" the external tags that were associated to the original albums. fb2k will then read the tags from the files.
The hardlinked files will also have the same tags in the file, so keep the external tags for those.
That also makes it easier to identify one's own compilations: search for %__tagtype% HAS xt

Question: Is it possible to accomplish this by writing it to .cue instead - without having to manually edit the cuesheet? That is, instead of doing the copy+hardlink, create a cuesheet file with the minimum of tags that a cuesheet supports, and then put the cuesheets in a playlist and - maybe - that playlist will read from cue rather than from file?
Or even: use absolute paths in the .cue, and copy all the .cue files into a "my comps" folder and drag and drop them manually?


Then for that "note" on hardlinks:
* Background for those who don't know hardlinks: a filename like "flacfile.flac" points to some specific spot on the hard drive, where the data reside. Hardlinking means you just introduce a second filename hardlinkfile.flac which also is a pointer to the same spot on the hard drive.  Reading this and reading that ... same data read. (Indeed, it doesn't matter "which one was created first".)
* But, suppose you do a tag update on one of them - say the former - and so much that it triggers a full file rewrite - then a temp file will be written, and then flacfile.flac will be deleted and the tempfile renamed to flacfile.flac .
Now flacfile.flac points to somewhere else on the hard drive, but hardlinkfile.flac happily points to where it was! The hardlinking between them is broken, and they work like two files do - spending the space that two files take up.
* Because this was triggered by writing a new temp file,
Question: If instead one uses a file format with tags at the end - WavPack, TAK, Monkey's, OptimFROG - will one then eliminate this "problem" altogether? In fb2k and most common taggers?
93
General Audio / Re: Should I always normalize Impulse Response Samples when using them?
Last post by mycroft -
OP is using IR files, and that is done via FIR filtering/convolution.
Anything that supports libavfilter can use afir filter.
ffmpeg cli tool is irrelevant here.
libavfilter have better IIR filters than APO and similar products.
Using limiter may not always be wanted. And what limiter, there are many, from completely non-transparent to resource-hogs.
95
3rd Party Plugins - (fb2k) / Re: [fb2k v2] SQLite Utilities (foo_sqlite)
Last post by dpc666 -
I'm not really familiar with SQL but I'm willing to learn.

I would like to create some statistical tags, e.g. the last time an artist was played or the average play count.

The SQLite tag creation window is not exactly self-explanatory. It would be good to have some examples since there doesn't seem to be any official documentation for the component.
98
3rd Party Plugins - (fb2k) / Re: [fb2k v2] SQL Tree (foo_uie_sql_tree)
Last post by dpc666 -
The only remaining issue is that it seems that when an artist has tracks that have never been played, this gets treated as most recent and displayed as "[N/A]".

Edit: Okay, I solved this by putting [] around %last_played%. Kinda obvious ngl.

Edit2: Apparently, this is how I can filter by average plays (second to last line):
Code: [Select]
WITH Albums AS (
  SELECT a.*,
         avg(CAST(playcount AS INTEGER)) OVER wAlbum avg_playcount,
         max(lastplayed) OVER wArtist max_lastplayed
  FROM (
    SELECT path,
           subsong,
           playcount,
           lastplayed,
           stdartist album_artist,
           album,
           (CASE WHEN discnumber THEN 'Disc '||discnumber ELSE NULL END) disc_number,
           tracknumber
    FROM MediaLibrary
  ) a
  WINDOW wAlbum AS (PARTITION BY album_artist,album),
         wArtist AS (PARTITION BY album_artist)
)
SELECT '['||max_lastplayed||'] '||album_artist,
       '['||CAST(avg_playcount AS TEXT)||'] '||album,
       disc_number
FROM Albums
WHERE avg_playcount > 4
ORDER BY max_lastplayed,album_artist,avg_playcount,album,disc_number,tracknumber COLLATE NaturalNoCase
99
3rd Party Plugins - (fb2k) / Re: [fb2k v2] SQL Tree (foo_uie_sql_tree)
Last post by dpc666 -
Ok, it seems there is somewhere a bug, when using a column alias with the same name as an existing column at least for the used query. This is normally not a problem.

It would require a lot of time to analyze this problem completely, but fortunately there is an easy workaround (see query below). I also adjusted the ORDER BY so that album will be sent to the playlist with the correct track order.

Actually, when I composed the query I used implicitely this workaround as I don't have playcount and lastplayed available in my application setup.

Code: [Select]
WITH Albums AS (
  SELECT a.*,
         avg(CAST(playcount AS INTEGER)) OVER wAlbum avg_playcount,
         max(lastplayed) OVER wArtist max_lastplayed
  FROM (
    SELECT path,
           subsong,
           playcount,
           lastplayed,
           ifnull("album artist",artist) album_artist,
           album,
           (CASE WHEN discnumber THEN 'Disc '||discnumber ELSE NULL END) disc_number,
           tracknumber
    FROM MediaLibrary
  ) a
  WINDOW wAlbum AS (PARTITION BY album_artist,album),
         wArtist AS (PARTITION BY album_artist)
)
SELECT '['||max_lastplayed||'] '||album_artist,
       '['||CAST(avg_playcount AS TEXT)||'] '||album,
       disc_number
FROM Albums
ORDER BY max_lastplayed,album_artist,avg_playcount,album,disc_number,tracknumber COLLATE NaturalNoCase

This works perfectly, thanks!
100
General Audio / Re: Should I always normalize Impulse Response Samples when using them?
Last post by magicgoose -
I don't think 2-pass processing is sensible here, OP wants to use headphone correction eq, this is best to do on-the-fly if possible (otherwise you'd have to re-encode everything whenever you pick a different pair of headphones? that would be bad)

Also you'd probably want to keep relative loudness across files, so if your "safe gain" is dependent on the files, strictly speaking it would need to be calculated over the whole set, and re-calculated every time you add more files to the set.

This probably means it has to be done with something other than ffmpeg. (some tools are listed on AutoEq readme; e.g. EasyEffects on Linux, EqualizerAPO on Windows, etc.)

In case of AutoEq, these impulses are pretty much equivalent to running a parametric eq with known parameters - estimating maximum peak increase is probably easier from these parameters. They also already include a global gain parameter. But I'm not sure if it's based on an estimated worst-case max peak increase, or on something that assumes "normal"/"usual" signals.

If you use it together with ReplayGain (without pushing the target level too high) and a limiter at the end, then I think this is not really worth worrying about.