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.
Topic: Collaborative FB2K Documentation Project (Read 42126 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

Collaborative FB2K Documentation Project

Crossposted from a documentation request, I figured it'd probably be smarter if I moved it over to a topic instead.

Here's a little blurb I concocted... Anyone care to add/edit? If we do this collaboratively, we can make it work. If anyone cares to post a screenshot or something, I'll write about it. I'm just sort of stumped as to where to go from here.

I'll add the parts anyone cares to contribute, properly attributed to their authors. You can post in this topic, PM me, e-mail me, or whatever. If you'd prefer it attributed to something other than your HA alias, say so.

The intent is to create a complete set of documentation for FB2K. If everyone chips in and writes something, or translates some of Guruboolez's excellent tutorial, or even just fixes mistakes in what other people have posted, we ought to have an excellent documentation source done well. I have created a simple GIF file that is a menu-map for the standard interface, but I haven't yet found a server that will let me post it so you all can view it.

Any assistance is more than welcome in this project. So, without further ado, here's what we'll start with:

[span style='font-size:14pt;line-height:100%']foobar2000 documentation[/span]

What is foobar2000? (Canar)

foobar2000 is a revolutionary new audio player written by Peter Pawlowski, who wrote several of the main audio plugins for Winamp. foobar2000 came about after he got fed up with the inconsistencies in Winamp2's plugin architecture and in the focus on graphics and skinning of Winamp3.

The focus of foobar2000 is on good architecture. Aside from the central audio pipeline, all features of the player are modular. The visualization core is provided by a plugin. Even the interface itself can be replaced by a different plugin.

What's so special about it? (Canar)

Due to the excellent architecture, foobar2000 is a far more complete audio player than any other program available today. Here are some of its features (as of the latest v0.7 release candidates):
  • It supports gapless MP3 at the input level when given proper MP3s, rather than using crufty DSP and output plugin hacks to simulate it, although these methods are available to allow MP3s without the proper metadata to achieve a similar (but not identical) effect.
  • It automatically plays all formats as gaplessly as possible, perfectly in the case of lossless, Vorbis, Musepack, and certain MP3.
  • It has built-in database support, which stores all track metadata.
  • The default interface uses the standard Win32 GUI. Some may consider this a flaw, but with the capability to replace the interface, it is possible to use a non-standard, skinnable interface when one is coded.
  • All options and commands available from the menus can be assigned to any key combination, and may be rearranged in the menus as the end-user desires.
  • It supports ReplayGain, a method of perceptual normalization, for all audio formats.
and more....

What does the name mean?
The name "foobar2000" has no real significance. When Peter (zZzZzZz in this forum) began writing it, he had to give the project a name, and chose it as a temporary name. However, that temporary name has yet to be changed, and so it remains foobar2000. The definition of foobar in this case comes from the Jargon File, a metasyntactic variable used when you need a name for something, but don't know what to name it. The 2000 suffix is typically used to change a normal word into the name of a product, to make it sound new and spiffy. Hence, foobar2000. Its usage has become somewhat deprecated since the turn of the millenium.


[span style='font-size:13pt;line-height:100%']Help with foobar2000 features[/span]

[span style='font-size:12pt;line-height:100%']Masstagger component (picmixer)[/span]

foobar2000's masstagger tends to be quite a convenient tool when editing the information of tags in multiple files. It is accessed through the context (right-click) menu, and can rename files and edit their tags.

[span style='font-size:12pt;line-height:100%']Tag editing help[/span]
In the tag editing window, do perform an action, you must add it to a list. Once your list is fully compiled, it can be executed, and the progress will be shown. Here is a list of the actions and a description of what they do.

[span style='font-size:11pt;line-height:100%']Set value[/span]
Sets desired tag field (ARTIST, ALBUM, TITLE, or any other custom field) to whatever is entered in the masstagger input window. It will remove any data stored under that tag as well.

[span style='font-size:11pt;line-height:100%']Add value[/span]
Adds whatever is entered in the masstagger input window to the tag information in the file.

[span style='font-size:11pt;line-height:100%']Remove value[/span]
Removes specified tag field.

[span style='font-size:11pt;line-height:100%']Remove all values[/span]
Removes all tag fields (who would have guessed?  )

[span style='font-size:11pt;line-height:100%']Copy value[/span]
Copies one tag field to another.

[span style='font-size:11pt;line-height:100%']Guess values from filename[/span]
Guesses values from filename and lets you enter a certain formatting pattern for it. For example if your files are named artist - album_title. Enter %artist% - %album%_%title% as formatting pattern, and the masstagger will alter the artist, album, and title tags to correspond to the values in the filename. If you wish to indicate a field, but don't want to overwrite any existing values, the "field" %% may be used, which will not write any information to the tag.

[span style='font-size:11pt;line-height:100%']Format value from other fields[/span]
This is where it becomes interesting. This option lets you enter a specific formatting pattern for any tag field you wish to edit or create.

Note that when using complex formatting patterns I would recommend to first format a temporary %temp% tag with the desired pattern and then copy that one into the value that you wish. Afterwards you can remove the temp value. When processing a large batch of files you could probably just do a test run on one of the files and then do the rest in one go. Think about what you are doing beforehand though. This document is not responsible for messing up anyone's music collection.

[span style='font-size:11pt;line-height:100%']Remove all values except for...[/span]
Does just as it says, removes all values and lets you specify wich ones not to remove in a second field in the following pattern ie.: %artist%;%title%;etc

[span style='font-size:11pt;line-height:100%']Auto track number[/span]
Numbers the tracks in the right-side listbox based on their order in that box.

[span style='font-size:11pt;line-height:100%']Split multiple artist field[/span]
(presently undocumented)

Note: it is possible to perform several of these actions at once and in that case the order of those actions can be very important. So removing field A before copying it to field B is probably a bad idea and should be performed the other way around.


[span style='font-size:13pt;line-height:100%']Fix MP3 header command[/span]

The "Fix MP3 header" command in the context menu, fixes the header of the MP3 file, a la the old program "vbrfix", with the additional ability to edit gapless playback values. The developer believes it to be probably faster and more reliable than other programs in the same vein, but this has yet to be tested. Likewise, it should be safe for use, but has not been as rigorously tested as the MP3 decoder, which still pops the occasional bug up once in a while. The "fixed" MP3s should play in any player, although they may not play properly gaplessly. The information is stored in a standard VBR descriptor frame, which should be properly ignored by any modern decoder engine.

It should be used when an MP3 is encountered with an incorrect playback time, or when encoder specifications are known to make the MP3 gapless. Recent LAME builds all automatically properly set the gapless information, but certain encoder frontends are known to remove it. To check, reload the information from the MP3 via the context menu option, then ensure that the reported sample count in the file info box is a multiple of 588 (the CD sector size).

The term "padding" represents amount of null samples (silence) added at the end of file to complete last MP3 frame. Header fix doesn't let you edit padding directly; instead you can enter desired length (in samples) of entire file (which is more useful this way).

There are two ways to get correct length of MP3 file:
a) bruteforce method - run the header fixer on entire album (it needs per-file settings so it must be done to files individually, unfortunately) with proper delay and no padding, then run it again on each file, round reported length in samples down to nearest multiple of 588 and listen to the file; if a gap is heard, keep subtracting 588 from sample count until you find a value that sounds "right".

