melconv¶
Introduction¶
melconv is a command-line tool for converting monophonic melody files into another. The main structure behind is star-shaped: Files are read and converted into a internal format and afterwards exported in the desired output format (cf. Fig. 1: General schema.). Not all formats possess the same expressivity, so some conversion can either not be carried out or only with a loss of information.
melconv input formats
SV projects files (Jazzomat type)
MCSV1 format
MCSV2 format (since melconv v1.1.4, MeloSpyGUI v1.2, MeloSpySuite v1.4)
SQLITE/WJazzD format
EsAC (old and extended format)
MIDI
Tony generated note tracks as CSV files
melconv output formats
MCSV1 format
MCSV2 format
SQLITE/WJazzD format
MIDI format
Notes (simple onset/pitch format as used by Temperley)
Lilypond (since melconv v1.1.4, MeloSpyGUI v1.2, MeloSpySuite v1.4)
Usage¶
Here is the basic call to melconv:
melconv [-h] [--version] [-d DIR] [-o OUTDIR] [-c CONFIG]
[-f {mcsv1,meter,notes,midi,krn}] [-i INPUT]
[--inputformat INPUTFORMAT] [-t TRANSPOSE] [--dbtype DBTYPE]
[--dbpath DBPATH] [--dbuser DBUSER]
[--dbpwd DBPWD] [--dbrebuild [DBREBUILD]]
[positional]
If used without configiration file, melconv only converts one file at a time. For mass conversion, the use of the configuation file is strongly advised.
Options and arguments¶
-
-h
,
--help
¶
Show a help message and exits.
-
--version
¶
Shows program’s version number and exit.
-
-d
<DIR>
,
--dir
<DIR>
¶ Use <DIR> as working directory for reading the project files. Default is the current directory.
-
-o
<OUTDIR>
,
--outdir
<OUTDIR>
¶ Write files or database to <OUTDIR>. Default is the current directory.
-
-c
<CONFIG>
,
--config
<CONFIG>
¶ Use the configuration file <CONFIG>, see below. The arguments <DIR> and <OUTDIR> override the settings in the config file. but the positional argument is ignored while using the config file.
-
-f
{mcsv1,esac,meter,notes,midi,database}
,
--format
{mcsv1,esac,meter,notes,midi,database}
¶ This options specifies the desired output format. Ignored in presence of a configuration file. Defaults to
mscv1
format. Has precedence over according value in configuration file. Case insensitive.
-
-i
INPUT
,
--input
INPUT
¶ Absolute or relative path to the file to be converted. Ignored in presence of a configuration file.
-
--inputformat
INPUTFORMAT
¶ Force to use
INPUTFORMAT
as format of the input files instead of guessing from file extension.
-
-t
TRANSPOSE
,
--transpose
TRANSPOSE
¶ Transpose output by
TRANSPOSE
semitones. Include sign for upward resp. downward transposition. Has precedence over according value in configuration file.
-
--dbtype
DBTYPE
¶ If output format is
database
, one must specify the type of database here. Currently onlySQLITE3
is supported (also default). Has precedence over according value in configuration file.
-
--dbpath
DBPATH
¶ Absolute or relative path to the output database. Has precedence over according value in configuration file.
-
--dbuser
DBUSER
¶ If credentials are needed for database access, here the user name can be specified. Has precedence over according value in configuration file.
-
--dbpwd
DBPWD
¶ If credentials are needed for database access, here the password can be specified. Has precedence over according value in configuration file.
-
--dbrebuild
[DBREBUILD]
¶ If output format is database, it can be specified with this option whether the database should be completely rebuild (ATTENTION: deletes all previous contents). If the database is not to be rebuilt, the new entities are inserted without any further checking, which might lead to unexpected results. Any non-empty value will do it (might change in the future.) Has precedence over according value in configuration file.
-
positional
arguments
¶ The file name of the output. Ignored in presence of a configuration file.
Configuration file¶
Currently, converting of more than one file is only possible using the configuration file. Moreover, the output format is global, hence, all specified input files will be converted into the same output format. For certain output and input formats some extra parameters are needed (or at least desirable), these can only be specified using the configuration file, see Input and output parameters for details. The configuration files use YAML syntax. Here is an example:
---
dir: /My/Data/
outdir: /My/Data/DB
flexq:
oddDivisionPenalty: 1.2
mismatchPenalty: 1.1
distPenalty: 7.3
spreadPenalty: 10.2
optimize: True
rhythmThreshold: 0.05
scaleFactor: .87
tolerance: .015
output:
format: midi
tempo: auto
transpose: -12
quantize: True
quantize_duration: True
bundles:
-
file: 'Miles*_PREFINAL.sv'
-
file: 'J*Impressions*_PREFINAL.sv'
-
query:
conditions:
solo_info:
- performer: 'Miles%'
- title: '~Impressions%'
- performer: '~John%'
display:
transcription_info: filename_sv
type: sv
srcdatabase:
type: sqlite3
path: esac.db
use: False
password: None
content-type: sv
version: 2
sinkdatabase:
type: sqlite3
path: solo.db
rebuild: True
password: None
release: 1.2
Explanation¶
The dir
and outdir
parameters have the same meaning as the corresponding commandline parameters. The output section contains parameter setting for the output.
format
has the same meaning as the commandline parameter. Possible values are mcsv1
, mcsv2
, esac
, meter
, notes
, midi
, database
. Except transpose
the
remaining output parameters are format specific, see Output parameters for more information.
Under the section bundles
an arbitrary long list of input files can be specified. There are two basic possibilities: Reading from files or from a database. Bundle starting with the
keyword file
are read from files as specified by the following value (use of wildcards is permitted), and bundles starting with query
are read from a source database as specified
in the corresponding section srcdatabase
. See Query block syntax for more information how to write database queries.
The block for srcdatabase
is used to read from a database. In this case, the flag use
must be set to True
, otherwise the section and any query
-bundles will be ignored.
If a source database is to be used, all file
sets in the files
sections are ignored and only the query
sections are considered. Likewise, if no srouce database is used
(parameter use
is set to False
), all query
entries are ignored. The query syntax is explained below.
The block for sinkdatabase
is used if data is to be written into a database. The fields are the same as the corresponding commandline parameters. If database
is the output format,
but not sink database is specified, melconv will fail.
The block for flexq
is used by the metrical annotation algorithm (Flex-Q) for reading SVFiles and can mostly be omitted, in which case reasonable default values will be used. However,
sometimes different settings might help in achieving a successful annotation for critical cases.
Query block syntax¶
A database query block consists of three fields: conditions
, display
and type
. Basically there are currently two types of data, EsAC and Jazzomat (SV) tunes. They differ in
the metadata provided for a melody (cf. SQLITE3 database formats). Hence, the possible type specifications in the type field are sv
and esac
.
The display
specifies the name to be used for the melody object, and must refer to a valid entry in the database. The syntax is <METADATA-TABLE>: <COLUMN-NAME>
.
For example, transcription_info
is a metadata table name in the SV-database format, which has a column named filename_sv
, which is the file name of the source SV project file for a
SV melody object.
A similar logic holds for the conditions
field. It must have a valid table name as primary key and a sub-ordinate list of conditions on specific column names in the format
<COLUMN-NAME>: [~]<CONDITION>
. If more than one primary key is defined, only the last one will be used.
The conditions are translated to SQL LIKE
statements, where the SQL-wildcard %
can be used (‘*’ will also work). These LIKE
-statements are conjuncted to a single
WHERE
-clause for a SELECT
query which will be executed on the database to retrieve a result set of melody objects. Negations are indicated by preceding the condition with
a ~
-Symbol, which will get translated to a NOT LIKE
clause.
Example:
-
query:
conditions:
solo_info:
- performer: 'Miles%'
- performer: 'John%'
- title: '~Impressions%'
display:
transcription_info: filename_sv
type: sv
This query will retrieve all melody objects where the performer
field in the table solo_info
is either starting with “Miles” or with “John”, but all songs which title starts with “Impressions”
will be excluded. The type is accordingly set to sv
, if it was esac
, the tables solo_info
and transcription_info
would be empty and the query would return an empty a result set.
Finally, for display purposes (e.g., in a feature results file), filename_sv
from table transcription_info
is used in this example for display purposes, but every other valid, non-empty
fields could have been used as well.
Note
If there is more than one query sections, which will result in an overlapping set of melody/display name combinations, i.e. with doublets, the command-line tools will only fetch each unique melody/display name combination once.
Input and output parameters¶
Since v1.1.4 of melconv (MeloSpySuite 1.4), the specification of input and output parameters was modified and extended.
Input parameters¶
MSCV1 reading¶
Example:
mcsv_reader:
requantize: False
max_div: 6
For reading MCSV1 files two parameters are now available, requantize
is a boolean parameter which will trigger a requantization with parameter max_div
, the maximal allowed division of beats.
Output parameters¶
MIDI wrinting¶
Example:
output:
format: midi
tempo: auto
transpose: -12
quantize: True
quantize_duration: True
ticks_per_beat: 192
volume: log_range
tempo
indicates the tempo (in BPM) to be used for writing the MIDI files. If set to auto
, the original tempo of the input files will be retained (if present, else a default tempo of 120 BMP is used).
quantize
is a boolean value indicating if the onset should be quantized according to the metrical information contained in the input file.
quantize_duration
is doing the same for duration values. If set to True
, durations are calculated as inter-onset intervals on the base of metrical information. If set to False
,
the original duration are used.
ticks_per_beat
enforces the specicife ticks per beeat value in the output
volume
is an partly experimental feature that applies only to solos from the Weimar Jazz Database for non constant values. This parameter specfies the mapping of loudness values (if available)
to MIDI velocity. Available options are: log_range
, log_fixed
, linear
or a integer value between 0 and 127. In the last case (default with value 100), a constant velocity of the specified
value will be used.
Lilypond writing¶
Example:
output:
format: lilypond
tempo: auto
transpose: 12
upbeat: True
clef: bass
For conveting to Lilypond files, four parameters are available.
tempo
will set the tempo indication to the specified numeric value. If set to auto
(default), the tempo of the original source will be used (if available).
transpose
allows transposing the whole score the specified amount of semitones.
upbeat
(True
or False
) will enforce using upbeats instead of full bars with pauses (does not work with WJazzD solos).
The value of clef
will be used in the output file (accoridngt to Lilypond syntax), if set to auto
, the clef will be determined automatically.