NAME
Music::ToRoman - Convert notes and chords to Roman numeral notation
VERSION
version 0.2002
SYNOPSIS
use
Music::ToRoman;
my
$mtr
= Music::ToRoman->new(
scale_note
=>
'A'
,
scale_name
=>
'minor'
,
);
my
$roman
=
$mtr
->parse(
'Am'
);
# i (minor)
$roman
=
$mtr
->parse(
'Bdim'
);
# iio (diminished)
$roman
=
$mtr
->parse(
'B dim'
);
# ii o
$roman
=
$mtr
->parse(
'Bo'
);
# iio
$roman
=
$mtr
->parse(
'Bø'
);
# ii7b5 (half-diminished)
$roman
=
$mtr
->parse(
'Bb'
);
# bII (flat-two major)
$roman
=
$mtr
->parse(
'CM'
);
# III (major)
$roman
=
$mtr
->parse(
'C'
);
# III
$roman
=
$mtr
->parse(
'Cm9/G'
);
# iii9/VII (minor-nine with seven bass)
$roman
=
$mtr
->parse(
'Cm9/Bb'
);
# iii9/bii (minor-nine with flat-two bass)
$roman
=
$mtr
->parse(
'Dsus4'
);
# IVsus4 (suspended)
$roman
=
$mtr
->parse(
'D sus4'
);
# IV sus4
$roman
=
$mtr
->parse(
'D maj7'
);
# IV maj7 (major seventh)
$roman
=
$mtr
->parse(
'DMaj7'
);
# IVmaj7
$roman
=
$mtr
->parse(
'D△7'
);
# IVmaj7
$roman
=
$mtr
->parse(
'E7'
);
# V7 (dominant seventh)
$roman
=
$mtr
->parse(
'Fmin7'
);
# vimin7 (minor seventh)
$roman
=
$mtr
->parse(
'G+'
);
# VII+ (augmented)
$mtr
= Music::ToRoman->new(
scale_note
=>
'A'
,
scale_name
=>
'dorian'
,
chords
=> 0,
);
$roman
=
$mtr
->parse(
'A'
);
# i
$roman
=
$mtr
->parse(
'B'
);
# ii
$roman
=
$mtr
->parse(
'C'
);
# III
$roman
=
$mtr
->parse(
'D'
);
# IV
$roman
=
$mtr
->parse(
'E'
);
# v
$roman
=
$mtr
->parse(
'F#'
); # vi
$roman
=
$mtr
->parse(
'G'
);
# VII
$roman
=
$mtr
->parse(
'Amin7'
);
# imin7
$roman
=
$mtr
->parse(
'Bo'
);
# iio
$roman
=
$mtr
->parse(
'CMaj7'
);
# IIImaj7
$roman
=
$mtr
->parse(
'D7'
);
# IV7
$roman
=
$mtr
->parse(
'Em'
);
# v
my
@mode
=
$mtr
->get_scale_mode;
my
@chords
=
$mtr
->get_scale_chords;
DESCRIPTION
Music::ToRoman
converts named chords to Roman numeral notation. Also individual "chordless" notes may be converted given a diatonic mode scale_name.
ATTRIBUTES
scale_note
Note on which the scale is based. Default: C
This must be an uppercase letter from A-G
either alone or followed by #
or b
.
Note that the keys of A#
and D#
are better represented by Gb
and Eb
respectively, because the scales contain notes with double sharps. Double flat scales are not supported.
scale_name
Name of the scale. Default: major
The diatonic mode names supported are:
ionian / major
dorian
phrygian
lydian
mixolydian
aeolian / minor
locrian
major_tonic
Note on which the major
scale is based. Default: 'C'
This must be an uppercase letter from A-G
and followed by a #
or b
.
This attribute is required when the scale_note is set to a double-sharp, and the scale_name is not major
(or ionian
).
Again, double flat scales are not supported.
chords
Are we given chords to parse with major (M
) or minor (m
/o
/dim
/ø
) designations?
Default: 1
If this is set to 0
, single notes can be used to return the major/minor Roman numeral for the given diatonic mode scale_name.
verbose
Show the progress of the parse method.
Default: 0
METHODS
new
$mtr
= Music::ToRoman->new(
scale_note
=>
$note
,
scale_name
=>
$name
,
major_tonic
=>
$tonic
,
chords
=>
$chords
,
verbose
=>
$verbose
,
);
Create a new Music::ToRoman
object.
parse
$roman
=
$mtr
->parse(
$chord
);
Parse a note or chord name into a Roman numeral representation.
For instance, the Roman numeral representation for the aeolian
(or minor) mode is: i ii III iv v VI VII
- where the case indicates the major/minor status of the given chord.
This can be overridden by parsing say, B7
(B dominant seventh), thus producing II7
.
If a major/minor chord designation is not provided, M
major is assumed.
If the chords attribute is set to 0
, the scale_name is used to figure out the correct Roman numeral representation.
A diminished chord may be given as either o
or dim
. Half-diminished (m7b5
) chords can be given as ø
. A decoration of △
may be given for say the △7
major seventh chord.
Parsing a double flatted chord will only work in select cases.
get_scale_mode
@mode
=
$mtr
->get_scale_mode;
Return the Roman representation of the mode.
get_scale_degree
(
$degree
,
$type
) =
$mtr
->get_scale_degree(
$roman
);
Return the (Arabic) scale degree number and major
, minor
, diminished
chord types, given the Roman representation of the mode degree.
get_scale_chords
@mode
=
$mtr
->get_scale_chords;
Return the chords of the mode.
SEE ALSO
https://en.wikipedia.org/wiki/Roman_numeral_analysis
For example usage, check out the test files t/*-methods.t in this distribution. Also see eg/roman and eg/basslines in Music::BachChoralHarmony.
App::MusicTools vov
is the reverse of this module, and is significantly powerful.
THANK YOU
Dan Book (DBOOK) for the list rotation logic
AUTHOR
Gene Boggs <gene@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2018-2025 by Gene Boggs.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.