B) find correct cuesheet for that album (hint: try this site) and extract length values from it - either by substituting referenced file with something and loading the cue in fb2k, or by opening the cue in notepad and calculating lengths from index positions (cue time format: hh:mm:ss:ff, where ff is in 1/75-second frames; one frame has 588 samples).

Note: that either method doesn't let you find correct length of last track in album, but that's rather unimportant.

In a limited test, brute-forced lengths were compared to the lengths from the corresponding CUE file, and they worked out to be 100% accurate.

Collaborative FB2K Documentation Project

Reply #1
Maybe start going through the features/plugins/cool stuff?  I'll start in no real order:



Foobar's built in ABX component.  THis allows for handy comparisons of different encoders from within the player.  Becuase it features replaygain, dither as well as optional plugins (all foobar plugins also work with ABX), it is the most comprehensive ABX software available.



Foobar has a wide variety of supported plugins. 
  • Gap Killer:  Removes pre- and post gaps by detecting silence under a hard-coded threshold.  Threshold was configurable in older versions.
  • Crossfeed:  Adds a portion of left and right channels to the opposite channel, with a delay.  For headphone users.
  • Limiters:  Prevent clipping from lossy files encoded from loud sources.  "Hard" limiter alters the signal in a lossy manner, while Advanced Limiter scales wherever the signal would have otherwise exceeded the maximum.
  • Etc.


Foobar's playlist can be adjusted by the user through the use of playlist codes.  /*Put link to third party list site here; i forget which it is*/



Foobar's UI can optionally be controlled entirely by global hotkeys. 



Foobar integrates with Ahead Nero to burn audio CDs of virtually any format.  MP3, MPC, OGG, FLAC, APE, MP4, SHN, MOD, WAV, etc can all be passed through any of foobar's plugins and then burned to CD audio.  Gapless burning is also possible using LAME MP3, ogg, MPC and any other gapless format.



Quite a few things.
  • Foobar can be adjusted to play songs from RAM or from disk in systems low on main memory (decoding takes <3MB of RAM for most formats and common plugins).
  • Foobar supports the ReplayGain standard for all supported audio types.  Replaygain is a system for adjusting the gain of tracks or albums (adjustable) so that each album (or track) can have the same percieved volume regardless of the settings and encoder used.

    Foobar2000 DSP components operate on the signal at the native pipeline precision of 64-bit floating point samples.  However, some DSPs may be designed to process at a lower precision.

    ReplayGain scaling occurs before any DSP processing, and operates on the same floating point pipeline, so it incurs no loss on the signal.
  • Even the output format is adjustable for those with high end sound cards capable of greater then 16 bit precision.


