Track Class

The muspy.Track class is a container for music tracks. In MusPy, each track contains only one instrument.

Attributes

Description

Type

Default

program

MIDI program number

int (0-127)

0

is_drum

If it is a drum track

bool

False

name

Track name

str

notes

Musical notes

list of muspy.Note

[]

chords

Chords

list of muspy.Chord

[]

lyrics

Lyrics

list of muspy.Lyric

[]

annotations

Annotations

list of muspy.Annotation

[]

(MIDI program number is based on General MIDI specification; see here.)

class muspy.Track(program=0, is_drum=False, name=None, notes=None, chords=None, lyrics=None, annotations=None)[source]

A container for music track.

program

Program number, according to General MIDI specification [1]. Valid values are 0 to 127.

Type:

int, default: 0 (Acoustic Grand Piano)

is_drum

Whether it is a percussion track.

Type:

bool, default: False

name

Track name.

Type:

str, optional

notes

Musical notes.

Type:

list of muspy.Note, default: []

chords

Chords.

Type:

list of muspy.Chord, default: []

annotations

Annotations.

Type:

list of muspy.Annotation, default: []

lyrics

Lyrics.

Type:

list of muspy.Lyric, default: []

Note

Indexing a Track object returns the note at a certain index. That is, track[idx] returns track.notes[idx]. Length of a Track object is the number of notes. That is, len(track) returns len(track.notes).

References

adjust_time(func, attr=None, recursive=True)

Adjust the timing of time-stamped objects.

Parameters:
  • func (callable) – The function used to compute the new timing from the old timing, i.e., new_time = func(old_time).

  • attr (str, optional) – Attribute to adjust. Defaults to adjust all attributes.

  • recursive (bool, default: True) – Whether to apply recursively.

Return type:

Object itself.

append(obj)

Append an object to the corresponding list.

This will automatically determine the list attributes to append based on the type of the object.

Parameters:

obj – Object to append.

copy()

Return a shallow copy of the object.

This is equivalent to copy.copy(self)().

Return type:

Shallow copy of the object.

deepcopy()

Return a deep copy of the object.

This is equivalent to copy.deepcopy(self)()

Return type:

Deep copy of the object.

extend(other, deepcopy=False)

Extend the list(s) with another object or iterable.

Parameters:
  • other (muspy.ComplexBase or iterable) – If an object of the same type is given, extend the list attributes with the corresponding list attributes of the other object. If an iterable is given, call muspy.ComplexBase.append() for each item.

  • deepcopy (bool, default: False) – Whether to make deep copies of the appended objects.

Return type:

Object itself.

fix_type(attr=None, recursive=True)

Fix the types of attributes.

Parameters:
  • attr (str, optional) – Attribute to adjust. Defaults to adjust all attributes.

  • recursive (bool, default: True) – Whether to apply recursively.

Return type:

Object itself.

classmethod from_dict(dict_, strict=False, cast=False)

Return an instance constructed from a dictionary.

Instantiate an object whose attributes and the corresponding values are given as a dictionary.

Parameters:
  • dict (dict or mapping) – A dictionary that stores the attributes and their values as key-value pairs, e.g., {“attr1”: value1, “attr2”: value2}.

  • strict (bool, default: False) – Whether to raise errors for invalid input types.

  • cast (bool, default: False) – Whether to cast types.

Return type:

Constructed object.

is_valid(attr=None, recursive=True)

Return True if an attribute has a valid type and value.

This will recursively apply to an attribute’s attributes.

Parameters:
  • attr (str, optional) – Attribute to validate. Defaults to validate all attributes.

  • recursive (bool, default: True) – Whether to apply recursively.

Returns:

Whether the attribute has a valid type and value.

Return type:

bool

See also

muspy.Base.validate()

Raise an error if an attribute has an invalid type or value.

muspy.Base.is_valid_type()

Return True if an attribute is of a valid type.

is_valid_type(attr=None, recursive=True)

Return True if an attribute is of a valid type.

This will apply recursively to an attribute’s attributes.

