Skip to main content

Handle musical notes and their sounds in Python

Project description

munotes

musical-notes

PyPI version PyPI - Python Version


This library is for handling notes and chords in Python.

General Usage

Note

Note class. Handling note.

This class is used by inputting the note name and octave height, or MIDI note number at initialization.

import munotes as mn

note = mn.Note("A4")
print(note) # A4

note = mn.Note(69)
print(note) # A4
  • transpose()

Transpose the note.

note.transpose(2)
print(note) # B4
  • render()

Get the waveform of the note.

import matplotlib.pyplot as plt
y = note.render('sin')
plt.plot(y[:200])

image

squere and sawtooth are also sapported.

y = note.render('squere')
plt.plot(y[:200])

image

y = note.render('sawtooth')
plt.plot(y[:200])

image

Arbitrary waveforms are also supported.

y = note.render(lambda t: np.sin(t) + np.sin(2*t))
plt.plot(y[:200])

image

  • play()

Get IPython.display.Audio object.

image

Notes

Notes class. Handling multiple notes.

This class is used by inputting the notes at initialization.

notes = mn.Notes("C4", "E4", "G4")
print(notes) # C4 E4 G4

Methods are the same as Note. Ex: transpose(), render(), play().

Chord

Chord class. Handling chord.

This class generates a Notes object by inputting a chord name at initialization.

from munotes import Chord
chord = Chord("A#m7")
print(chord) # A#m7
print(chord.names) # ['A#', 'C#', 'F', 'G#']

Methods are the same as Note (and Notes).
Transpose is also supported by transpose()

chord.transpose(3)
print(chord) # C#m7
print(chord.names) # ['C#', 'E', 'G#', 'B']

Track

Track class. Handling multiple Notes as a sequence.

This class is used by inputting the notes with durations at initialization.

track = mn.Track([
    mn.Note("C4", duration=1),
    mn.Note("E4", duration=1),
    mn.Note("G4", duration=1)
])

Methods are the same as other classes.
But in methods that handling waveform (render(), play(), etc), generate the waveform as sequence of notes (like: C -> E -> G).

Stream

Stream class. Handling multiple tracks.

This class is used by inputting the tracks at initialization.

track = mn.Track([
    mn.Note("C4", duration=1),
    mn.Note("E4", duration=1),
    mn.Note("G4", duration=1)
])

chords = mn.Track([
    mn.Chord("C", duration=3),
])

stream = mn.Stream([melody, chords])

Methods are the same as other classes.

Version History

0.1.0 (2022-11-12, Beta-release)

  • Add Note class
  • Add Chord class

1.0.0 (2023-02-09)

  • Add Notes class
  • Add Track class
  • Add Stream class
  • Add Rest class
  • Add sin(), square(), sawtooth() methods
  • Add play() method
  • Add render() method

1.0.1 (2023-02-12)

  • Fix a bug that Rest could not be put into Track.

1.1.0 (2023-02-16)

  • Waveform parameters can be specified. Ex: note.sawtooth(width=0.5)
  • Support for inputting octave with note names. Ex: note = mn.Note("A4")
  • All supported chords can be seen in mn.chord_names
  • Arbitrary chords can be added

2.0.0 (2023-11-19)

  • Add Envelope class
  • Modify sec argument to duration
  • Add default parameters for rendering that can be specified in initialization
    • waveform
    • duration
    • unit
    • bpm
    • envelope
    • duty
    • width
    • amp
  • Remove function that change frequency of A4 directly
  • Modify input type of Track from Tuple[Note, float] to List[Note]
    • Note.duration is used to duration when rendering
  • Remove **kwargs in render() method

2.0.1 (2023-11-20)

  • Fix __add__ method of Notes class
  • Fix a bug that append() method of Notes class does not work
  • Modify __repr__ method

2.0.2 (2024-05-21, Latest)

  • Fix a bug that chord names in Track and Stream are not update when transposed

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

munotes-2.0.2.tar.gz (14.5 kB view details)

Uploaded Source

Built Distribution

munotes-2.0.2-py3-none-any.whl (17.4 kB view details)

Uploaded Python 3

File details

Details for the file munotes-2.0.2.tar.gz.

File metadata

  • Download URL: munotes-2.0.2.tar.gz
  • Upload date:
  • Size: 14.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.7

File hashes

Hashes for munotes-2.0.2.tar.gz
Algorithm Hash digest
SHA256 6e4e2d2398471cd409704ac706d779e471aa96be98037789e0f2d981256619d4
MD5 d226c8af2b40b875af573d1eae3908e6
BLAKE2b-256 df822e537e0d09af17782f9a61be95103e3ce554012fba16ef34b50593dc76f3

See more details on using hashes here.

File details

Details for the file munotes-2.0.2-py3-none-any.whl.

File metadata

  • Download URL: munotes-2.0.2-py3-none-any.whl
  • Upload date:
  • Size: 17.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.7

File hashes

Hashes for munotes-2.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b63134d5fa6de347498fef3a222f4ddf4e259fd68c0d4618925305898d275514
MD5 1fbd703fffe5b95193e65fea52ce7733
BLAKE2b-256 c3fefbdf801025024f09ccd0fc69ab34aa38972c9a0a8e83e921fb22a0ea2d72

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page