Foobar can transcode from one format to another from the playlist.  For instance one could decode from Lossless FLAC files to 128k LAME MP3 for use on a flash based portable with just a few clicks.

Someone do a few others.  I'm lazy and want to play Battlefield 1942.  Also, feel free to edit, delete, add or change anything I wrote.

[Altered gap remover, crossfeed, and limiter descriptions; corrected one typo; added DSP and RG description -k54]

Collaborative FB2K Documentation Project

Reply #2
Allrigth seems like these days the word tutorial, FAQ, whatever has been mentioned a few times once again on the forums.  Seems to be kind of a

dreadful issue that resurfaces every once in a while.  And since I've been busy using FB's masstagger quite a lot lately and quite like this feature, I

thought I'd try  to make a more or less newcomer friendly guide to said function.  Trying to explain the whole of FB2K probably would have been a

bit much and I guess everyone knows how to hit a play button and encue a few files (well probably not everyone, but we'll put that aside for a

different discussion).  So basically the only thing needed is probably a few of FB's advanced functions explained in detail.

So here is my first humble attempt at a small explanation, tutorial, FAQ, call it whatever, of one of FB's rather powerful features.  Note that this is

meant to also be understandable for people who have had no contact with these features at all yet, so it might explain the obvious a few times

and is probably an entirely boring read for advanced users.  So for anyone who cares to read, here is,




The Unofficial Guide to FB's Masstagger


FB's masstagger tends to be quite a convenient tool when editing the information of tags in multiple files.  I will first briefly list the options you

have using it.  Basically you can choose to either use it to edit tags or to rename files from the FB2K context menu.  Here I will go into details of

the second option.  Although the first option should become quite self explanatory after reading this.

Basically there are several actions you can choose from to perform.


Actions to perform:


Set value
Sets desired tag field (artist, album,custom,etc) to whatever you enter in the masstagger input window.

Add value
Adds desired tag field and sets it to whatever you enter in the masstagger input window.

Remove value
Removes desired tag field.

Remove all values
Removes all tag fields  (who would have guessed)

Copy value
Copies one tag field to another.

Guess values from filename
Guesses values from filename and lets you enter a certain fromatting pattern for it.  For example if your files are named    artist - album_title. 

Enter %artist% - %album%_%title    as formatting pattern.

Format value from other fields
This is where it becomes interesting.  This option lets you enter a specific formatting pattern for any tag field you wish to edit or create. 

Note that when using complex formatting patterns I would recommend to first format a temporary %temp% tag with the desired pattern and then

copy that one into the value that you wish.  Afterwards you can remove the temp value.  When processing a large batch of files you could

probably just do a test run on one of the files and then do the rest in one go.  Think about what you are doing beforehand though.  After all I

don't want to be held responsible for messing up anyones music collection. 

I will explain how to create formatting strings for different situations further down .

Remove all values except for...
Does just as it says, removes all values and lets you specify wich ones not to remove in a second field in the following pattern ie.:

%artist%;%title%;etc

Auto track number
Haven't really tried out this one in depth, guess it does kind of what it says.

Split multiple artist field
Same thing goes for this one.  Never really used it yet.

Notethat it is possible to perform several of these actions at once and in that case the order of those actions can be very important.  So

removing field A before copying it to field B is probably a bad Idea and should be performed the other way around, etc.

Offtopic:  Excellent, Pizza just arrived.  This friday evening is improving.




Writing format strings for the masstager:

Well I guess the most powerful feature of FB"s masstager is the fact that it can use TAGZ format strings.  For reference to all TAGZ commands

please check the titleformatting help in your Foobar preferences. 

You can see that all the following samples contain %tag% and capital variables in the form of X, Y, Z.  The idea is that you replace %tag% by what