Parameters:
  • attr (str, optional) – Attribute to validate. Defaults to validate all attributes.

  • recursive (bool, default: True) – Whether to apply recursively.

Returns:

Whether the attribute is of a valid type.

Return type:

bool

See also

muspy.Base.validate_type()

Raise an error if a certain attribute is of an invalid type.

muspy.Base.is_valid()

Return True if an attribute has a valid type and value.

pretty_str(skip_missing=True)

Return the attributes as a string in a YAML-like format.

Parameters:

skip_missing (bool, default: True) – Whether to skip attributes with value None or those that are empty lists.

Returns:

Stored data as a string in a YAML-like format.

Return type:

str

See also

muspy.Base.print()

Print the attributes in a YAML-like format.

print(skip_missing=True)

Print the attributes in a YAML-like format.

Parameters:

skip_missing (bool, default: True) – Whether to skip attributes with value None or those that are empty lists.

See also

muspy.Base.pretty_str()

Return the the attributes as a string in a YAML-like format.

remove_duplicate(attr=None, recursive=True)

Remove duplicate items from a list attribute.

Parameters:
  • attr (str, optional) – Attribute to check. Defaults to check all attributes.

  • recursive (bool, default: True) – Whether to apply recursively.

Return type:

Object itself.

remove_invalid(attr=None, recursive=True)

Remove invalid items from a list attribute.

Parameters:
  • attr (str, optional) – Attribute to validate. Defaults to validate all attributes.

  • recursive (bool, default: True) – Whether to apply recursively.

Return type:

Object itself.

sort(attr=None, recursive=True)

Sort a list attribute.

Parameters:
  • attr (str, optional) – Attribute to sort. Defaults to sort all attributes.

  • recursive (bool, default: True) – Whether to apply recursively.

Return type:

Object itself.

to_ordered_dict(skip_missing=True, deepcopy=True)

Return the object as an OrderedDict.

Return an ordered dictionary that stores the attributes and their values as key-value pairs.

Parameters:
  • skip_missing (bool, default: True) – Whether to skip attributes with value None or those that are empty lists.

  • deepcopy (bool, default: True) – Whether to make deep copies of the attributes.

Returns:

A dictionary that stores the attributes and their values as key-value pairs, e.g., {“attr1”: value1, “attr2”: value2}.

Return type:

OrderedDict

validate(attr=None, recursive=True)

Raise an error if an attribute has an invalid type or value.

This will apply recursively to an attribute’s attributes.

Parameters:
  • attr (str, optional) – Attribute to validate. Defaults to validate all attributes.

  • recursive (bool, default: True) – Whether to apply recursively.

Return type:

Object itself.

See also

muspy.Base.is_valid()

Return True if an attribute has a valid type and value.

muspy.Base.validate_type()

Raise an error if an attribute is of an invalid type.

validate_type(attr=None, recursive=True)

Raise an error if an attribute is of an invalid type.

This will apply recursively to an attribute’s attributes.

Parameters:
  • attr (str, optional) – Attribute to validate. Defaults to validate all attributes.

  • recursive (bool, default: True) – Whether to apply recursively.

Return type:

Object itself.

See also

muspy.Base.is_valid_type()

Return True if an attribute is of a valid type.

muspy.Base.validate()

Raise an error if an attribute has an invalid type or value.

get_end_time(is_sorted=False)[source]

Return the time of the last event.

This includes notes, chords, lyrics and annotations.

Parameters:

is_sorted (bool, default: False) – Whether all the list attributes are sorted.

clip(lower=0, upper=127)[source]

Clip the velocity of each note.

Parameters:
  • lower (int, default: 0) – Lower bound.

  • upper (int, default: 127) – Upper bound.

Return type:

Object itself.

transpose(semitone)[source]

Transpose the notes by a number of semitones.

Parameters:

semitone (int) – Number of semitones to transpose the notes. A positive value raises the pitches, while a negative value lowers the pitches.

Return type:

Object itself.

trim(end)[source]

Trim the track.

Parameters:

end (int) – End time, excluding (i.e, the max time will be end - 1).

Return type:

Object itself.