#! /usr/bin/env python3 # -*- coding: utf-8 -*- """ Copyright 2020, Nils Hilbricht, Germany ( https://www.hilbricht.net ) This file is part of the Laborejo Software Suite ( https://www.laborejo.org ), more specifically its template base application. The Template Base Application is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ """ This file handles various pitches and their conversions. """ import logging; logger = logging.getLogger(__name__); logger.info("import") #Third Party Modules #Template Modules #Our modules #https://www.midi.org/specifications-old/item/table-3-control-change-messages-data-bytes-2 ccList = """Bank Select Modulation Wheel or Lever Breath Controller Undefined Foot Controller Portamento Time Data Entry MSB Channel Volume Balance Undefined Pan Expression Controller Effect Control 1 Effect Control 2 Undefined Undefined General Purpose Controller 1 General Purpose Controller 2 General Purpose Controller 3 General Purpose Controller 4 Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined LSB for Control 0 (Bank Select) LSB for Control 1 (Modulation Wheel or Lever) LSB for Control 2 (Breath Controller) LSB for Control 3 (Undefined) LSB for Control 4 (Foot Controller) LSB for Control 5 (Portamento Time) LSB for Control 6 (Data Entry) LSB for Control 7 (Channel Volume, formerly Main Volume) LSB for Control 8 (Balance) LSB for Control 9 (Undefined) LSB for Control 10 (Pan) LSB for Control 11 (Expression Controller) LSB for Control 12 (Effect control 1) LSB for Control 13 (Effect control 2) LSB for Control 14 (Undefined) LSB for Control 15 (Undefined) LSB for Control 16 (General Purpose Controller 1) LSB for Control 17 (General Purpose Controller 2) LSB for Control 18 (General Purpose Controller 3) LSB for Control 19 (General Purpose Controller 4) LSB for Control 20 (Undefined) LSB for Control 21 (Undefined) LSB for Control 22 (Undefined) LSB for Control 23 (Undefined) LSB for Control 24 (Undefined) LSB for Control 25 (Undefined) LSB for Control 26 (Undefined) LSB for Control 27 (Undefined) LSB for Control 28 (Undefined) LSB for Control 29 (Undefined) LSB for Control 30 (Undefined) LSB for Control 31 (Undefined) Damper Pedal on/off (Sustain) ≤63 off, ≥64 on Portamento On/Off ≤63 off, ≥64 on Sostenuto On/Off ≤63 off, ≥64 on Soft Pedal On/Off ≤63 off, ≥64 on Legato Footswitch ≤63 Normal, ≥64 Legato Hold 2 ≤63 off, ≥64 on --- Sound Controller 1 (default: Sound Variation) 0-127 LSB Sound Controller 2 (default: Timbre/Harmonic Intens.) 0-127 LSB Sound Controller 3 (default: Release Time) 0-127 LSB Sound Controller 4 (default: Attack Time) 0-127 LSB Sound Controller 5 (default: Brightness) 0-127 LSB Sound Controller 6 (default: Decay Time - see MMA RP-021) 0-127 LSB Sound Controller 7 (default: Vibrato Rate - see MMA RP-021) 0-127 LSB Sound Controller 8 (default: Vibrato Depth - see MMA RP-021) 0-127 LSB Sound Controller 9 (default: Vibrato Delay - see MMA RP-021) 0-127 LSB Sound Controller 10 (default undefined - see MMA RP-021) 0-127 LSB General Purpose Controller 5 General Purpose Controller 6 General Purpose Controller 7 General Purpose Controller 8 Portamento Control Undefined Undefined Undefined High Resolution Velocity Prefix 0-127 LSB Undefined Undefined Effects 1 Depth (default: Reverb Send Level Effects 2 Depth (formerly Tremolo Depth) Effects 3 Depth (default: Chorus Send Level Effects 4 Depth (formerly Celeste [Detune] Depth) Effects 5 Depth (formerly Phaser Depth) Data Increment (Data Entry +1) Data Decrement (Data Entry -1) Non-Registered Parameter Number (NRPN) - LSB Non-Registered Parameter Number (NRPN) - MSB Registered Parameter Number (RPN) - LSB Registered Parameter Number (RPN) - MSB Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined Undefined [Channel Mode Message] All Sound Off [Channel Mode Message] Reset All Controllers [Channel Mode Message] Local Control On/Off [Channel Mode Message] All Notes Off [Channel Mode Message] Omni Mode Off (+ all notes off) [Channel Mode Message] Omni Mode On (+ all notes off) [Channel Mode Message] Mono Mode On (+ poly off, + all notes off) [Channel Mode Message] Poly Mode On (+ mono off, +all notes off)""".split("\n") enumeratedCCList = [str(i).zfill(3) + ": " + s for i,s in enumerate(ccList)] programList = [ "Acoustic Grand Piano", "Bright Acoustic Piano", "Electric Grand Piano", "Honky-tonk Piano", "Electric Piano 1", "Electric Piano 2", "Harpsichord", "Clavinet", "Celesta", "Glockenspiel", "Music Box", "Vibraphone", "Marimba", "Xylophone", "Tubular Bells", "Dulcimer", "Drawbar Organ", "Percussive Organ", "Rock Organ", "Church Organ", "Reed Organ", "Accordion", "Harmonica", "Tango Accordion", "Acoustic Guitar (nylon)", "Acoustic Guitar (steel)", "Electric Guitar (jazz)", "Electric Guitar (clean)", "Electric Guitar (muted)", "Overdriven Guitar", "Distortion Guitar", "Guitar harmonics", "Acoustic Bass", "Electric Bass (finger)", "Electric Bass (pick)", "Fretless Bass", "Slap Bass 1", "Slap Bass 2", "Synth Bass 1", "Synth Bass 2", "Violin", "Viola", "Cello", "Contrabass", "Tremolo Strings", "Pizzicato Strings", "Orchestral Harp", "Timpani", "String Ensemble 1", "String Ensemble 2", "Synth Strings 1", "Synth Strings 2", "Choir Aahs", "Voice Oohs", "Synth Voice", "Orchestra Hit", "Trumpet", "Trombone", "Tuba", "Muted Trumpet", "French Horn", "Brass Section", "Synth Brass 1", "Synth Brass 2", "Soprano Sax", "Alto Sax", "Tenor Sax", "Baritone Sax", "Oboe", "English Horn", "Bassoon", "Clarinet", "Piccolo", "Flute", "Recorder", "Pan Flute", "Blown Bottle", "Shakuhachi", "Whistle", "Ocarina", "Lead 1 (square)", "Lead 2 (sawtooth)", "Lead 3 (calliope)", "Lead 4 (chiff)", "Lead 5 (charang)", "Lead 6 (voice)", "Lead 7 (fifths)", "Lead 8 (bass + lead)", "Pad 1 (new age)", "Pad 2 (warm)", "Pad 3 (polysynth)", "Pad 4 (choir)", "Pad 5 (bowed)", "Pad 6 (metallic)", "Pad 7 (halo)", "Pad 8 (sweep)", "FX 1 (rain)", "FX 2 (soundtrack)", "FX 3 (crystal)", "FX 4 (atmosphere)", "FX 5 (brightness)", "FX 6 (goblins)", "FX 7 (echoes)", "FX 8 (sci-fi)", "Sitar", "Banjo", "Shamisen", "Koto", "Kalimba", "Bag pipe", "Fiddle", "Shanai", "Tinkle Bell", "Agogo", "Steel Drums", "Woodblock", "Taiko Drum", "Melodic Tom", "Synth Drum", "Reverse Cymbal", "Guitar Fret Noise", "Breath Noise", "Seashore", "Bird Tweet", "Telephone Ring", "Helicopter", "Applause", "Gunshot", ] enumeratedProgramList = [str(i).zfill(3) + ": " + s for i,s in enumerate(programList)]