ever field value you would like to read from (ie,%artist%, %title%, etc.  .  What X,Y, Z stands for should be explained above the strings.  (Well and it

obviously should also be replaced by whatever fits your needs)

I can only say once more please check the titleformatting help for reference since it explains all available tag fields and commands.  Instead of

%tag% you could for example also use %_filename%, etc as input fields.

Allright before everyone gets bored with me blabbing on for to long I'll simply throw in those scripts.  Everything starts extremely simple to give

a basic idea on how everything works.  After all this is basically meant for new users.

The idea is that by the end of this you can write your own little scripts easily.  Or of course simply copy and paste these into the Masstager

window for further editing.  Just don't hold me responsible to what happens to your files.




Masstagger Strings:



Returns corresponding tag field:

%tag%

Example: if artist field is blah %artist% will return blah.  Note that you can insert any character (or space) in between two tags, in front or after, so

if artist is blah and title is bleh %artis%X%title% returns blahXbleh.


Trunctuates %tag% to a length of X characters:

$cut(%tag%,X)

Example: if artist field is blah $cut(%artist%,3)  returns bla


Truncuates %tag% by X characters and adds ... at the end of the cut.

$cut(%tag%,X)...

Example: if artist field is blah $cut(%artist%,3)...  returns bla...


Returns numerical value of %tag% and pads with 0s up to x characters

$num(%tag%,X)

Example: if tracknumber field is 3 $num(%tracknumber%,2)  will return 03. If 13 it will return 13.


Returns first two characters of a filename and displays as number (if present) padded with 0s up to X characters:

$num($left(%_filename%),2)

Example: if filename is 03_artist_title.mpc  will return 03.


Finds first occurence of character X in %tag% and returns everything in front of X:

$puts(spacer,$strchr(%tag%,X))$trim($left(%tag%,$sub($get(spacer),1)))

Example: blah X bleh  or  blah X bleh X bluh    returns  blah    (ie.:  artist_album_title    ----->  title,    in case X is  _ )


NOTE:In the next few strings I have decided to make it possible to define the %tag% that should be edited and the character or string that is

used to determine where to trunctuate as variables in the beginning of the string as $puts(tag,%tag%), $puts(char,X), etc.  Basically the reason I

have done this is to make it simpler to edit these strings, to what you exactly want them to do at the very moment, in the rather narrow

masstager input field.  That way it is possible to enter the needed tags and characters only once in the beginning of the line.  Again simply

replace %tag% and X by the desired values.  Also all of these strings will trim off the trailing and leading spaces of the output (in case there are

any).


Finds first occurence of character X in %tag% and returns everything in front of X:

$puts(char,X)$puts(tag,%tag%)$puts(spacer,$strchr($get(tag),$get(char)))$trim($left($get(tag),$sub($get(spacer),1)))

Example: blah X bleh  or blah X bleh X bluh    returns  blah    (ie.:  artist_album_title    ----->  title,    in case X is _ )

(Note this does exactly the same as the last string mentioned above, except for the introdution of the two variables in the front, meant for easy

editing)


Finds last occurence of character X in %tag% and returns everything in front of X:

$puts(char,X)$puts(tag,%tag%)$puts(spacer,$strrchr($get(tag),$get(char)))$trim($left($get(tag),$sub($get(spacer),1)))

Example: blah X bleh  returns  blah  and  blah X bleh X bluh    returns  blah X bleh


Finds first occurence of character X in %tag% field and returns everything after X:

$puts(char,X)$puts(tag,%tag%)$puts(spacer,$strchr($get(tag),$get(char)))$trim($right($get(tag),
$sub($len($get(tag)),$get(spacer))))

Example: blah X bleh    returns bleh    and blah X bleh X bluh    returns  bleh X bluh


Finds last occurence of character X in %tag% field and returns everything after X:

$puts(char,X)$puts(tag,%tag%)$puts(spacer,$strrchr($get(tag),$get(char)))$trim($right($get(tag),
$sub($len($get(tag)),$get(spacer))))

Example: blah X bleh    returns bleh          and    blah X bleh X bluh    returns  bluh


Finds first occurence of character X and last occurence of character Y and returns everything in between:

$puts(char1,X)$puts(char2,Y)$puts(tag,%tag%)$puts(spacer1,$strchr($get(tag),$get(char1)))$puts(spacer2,$strrchr($get(tag),
$get(char2)))$trim($substr($get(tag),$add($get(spacer1),1),$sub($get(spacer2),1)))

Example:  blah X bleh Y bluh    returns bleh

Note that in most cases X will probably be equal to y here.


Finds first occurence of string XYZ and returns everything in front of string XYZ:

$puts(string,XYZ)$puts(tag,%tag%)$puts(spacer,$strstr($get(tag),
$get(string)))$trim($left($get(tag),$sub($get(spacer),1)))

Example: blah XYZ bleh    returns  blah

Note that string XYZ can basically be any combination of characters or words.


Finds first occurence of string XYZ in %tag% field and returns everything after XYZ:

$puts(string,XYZ)$puts(tag,%tag%)$puts(spacer,$strstr($get(tag),$get(string)))$trim($right($get(tag),$sub($len($get(tag)),
$add($get(spacer),$len($get(string))))))

Example: blah XYZ bleh    returns bleh





Extracting Information from Relative File Paths:


As suggested I have included a small section on how to extract different values from their relative file paths.  To do so I will use the following

example path to extract information from 

...\Genre\Artist\Album[Date]\01_Title.mpc


sets title: 

%_filename%        returns title as      01_Title.mpc    and 
               
$puts(char,_)$puts(tag,%_filename%)$puts(spacer,$strchr($get(tag),$get(char)))$trim($right($get(tag),$sub($len($get(tag)),$get(spacer))))  returns

title as  Title.mpc


sets album:

$directory(%_path%,1)        returns title as      Album[Date]

$puts(char,'[')$puts(tag,$directory(%_path%,1))$puts(spacer,$strchr($get(tag),$get(char)))$trim($left($get(tag),$sub($get(spacer),1)))        returns

album as      Album

NOTE that the [ is quotes as '['    ,  the reason for this is for it to be recognized as a character and not as a command syntax,  you will probably

have to ommit the quotation marks for most other characters.


sets artist:

$directory(%_path%,2)        returns  artist as Artist


sets genre:

$directory(%_path%,3)          returns genre as Genre


sets tracknumber:

$num($left(%_filename%,2),2)      returns tracknumber as 01



Obviously a lot more is possible, but then this was just supposed to be a short introduction.  I would say simply copy a few of your files, and play

around with it.



The Rename Files Dialog

The rename files dialog enables you to automatically rename your files according to your metadata tags in an automated way.  You will first need to select all the tracks you want to rename and then right click and select: Masstagger/rename files.

Select in the masstagger dialog wich output directory you mant to use and wether to generate subdirectories according to the / \ characters.  I will give a few examples for renaming strings below.


Examples

To rename your files to "tracknumber_title.ext (i.e. 08_The Glass Bead Game.mpc)" you will need to enter the following syntax in the Output file name format field
Code: [Select]
%tracknumber%_%title%
No need to create subdirectories in this case.


To rename your files to "/artist - album/title.ext (i.e. Thievery Corporation - Sounds of the Thievery Hi-Fi/08_The Glass Bead Game.mpc) and create the appropriate subdirectories you will need the following syntax
Code: [Select]
/%artist% - %album%/%tracknumber%_%title%
In this case make sure the "create subdirectories" checkbox is ticked.


To rename your files to "/artist/album/tracknumber_title.ext (i.e.: /Thievery Corporation/Sounds of the Thievery Hi-Fi/08_The Glass Bead Game.mpc) use the following syntax
Code: [Select]
/%artst%/%album%/%tracknumber%_%title%



In case you generally make use of "album artist" tags (or anything similar) for various albums files you can replace %artist% with
Code: [Select]
$if2(%album artist%,%artist%)
in any of the above strings.


Note

One reason why it is convenient to use the masstaggers rename files function is that this way Foobar2000's database will automatically get updated to the current changes.



Of course this only gives a general idea of what is possible and all kind of different filenaming schemes can be used for this.

And as usual, please don't hold me responsible in case this makes a mess out of any of your files

In case the renamer ever does anything unexpected, don't dispair, it is usually very easy to fix with just another renaming operation.


Well, if your still with me now I guess thats quite a good sign and at least you didn't get all to bored along the way.  Hope this is all somewhat

comprehensible and can give people who are new to this a general idea on how things work.  Concerning Foobars Masstagger at least.  Any

suggestions and especially critisism, corrections and add ons extremely welcome.

Oh yeah and in case you ever get bored of any of those old bad quality Kazaa files that might still be lying around on your harddisk you can

always replace %tag% by $rot13(%tag%) , mess them all up a bit and make your filenames gow all blowfish.  (allright, for all humorless people, it's

a joke, PLEASE DON'T DO THIS, except of course if you are really bored with them)

Hmh lots of blehs and blahs, guess I should have used something a bit more creative .  Otherwise I might as well have called this thread BlahBlah.


In case you find any ingenious strings or even better simple ones, I suggest everyone can simply post them in this thread.


EDIT:  Damn this page turned out really wide,  Anything I can do about that.  (Well, except posting annoyingly long posts like this one  )
EDIT2:  Allright, this works better now.  Thanks Jan
EDIT3:  Included relative file paths section

Collaborative FB2K Documentation Project

Reply #3
Highly nifty, guys... I'm probably going to re-do it all as an HTML file, because it's pretty long, heh.

But this is exactly the sort of thing I was looking for. We'll see how it all compiles nicely. Bring on more, this is all really great.

I'll probably work and compile it all into the main document somewhere tomorrow.

Collaborative FB2K Documentation Project

Reply #4
Quote
[Altered gap remover, crossfeed, and limiter descriptions; corrected one typo; added DSP and RG description -k54]


Awesome.

Collaborative FB2K Documentation Project

Reply #5
*sighs* Doesn't look like it's going to get added before this weekend. I'm getting ready to move into rez.

As a side note, to all interested documentarians, the easiest way to take a screenshot of a single window is to hit Alt-Print Screen. That will copy the current window to the clipboard.

Collaborative FB2K Documentation Project

Reply #6
@Mike Giacomelli - whihc parts of Nero do I need to integrate it with fb2k??
Nov schmoz kapop.

Collaborative FB2K Documentation Project

Reply #7
CPU usage during playback
(applies only to 0.7 RC8 and above, older builds had float=>fixedpoint conversion bottleneck)

1. Reports from task manager are not reliable, as I've seen it reporting "0%" while proper speed test indicated that processing was done only at ~13x realtime (should be about 7%). Use foo_null (from Case's site) to measure CPU usage (diskwriter / speed test). It is also recommended that you use full file buffering in diskwriter while benchmarking to prevent windows file caching from affecting results.
2. Factors affecting CPU usage:
- file format played (eg. MPC decodes almost 2x faster than MP3)
- source media (local hard drive, network drive, CD/DVD), full file buffering enabled or not
- active DSPs - eg. resampler and equalizer need a lot of processing power
- dithering - noiseshaped dither can eat a lot of CPU time, non-noiseshaped is much faster
- output method (some soundcard/driver-specific issues)
3. Optimizing CPU usage.
- to benchmark CPU usage with different settings, use foo_null; never trust task manager reports as they have been proven to be extremely inaccurate
- use as few DSPs as you can; resampler *does*not* improve sound quality, it only avoids certain soundcard-specific hardware flaws; use it only if the difference is obvious to you ( = you can ABX it).
- dithering absolutely doesn't make sense above 16bit; if you own a 24bit soundcard, use 24bit output and disable dithering.
- if you own a 16bit soundcard, either keep dithering off for max speed, or use non-noiseshaping mode; noiseshaping mode gives optimal results but is really slow (takes even more time to process than eg. MP3 decoding). Dithering only affects least significant bits of sound data, in normal conditions you are very unlikely to be able to tell the difference between them.

[edit]
Detailed explaination why not to dither in 24bit and above, reposted from here
1. Dithering eats a lot of CPU time.
2. Differences between dithered and nondithered 24bit mode are at about -140dB. No hardware in the world has noise floor low enough for them to make it to analog signal. And if such hardware exists, you can't possibly get that low noise floor in your listening conditions, or notice those differences, as not many people can notice last bit differences in 16bit range (~-90dB).
Microsoft Windows: We can't script here, this is bat country.

Collaborative FB2K Documentation Project

Reply #8
Repost: FAQ about "Fix MP3 header" command (from here)

Quote
what does it exactly do?
It's yet another "vbrfix"-style tool, but with option to edit gapless playback values (probably also faster / more reliable than other "vbrfix" programs from what I've heard).
Quote
should i use it for all my lame encoded files with the setting 576 (encoder delay), 0 (padding)
Files encoded with recent LAME should have correct headers with gapless playback info already most of the time (but they apparently don't have if encoded with certain frontends), easy way to check: reported sample count (in file info box) should be a multiply of 588 (cd sector size); reload info from file before checking so you can be sure that reported length you get hasn't been read by old version of mp3 input that didn't support gapless playback.
You can also use this feature on files that have been encoded with different encoders than LAME (they may need different encoder delay though).
Quote
is it safe to use?
I think it's safe (I haven't seen any files being damaged by it so far; it even preserves all sorts of tags); hasn't been tested too much though.
Use it only where you need to - eg. for fixing reported length of some weird files (also on CBR files), or for making non-gapless MP3s play gaplessly.
Quote
will other players have problems with the "fixed" mp3 headers ?
No, these headers follow LAME header spec from Gabriel's page (also compatible with Xing headers for VBR files), all files encoded with semi-recent LAME have similar headers already; also, those headers are valid MP3 frames (unlike all other tags). If you use a player unaware of them (if one still exists), header will simply produce a silent frame at the beginning of file.
As far as I'm aware of, no other player uses gapless playback info from those headers at the monent.
Quote
what is padding? does this have something to do tags ? i only use ape2 tags if this helps
Padding represents amount of null samples (silence) added at the end of file to complete last MP3 frame. Header fix doesn't let you edit padding directly; instead you can enter desired length (in samples) of entire file (which is more useful this way).

There are two ways to get correct length of MP3 file:
a) bruteforce method - run fix on entire album (sorry, it needs per-file settings so it can't be used on multiselection) with proper delay and no padding, then run it again on each file, round reported length in samples down to nearest multiply of 588, listen to the file; if still produces gap - keep subtracting 588 from sample count until you find value that sounds "right".
b) find correct cuesheet for that album (hint: try this site) and extract length values from it - either by substituting referenced file with something and loading the cue in fb2k, or by opening the cue in notepad and calculating lengths from index positions (cue time format: hh:mm:ss:ff, where ff is in 1/75-second frames; one frame has 588 samples).
Note that either method doesn't let you find correct length of last track in album, but that's rather unimportant.
I've fixed 2 albums using the bruteforce method, then found cues and values I "guessed" turned out to be 100% accurate.
Microsoft Windows: We can't script here, this is bat country.

