Skip to content

carfaxad/python-midi-afx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

python-midi-afx

Python MIDI utils for music lessons

Consider using a virtual env midi and set settings.json

Usage

scales.py

MusicalBases Class

mb = MusicalBases(bemol=False)

Builds scales, scale modes, chords, and more

Arguments:

  • bemol bool - Default False for scales in # way, True for scales in b way
  • fix_octaves bool - Preserve natural regular scales order if True.

create\_mode method

create_mode(mode, note, octave=None)

Create mode with b if scale is minor else with #

Arguments:

  • mode str - jonico, dorico, frigio, lidio, mixolidio, eolico, locrio
  • note str - C, D, E, F, G, A, B
  • octave int - Octave in keyboard way

Returns:

  • List - octave in specified mode

Examples:

mb = MusicalBases(bemol=True)
mb.create_mode('dorico', 'C', 3)
# returns: ['C3', 'D3', 'Eb3', 'F3', 'G3', 'A3', 'Bb3', 'C4']

create\_chord method

create_chord(scale, mode='major', octave=4, num_notes=3)

Create chord with given scale

Arguments:

  • scale List - ['C', 'E', ...]
  • mode str='major' - major, minor, diminished, augmented
  • octave int=4 - Octave in keyboard way
  • num_notes int=3 - Number of containing notes

Returns:

  • List - Chord

Examples:

mb = MusicalBases()
mb.create_chord(mb.scales['B'], num_notes=4, octave=3)
# returns: ['B3', 'D#3', 'F#3', 'A3']

note_to_midi.py

PlayNotes Class

p = PlayNotes()

Play a list of notes

play method

play(notes, velocity=64, lapse=0)

Play an array of notes. Support sharp and bemol notation

Arguments:

  • notes List - ['C', 'A', ...]
  • velocity int - Volume (see mido specification)
  • lapse int - Sequential: Time between each note in array to create sequential sound
  • duration int - Chords: Time at the end of sounding all notes in the array to create chord like sound

Returns:

Sound (Midi Output)

Examples:

p = PlayNotes()
p.play(p.create_mode('lidio', 'A', 3), lapse=0.5)

Final example

from time import sleep

from scales import MusicalBases
from note_to_midi import PlayNotes

p = PlayNotes()
mb = MusicalBases()

p.play(mb.create_chord(mb.create_mode('eolico', 'F'), num_notes=4, octave=3), lapse=0.4)

p.play(mb.create_chord(mb.create_mode('eolico', 'A'), num_notes=3, octave=3), lapse=0.4)
p.play(mb.create_chord(mb.create_mode('eolico', 'A'), num_notes=4, octave=3), duration=0.4)

p.play(mb.create_chord(mb.create_mode('eolico', 'C'), num_notes=4, octave=4), lapse=0.4)

p.play(mb.create_chord(mb.create_mode('eolico', 'D'), num_notes=3, octave=4), lapse=0.4)
p.play(mb.create_chord(mb.create_mode('eolico', 'D'), num_notes=4, octave=4), duration=0.4)

p.play(mb.create_chord(mb.create_mode('eolico', 'F'), num_notes=4, octave=3), duration=1.6)
p.play(mb.create_chord(mb.create_mode('eolico', 'A'), num_notes=4, octave=3), duration=1.6)
p.play(mb.create_chord(mb.create_mode('eolico', 'C'), num_notes=4, octave=4), duration=1.6)
p.play(mb.create_chord(mb.create_mode('eolico', 'D'), num_notes=4, octave=4), duration=1.6)

p.play(mb.create_chord(mb.create_mode('locrio', 'F'), num_notes=4, octave=3), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('locrio', 'F'), num_notes=3, octave=3), lapse=0.266)
p.play(mb.create_chord(mb.create_mode('locrio', 'C'), num_notes=4, octave=4), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('locrio', 'C'), num_notes=3, octave=4), lapse=0.266)
p.play(mb.create_chord(mb.create_mode('locrio', 'D'), num_notes=4, octave=4), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('locrio', 'D'), num_notes=3, octave=4), lapse=0.266)
p.play(mb.create_chord(mb.create_mode('locrio', 'A'), num_notes=4, octave=5), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('locrio', 'A'), num_notes=3, octave=5), lapse=0.266)

p.play(mb.create_chord(mb.create_mode('jonico', 'F'), num_notes=4, octave=3), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('jonico', 'A'), num_notes=4, octave=3), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('jonico', 'C'), num_notes=4, octave=3), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('jonico', 'D'), num_notes=4, octave=3), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('mixolidio', 'F'), num_notes=4, octave=4), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('mixolidio', 'A'), num_notes=4, octave=4), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('mixolidio', 'C'), num_notes=4, octave=4), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('mixolidio', 'D'), num_notes=4, octave=4), lapse=0.2)

mb.fix_octaves = False
p.play(mb.create_chord(mb.create_mode('jonico', 'F'), num_notes=4, octave=3), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('jonico', 'A'), num_notes=4, octave=3), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('mixolidio', 'C'), num_notes=4, octave=4), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('mixolidio', 'D'), num_notes=4, octave=4), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('dorico', 'F'), num_notes=4, octave=4), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('dorico', 'A'), num_notes=4, octave=4), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('mixolidio', 'C'), num_notes=4, octave=4), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('mixolidio', 'D'), num_notes=4, octave=4), lapse=0.2)

mb.fix_octaves = True
p.play(mb.create_chord(mb.create_mode('jonico', 'F'), mode='augmented', num_notes=4, octave=4), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('jonico', 'F'), mode='major', num_notes=4, octave=4), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('jonico', 'F'), mode='minor', num_notes=4, octave=3), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('jonico', 'F'), mode='diminished', num_notes=4, octave=3), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('jonico', 'C'), mode='diminished', num_notes=4, octave=3), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('jonico', 'C'), mode='minor', num_notes=4, octave=3), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('jonico', 'A'), mode='augmented', num_notes=4, octave=4), lapse=0.2)
p.play(mb.create_chord(mb.create_mode('jonico', 'D'), mode='major', num_notes=4, octave=4), lapse=0.2, duration=3.2)

Thanks to

This README.md was partially created with https://github.com/NiklasRosenstein/pydoc-markdown/

Usage:

pydoc-markdown -m [YOUR CLASS] -I .

About

Python MIDI utils for music lessons

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages