Spaces:
Sleeping
Sleeping
# Copyright 2022 The Magenta Authors. | |
# | |
# Licensed under the Apache License, Version 2.0 (the "License"); | |
# you may not use this file except in compliance with the License. | |
# You may obtain a copy of the License at | |
# | |
# http://www.apache.org/licenses/LICENSE-2.0 | |
# | |
# Unless required by applicable law or agreed to in writing, software | |
# distributed under the License is distributed on an "AS IS" BASIS, | |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
# See the License for the specific language governing permissions and | |
# limitations under the License. | |
"""Constants for music processing in Magenta.""" | |
# Meter-related constants. | |
DEFAULT_QUARTERS_PER_MINUTE = 120.0 | |
DEFAULT_STEPS_PER_BAR = 16 # 4/4 music sampled at 4 steps per quarter note. | |
DEFAULT_STEPS_PER_QUARTER = 4 | |
# Default absolute quantization. | |
DEFAULT_STEPS_PER_SECOND = 100 | |
# Standard pulses per quarter. | |
# https://en.wikipedia.org/wiki/Pulses_per_quarter_note | |
STANDARD_PPQ = 220 | |
# Special melody events. | |
NUM_SPECIAL_MELODY_EVENTS = 2 | |
MELODY_NOTE_OFF = -1 | |
MELODY_NO_EVENT = -2 | |
# Other melody-related constants. | |
MIN_MELODY_EVENT = -2 | |
MAX_MELODY_EVENT = 127 | |
MIN_MIDI_PITCH = 0 # Inclusive. | |
MAX_MIDI_PITCH = 127 # Inclusive. | |
NUM_MIDI_PITCHES = MAX_MIDI_PITCH - MIN_MIDI_PITCH + 1 | |
NOTES_PER_OCTAVE = 12 | |
# Velocity-related constants. | |
MIN_MIDI_VELOCITY = 1 # Inclusive. | |
MAX_MIDI_VELOCITY = 127 # Inclusive. | |
# Program-related constants. | |
MIN_MIDI_PROGRAM = 0 | |
MAX_MIDI_PROGRAM = 127 | |
# MIDI programs that typically sound unpitched. | |
UNPITCHED_PROGRAMS = ( | |
list(range(96, 104)) + list(range(112, 120)) + list(range(120, 128))) | |
# Chord symbol for "no chord". | |
NO_CHORD = 'N.C.' | |
# The indices of the pitch classes in a major scale. | |
MAJOR_SCALE = [0, 2, 4, 5, 7, 9, 11] | |
# NOTE_KEYS[note] = The major keys that note belongs to. | |
# ex. NOTE_KEYS[0] lists all the major keys that contain the note C, | |
# which are: | |
# [0, 1, 3, 5, 7, 8, 10] | |
# [C, C#, D#, F, G, G#, A#] | |
# | |
# 0 = C | |
# 1 = C# | |
# 2 = D | |
# 3 = D# | |
# 4 = E | |
# 5 = F | |
# 6 = F# | |
# 7 = G | |
# 8 = G# | |
# 9 = A | |
# 10 = A# | |
# 11 = B | |
# | |
# NOTE_KEYS can be generated using the code below, but is explicitly declared | |
# for readability: | |
# NOTE_KEYS = [[j for j in range(12) if (i - j) % 12 in MAJOR_SCALE] | |
# for i in range(12)] | |
NOTE_KEYS = [ | |
[0, 1, 3, 5, 7, 8, 10], | |
[1, 2, 4, 6, 8, 9, 11], | |
[0, 2, 3, 5, 7, 9, 10], | |
[1, 3, 4, 6, 8, 10, 11], | |
[0, 2, 4, 5, 7, 9, 11], | |
[0, 1, 3, 5, 6, 8, 10], | |
[1, 2, 4, 6, 7, 9, 11], | |
[0, 2, 3, 5, 7, 8, 10], | |
[1, 3, 4, 6, 8, 9, 11], | |
[0, 2, 4, 5, 7, 9, 10], | |
[1, 3, 5, 6, 8, 10, 11], | |
[0, 2, 4, 6, 7, 9, 11] | |
] | |