Collaborative FB2K Documentation Project

Reply #9
How To Set Up Replaygain[/u]



What is Replaygain


Replaygain calculates the average volume of either a track (track gain) or an album (album gain) and uses this information to properly adjust the volume of tracks, that are mastered at different volume levels, during playback.  This will make sure that you will have a similar volume levels on all of your tracks or albums without loosing any dynamic range of your music.  In the case of ALbum Gain, it will even make sure that more quiet tracks of an album will sound more quiet and tracks that where meat to be louder, louder.  As you can probably already tell, Album Gain would probably be the best way to make use of Replaygain.  For a more in depth explanation on how Replaygain works, check http://replaygain.hydrogenaudio.org/

Setting it up is realtively easy.  Simply select all the tracks you want to Replaygain in your playlist and you will be presented with several options:


Scan per file track gain:

This will scan the selection and will add Replaygain values file by file, meaning that the difference in loudness of files coming from the same album is not preserved.  This would be the recommended way of scanning tracks of wich you don't own the entire Album.  (If you only have a few files of an Album, but they come from the same source (rip), I would also recommend using Album gain.


Scan selection as album:

Not that hard to guess, using this option, you will have to select all the tracks that belong to one album and scan them.  The difference in loudness between quiet and loud tracks will be left intact.


Scan selection as multiple albums using album field:

