vov - chord generation from roman numerals with sub-phrase support


  $ vov --outputtmpl='<%{chord}> \t% %{vov}' I IV/IV V7/IV IV V7 I
  <c e g>       % I
  <b dis f>     % IV/IV
  <c e g b>     % V7/IV
  <f a c>       % IV
  <g b d f>     % V7
  <c e g>       % I


Musical V/V utility, for arbitrary "chord X relative to Y as tonic in key Z" type calculations (V/V are called "applied dominants" among various other names). Any scale degree can be used, e.g. the phrase with a sub-phrase relative to IV "I IV/IV V/IV IV V I" says tonic (C), subdominant of the subdominant (B of F), dominant of the subdominant (C of F), and then subdominant (F), dominant (G) and back to the tonic.

The input format is based somewhat upon "Roman Numeral Analysis" and other musical sources, with some tweaks for Unix command line input needs. The output is somewhat suitable for input to lilypond, e.g. via vov ... | ly-fu - though can be adjusted by various options.


Supported input must be a roman numeral (I..VII and i..vii), possibly prefixed with # or b to sharpen or flatten the root pitch, possibly suffixed with + to augment or * to diminish or ** to double diminish, possibly suffixed with an integer specifying the chord factor or inversion:

  V5 V6 V64       # Dominant fifth and inversions (or also Va, Vb, Vc)
  V7 V65 V42 V2   # Dominant seventh and inversions (V7a, V7b, V7c, V7d)
  bII6            # Neapolitan 6th

Use / to delimit chord-X-of-Y, to arbitrary depth (depending on available memory, but going beyond 12 is silly):

  $ vov V/V/V/V/V/V/V/V/V/V/V/V/V
  g b d


This program currently supports the following command line switches:

--factor=positive odd integer

Specify default chord factor (odd integer between 1 for just the fundamental and 13 for thirteenth chords, inclusive). Default is to generate 5th chords; 7 would get seventh chords.

  $ vov --factor=7 II V I
  d fis a c
  g b d f
  c e g b
--flats | --noflats

Use flats instead of sharps in the output note names. Prefix with no to disable flats, in the event an alias has set them on by default.


Displays help and exits program.


List available named scale modes and then exit. Used by ZSH compdef script. The scales listed are a subset of what Music::Scales offers.


Use minor mode (default is major).


Specify named scale mode instead of using --intervals. Some modes can be listed with the --listmodes option; see Music::Scales for the complete list. Only ascending versions of scales are available at this time.


Ignore VII vs. vii vs. vii* distinctions in input and use the intervals implied by the mode. However, a bII would still lower the root.


Specify a custom output template. Supported macros include chord and vov to specify the notes of the chord, and the chord name as specified on the command line. For example:

  --outputtmpl='<%{chord}> \t% %{vov}'

Emit raw pitch numbers instead of note names.

--transpose=pitch or note

Value by which to transpose the output by (integer) or to (note name).


A ZSH completion script is available in the zsh-compdef/ directory of the App::MusicTools distribution. Install this to a $fpath directory.


Lots, probably. In particular, diminished chords stay diminished (they follow the underlying mode, not the desired quality of the chord), even if one specifies VII for major or II for minor. Fixing this would be annoying, as the best way would involve a rewrite of the code.

If the bug is in the latest version, send a report to the author. Patches that fix problems or add new features are welcome.



Jeremy Mates


Copyright (C) 2012-2013,2015 by Jeremy Mates

This module is free software; you can redistribute it and/or modify it under the Artistic License (2.0).