/musicPrinter

Prints music metadata using format strings

Primary LanguageC

This is a program to print formatted music metadata. It uses libavformat to
extract the metadata, and thus will work on a large variety of files. It also
searches the steam metadata as well as the container metadata (as some 
malformatted music files have their metadata in weird places)

Still in development, some features not implemented yet.

Usage:
$ muprint [OPTIONS] format_string filename

The format string is similar to printf's format string. It uses % to denote
metadata chunks from the loaded file. %% is used to denote a literal %. each
metadata chunk is composed of an optional modifier character followed by a type
character. The modifier characters change the allowed characters, causing the 
illegal characters to be ignored or replaced with the character specified by
the -r option. If you need more advanced replace options, use another program
like tr.

MODIFIERS:
v - allow all printing (visible) ascii characters (as defined by isprint(3))
p - allow all characters in the POSIX.1-2008 portable filesystem character set
    (that is: all alphanumeric characters plus period (.), underscore(_) and
    hyphen (-). Does NOT enforce that the first character should not be hyphen
u - allow all characters that are valid characters in unix filenames (i.e. not
    '\0' and '/')
c - allows a custom set of characters, specified by the -c flag

TYPES:
t - The track title
T - The track number, does not currently support padding
d - The disc number, does not currently support padding
b - The album
A - The album artist
a - The artist
e - The file's original extension
f - The original file basename (not including extension) 
% - a literal %

examples:
/media/Music/%pA/%pb/%d-%T-%t.%e would be 
/media/<album artist>/<album>/<artist>/<disc>-<track>-<title>.<extension>
with all characters not in the metadata that are not in the posix portable
filesystem character set to be ignored/replaced

OPTIONS:
-c <characters> specifies what the custom character whitelist should be. Just
    a string of characters e.g. "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-s <original type><subsitition string> specifies what to replace a metadata
    element with if not found. Defaults to "unknown". Other metadata elements
    are valid. For example, you can replace all album artists with the artist
    using -s "A%a". Multiple substitutions for the same metadata type are
    allowed and the last one added will take precedence. If the substition
    string contains metadata types that are unknown it is ignored. This allows
    chains of subsitions (e.g. replace X with Y if y exists, otherwise replace
    with Z)
-r <single char> replace non-whitelisted characters with this one instead of
    deleting them

BUILDING:
You need libavformat and libavutil. Other than that its straight up C11 with
POSIX.1-200809L extensions, so just running
$ make
should work. If you're debuging there's also 
$ make debug
which turns on -g for you

CONTACT:
andrew.jeddeloh.HATESSPAM@gmail.com
remember, I hate spam, so just remove that part.