In case all your files are properly tagged this would probably be the easiest way to initially set up Replaygain.  It will scan all selected files and properly gain them album by album using the album info found in the file tag.




Replaygaining your files will not alter them in any way.  It stores all the information it needs into the file tags or Foobars database and the actual file is not changed what so ever.  The whole process is obviously fully reversible by simply removing the Replaygain info from the file. (Or simply disabling Replaygain during playback).  Check your playback preferences, for all playback options considering Replaygain

Replaygain can also be used when creating mix cd's with Foobars diskwriter.  Simply enable it in the diskwriter preferences to make sure you get nicely balanced compilations without annoyingly large differences in volume levels.


Note that Replaygain will in a lot of cases also prevent your files from clipping, since it usually lowers the playback volume of very loudly mastered tracks.  Whereas this is not the main intention of Replaygain ( volume levelling is), this comes as a nice side effect to some people.  You even have the option to scale down tracks that still clip after applying Replaygain using the peak info (again, check your preferences for this option).

Last but not least, I will mention the two preamps in the Playback preferences.  Except if you know exactly what you are doing, it is not recommended to raise the output of the preamps above the default 0.0dB in any way.  However you can use these to slightly compensate for the difference between replaygained and unreplaigained Tracks.  Simply estimate your average Replaygain level and lower the preamp for files without Replaygain info by that value.  I found -8dB to work quite well for me.  This obviously should not be used to compensate for not properly Replaygaining your tracks, but definetaly will protect your ears and your equipment when coming across tracks that miss Replaygain info.

