sheetmusic

Functions to be loaded by the Gnumeric Sheetmusic plugin


License
Other
Install
pip install sheetmusic==0.0.4

Documentation

Compose music in your spreadsheet.

How to
========

Installing
---------------
Install lilypond, fluidsynth, gnumeric, maybe something else. Then ::

    pip2 install sheetmusic
    sheetmusic-installer
    gnumeric

Sheetmusic is a Gnumeric plugin. The first time you use it, you might
need to enable the plugin; go to the "Tools" menu, click "Plug-ins...",
and then make sure that "Sheetmusic" is checked.

How to use
-----------------
Sheetmusic is a bunch of spreadsheet functions that manipulate notes.
These notes must be written in scientific notation; for example, middle
C is written as "C4".

Some functions return more than one output cell (like chords).
To run spreadsheet functions with multiple output cells, hit control + enter rather than just enter.

To play the music, run ::

    import sheetmusic
    sheetmusic.init()
    sheetmusic.play('B2:C2')
    sheetmusic.play('J1:M33', 'A', 4, 4, 200) # to change tempo

Function reference
---------------------------
Sheetmusic provides the following functions inside the Spreadsheet.

Chords and arpeggios::

    I7_arpeggio(base note)
    I7_chord(base note)
    II7_arpeggio(base note)
    II7_chord(base note)
    III7_arpeggio(base note)
    III7_chord(base note)
    III_arpeggio(base note)
    III_chord(base note)
    II_arpeggio(base note)
    II_chord(base note)
    IV7_arpeggio(base note)
    IV7_chord(base note)
    IV_arpeggio(base note)
    IV_chord(base note)
    I_arpeggio(base note)
    I_chord(base note)
    V7_arpeggio(base note)
    V7_chord(base note)
    VI7_arpeggio(base note)
    VI7_chord(base note)
    VII7_arpeggio(base note)
    VII7_chord(base note)
    VII_arpeggio(base note)
    VII_chord(base note)
    VI_arpeggio(base note)
    VI_chord(base note)
    V_arpeggio(base note)
    V_chord(base note)
    augmented_major_seventh_arpeggio(base note)
    augmented_major_seventh_chord(base note)
    augmented_minor_seventh_arpeggio(base note)
    augmented_minor_seventh_chord(base note)
    augmented_triad_arpeggio(base note)
    augmented_triad_chord(base note)
    diminished_seventh_arpeggio(base note)
    diminished_seventh_chord(base note)
    diminished_triad_arpeggio(base note)
    diminished_triad_chord(base note)
    dominant7_arpeggio(base note)
    dominant7_chord(base note)
    dominant_arpeggio(base note)
    dominant_chord(base note)
    dominant_flat_five_arpeggio(base note)
    dominant_flat_five_chord(base note)
    dominant_flat_ninth_arpeggio(base note)
    dominant_flat_ninth_chord(base note)
    dominant_ninth_arpeggio(base note)
    dominant_ninth_chord(base note)
    dominant_seventh_arpeggio(base note)
    dominant_seventh_chord(base note)
    dominant_sharp_ninth_arpeggio(base note)
    dominant_sharp_ninth_chord(base note)
    dominant_sixth_arpeggio(base note)
    dominant_sixth_chord(base note)
    dominant_thirteenth_arpeggio(base note)
    dominant_thirteenth_chord(base note)
    eleventh_arpeggio(base note)
    eleventh_chord(base note)
    first_inversion_arpeggio(base note)
    first_inversion_chord(base note)
    half_diminished_seventh_arpeggio(base note)
    half_diminished_seventh_chord(base note)
    hendrix_chord_arpeggio(base note)
    hendrix_chord_chord(base note)
    lydian_dominant_seventh_arpeggio(base note)
    lydian_dominant_seventh_chord(base note)
    major_ninth_arpeggio(base note)
    major_ninth_chord(base note)
    major_seventh_arpeggio(base note)
    major_seventh_chord(base note)
    major_sixth_arpeggio(base note)
    major_sixth_chord(base note)
    major_thirteenth_arpeggio(base note)
    major_thirteenth_chord(base note)
    major_triad_arpeggio(base note)
    major_triad_chord(base note)
    mediant7_arpeggio(base note)
    mediant7_chord(base note)
    mediant_arpeggio(base note)
    mediant_chord(base note)
    minor_eleventh_arpeggio(base note)
    minor_eleventh_chord(base note)
    minor_major_seventh_arpeggio(base note)
    minor_major_seventh_chord(base note)
    minor_ninth_arpeggio(base note)
    minor_ninth_chord(base note)
    minor_seventh_arpeggio(base note)
    minor_seventh_chord(base note)
    minor_seventh_flat_five_arpeggio(base note)
    minor_seventh_flat_five_chord(base note)
    minor_sixth_arpeggio(base note)
    minor_sixth_chord(base note)
    minor_thirteenth_arpeggio(base note)
    minor_thirteenth_chord(base note)
    minor_triad_arpeggio(base note)
    minor_triad_chord(base note)
    second_inversion_arpeggio(base note)
    second_inversion_chord(base note)
    seventh_arpeggio(base note)
    seventh_chord(base note)
    sixth_ninth_arpeggio(base note)
    sixth_ninth_chord(base note)
    subdominant7_arpeggio(base note)
    subdominant7_chord(base note)
    subdominant_arpeggio(base note)
    subdominant_chord(base note)
    submediant7_arpeggio(base note)
    submediant7_chord(base note)
    submediant_arpeggio(base note)
    submediant_chord(base note)
    subtonic7_arpeggio(base note)
    subtonic7_chord(base note)
    subtonic_arpeggio(base note)
    subtonic_chord(base note)
    supertonic7_arpeggio(base note)
    supertonic7_chord(base note)
    supertonic_arpeggio(base note)
    supertonic_chord(base note)
    suspended_fourth_ninth_arpeggio(base note)
    suspended_fourth_ninth_chord(base note)
    suspended_fourth_triad_arpeggio(base note)
    suspended_fourth_triad_chord(base note)
    suspended_second_triad_arpeggio(base note)
    suspended_second_triad_chord(base note)
    suspended_seventh_arpeggio(base note)
    suspended_seventh_chord(base note)
    suspended_triad_arpeggio(base note)
    suspended_triad_chord(base note)
    third_inversion_arpeggio(base note)
    third_inversion_chord(base note)
    tonic7_arpeggio(base note)
    tonic7_chord(base note)
    tonic_arpeggio(base note)
    tonic_chord(base note)
    triad_arpeggio(base note)
    triad_chord(base note)