Collaborative FB2K Documentation Project

Reply #10
pcmixer: that link it wrong, i think it should be http://replaygain.hydrogenaudio.org/

Why do my file(s) play silent after replaygaining
Most likely explanation is that they are corrupt, and you have "Scale files that still clip after replaygaining using peak info" on. Check the replaygain_track_peak in the file info dialogue. If it is something ridiculous  (e.g. 65553.00967) either edit it manually using "edit replaygain info (advanced)", or turn that option in prefs off. Mind you, the replaygain gain might be lower than it should be by that glitch..

edit: actually not sure if this is a problem anymore
edit again: it is on one off my files so probably.
.

Collaborative FB2K Documentation Project

Reply #11
Quote
pcmixer: that link it wrong, i think it should be http://replaygain.hydrogenaudio.org/

Oooops, must have overlooked that one.  Thanks for pointing it out.
Just corrected it.

Collaborative FB2K Documentation Project

Reply #12
Quote
Foobar's playlist can be adjusted by the user through the use of playlist codes.  /*Put link to third party list site here; i forget which it is*/

http://pelit.koillismaa.fi/fb2k/ is the only one I'm aware of right now.

Collaborative FB2K Documentation Project

Reply #13
Edited my post with new info about dithering and 24bit mode.
Microsoft Windows: We can't script here, this is bat country.

Collaborative FB2K Documentation Project

Reply #14
Quote
I'm probably going to re-do it all as an HTML file,..

If I'm not wrong, I assume that the links and sublinks in the HTML help file will be mirroring the options in Foobar's preferences window? I guess that'll be the easiest arrangement...

Collaborative FB2K Documentation Project

Reply #15
Updates have been started again... I have limited time and a lot to do now that I've moved into residence, but I hope to make slow, steady progress on things. If anyone wants to start an HTML version of what I'm doing, you're welcome. The conversion will take more time than catching up to all the excellent posts you've all made so far.

Anyhow, I've added some of the Masstagger document, as well as most of the Fix MP3 header document, or at least all the key points of the latter. As always, comments make the project even better, so fire away.

Collaborative FB2K Documentation Project

Reply #16
<i><b>Title formatting in Foobar: basics</b></i>

Title formatting of Foobar2000 alows you to "program" playlist, Status bar, Main windows title, etc. to look the way you want.

<b>Basics tags</b>
%tagname% displays a tag field inside "percent" symbols.
Examples:
%artist%
%title%
%tracknumber%
%date%
%album%
%comment%

Some tracks may have other tag fields, like %subtitle% which can be displayed the same way

Placing a tag in "[]" brackets would made it desplay only if such a tag exists.

<b>Colors</b>
BBGGRR is a color value in HEX, ranged from 00 to FF where BB is Blue, RR is Red and GG is green.
Color tag defines a value, which is used until other color tag is applied.
To reset color to default, use  construction.

<b>Simplest formatting</b>
You can convert first letters of a displayed text to uppercase, using $caps(X) construction.
Examples:
$caps(%artist%)
$caps(greets, mate) --> Greets, Mate

$caps2(X) works almost the same way, but leaves uppercase letters untouched.
Examples:
$caps2(XXth century) --> XXth Century

$lower(X) and $upper(X) convert text to lower and upper case correspondively.
Examples:
$lower(SamPlE TexT) --> sample text
$upper(SamPlE TexT) --> SAMPLE TEXT

<b>$IF; basics</b>
If operators may look ugly, but they're quite easy to learn.
$if(A,B,C): if tag A exists, then display B, otherwise display C
Examples:
$if(%artist%,$caps2(%artist%),Untitled Artist)

$if2(A,B) is the same, as $if(A,A,B)
Examples:
$if(%title%,no title)

<b>Here are some ready to use samples of simple formatting:</b>

<b>Displaying "Artist" field</b>:
$if(%artist%,%artist%,Unknown Artist)

<b>Displaying "Title" field or filename if tag is missing</b>:
$if(%title%,%title%,%_filename_ext%)

<b>Displaying "Track number" as #NN with leading zeros</b>:
$if(%tracknumber%,#$num(%tracknumber%,2),)

So, overall, simplest construction, displaying Artist's name, Track number and Song title would look like this:

$if(%artist%,%artist%,Unknown Artist) - $if(%tracknumber%,#$num(%tracknumber%,2),) - $if(%title%,%title%,%_filename_ext%)

<b>Displaying Album, Date and Track number inside brackets</b>:
$if(%album%, - '['$caps2(%album%[ '('%date%')'][ #$num(%tracknumber%,2)])']'
,$if(%tracknumber%, - '[ '['('%date%')' ]#%tracknumber%']',[- '('%date%')']))

This sample should generally look like this:
[Design 19 (1997) #10]
However, missing values would not be displayed without formatting lost

For more information about title formatting, refer to Foobar's help file

Collaborative FB2K Documentation Project

Reply #17
Why doesn't the volume change immediately?

foobar2000 (and most other audio players) uses buffering. This introduces a slight lag on the output. The standard setting is 1000ms (1 second) but this can be lowered. However, lowering the buffer is likely to cause stuttering on slower machines, particularly when using the computer for other things at the same time as foobar2000.

If you want volume changes to be immediate, use the system mixer. This will either be accessible on the Tasktray as a small speaker icon, or through Control Panel -> Sounds and Audio Devices.

Collaborative FB2K Documentation Project

Reply #18
Quote
Why doesn't the volume change immediately?

foobar2000 (and most other audio players) uses buffering. This introduces a slight lag on the output. The standard setting is 1000ms (1 second) but this can be lowered. However, lowering the buffer is likely to cause stuttering on slower machines, particularly when using the computer for other things at the same time as foobar2000.

If you want volume changes to be immediate, use the system mixer. This will either be accessible on the Tasktray as a small speaker icon, or through Control Panel -> Sounds and Audio Devices.

(and if it is not on the system tray, you can enable it on the system tray by clicking the "show in systray" option from said control panel)

Collaborative FB2K Documentation Project

Reply #19
I think that, although it is important and very worthwhile to write the comprehensive documentation, the most useful thing from my point of view would be to produce a FAQ list (ideally with one of those cool dynamic scripts so more than one person can add answers to it).

The reason I think that this would be useful is because many people prefer not to read through huge amounts of documentation to find the answer to the most common questions. I don't think it would take away from the wonderful work above (discounting my post which is an example FAQ).

Also if it had some form of quick-links people could post the link directly to a FAQ answer in the forum when someone doesn't bother to look and we wouldn't need to get (as) frustrated..

Collaborative FB2K Documentation Project

Reply #20
PS I am speaking as someone who would happily contribute to the FAQ answers as I have learned many things since first coming to this forum and would love to help others  (and clear the forum somewhat of the repetitive questions when people don't bother to search).

Collaborative FB2K Documentation Project

Reply #21
I've noticed a few times wehn you guys post you accidnetly make faces when showing code. I'd recommend disableing faces when you post.