Scales::

    aeolian_scale(base note)
    chromatic_scale(base note)
    diatonic_scale(base note)
    diminished_scale(base note)
    dorian_scale(base note)
    harmonic_minor_scale(base note)
    ionian_scale(base note)
    locrian_scale(base note)
    lydian_scale(base note)
    melodic_minor_scale(base note)
    mixolydian_scale(base note)
    natural_minor_scale(base note)
    phrygian_scale(base note)
    whole_note_scale(base note)

Intervals::

    unison_interval(base note, key)
    major_unison_interval(base note)
    minor_unison_interval(base note)
    augmented_unison_interval(base note)
    second_interval(base note, key)
    major_second_interval(base note)
    minor_second_interval(base note)
    third_interval(base note, key)
    major_third_interval(base note)
    minor_third_interval(base note)
    fourth_interval(base note, key)
    major_fourth_interval(base note)
    minor_fourth_interval(base note)
    perfect_fourth_interval(base note)
    fifth_interval(base note, key)
    major_fifth_interval(base note)
    minor_fifth_interval(base note)
    perfect_fifth_interval(base note)
    sixth_interval(base note, key)
    major_sixth_interval(base note)
    minor_sixth_interval(base note)
    seventh_interval(base note, key)
    major_seventh_interval(base note)
    minor_seventh_interval(base note)
    interval(major|minor, interval:[0-7], base note)
    octave_down(base note)
    octave_up(base note)

Other::

    from_integer(integer) -> scientific note
    progression(progression, base note) -> [[scientific note]]
    rep(range, each) -> another range
    to_integer(scientific note) -> integer

Bars
---------------------------
Sheetmusic ignores borders, but I recommend that you place
horizontal borders where you would place bars in ordinary
sheet music.

Slurred and tied notes
---------------------------
Notes are slurred within italicized regions.

Development
===============
Helpful links

* http://www.ha19.no/gnumeric/
* http://www.hep.by/gnu/gnumeric/sect-extending-python-writing.shtml
* https://help.gnome.org/users/gnumeric/stable/sect-extending-python.html.en
* http://www.bruunisejs.dk/PythonHacks/rstFiles/500%20Notes%20on%20spreadsheets%20etc.html

This requires Python 2 because mingus requires Python 2.

* http://code.google.com/p/mingus/wiki/tutorialExtraLilypond
* http://code.google.com/p/mingus/wiki/tutorialMidiFileOut