Source code for jdxi_editor.midi.data.drum.drum

"""Drum"""

from dataclasses import dataclass
from enum import Enum
from typing import Dict, Optional


[docs] class MuteGroup(Enum): """Drum pad mute groups"""
[docs] OFF = 0
[docs] GROUPS = range(1, 32) # Groups 1-31
[docs] class Note(Enum): """MIDI note numbers for drum pads"""
[docs] PAD_1 = 36 # C1
[docs] PAD_2 = 37 # C#1
[docs] PAD_3 = 38 # D1
[docs] PAD_4 = 39 # D#1
[docs] PAD_5 = 40 # E1
[docs] PAD_6 = 41 # F1
[docs] PAD_7 = 42 # F#1
[docs] PAD_8 = 43 # G1
[docs] PAD_9 = 44 # G#1
[docs] PAD_10 = 45 # A1
[docs] PAD_11 = 46 # A#1
[docs] PAD_12 = 47 # B1
[docs] PAD_13 = 48 # C2
[docs] PAD_14 = 49 # C#2
[docs] PAD_15 = 50 # D2
[docs] PAD_16 = 51 # D#2
[docs] class DrumPad: """Represents address single drum pad's settings""" # Parameter offsets within each pad
[docs] PARAM_OFFSET = 0x10 # Each pad takes 16 bytes of parameter space
# Parameter addresses within pad
[docs] WAVE = 0x00
[docs] LEVEL = 0x01
[docs] PAN = 0x02
[docs] MUTE_GROUP = 0x03
[docs] TUNE = 0x04
[docs] DECAY = 0x05
[docs] REVERB_SEND = 0x06
[docs] DELAY_SEND = 0x07
[docs] FX_SEND = 0x08
[docs] def __init__(self) -> None:
[docs] self.wave = 0
[docs] self.level = 100
[docs] self.pan = 64 # Center
[docs] self.mute_group = 0
[docs] self.tune = 0
[docs] self.decay = 64
[docs] self.reverb_send = 0
[docs] self.delay_send = 0
[docs] self.fx_send = 0
@dataclass
[docs] class DrumPadSettings: """Settings for address single drum pad"""
[docs] wave: int = 0
[docs] level: int = 100
[docs] pan: int = 64 # Center
[docs] tune: int = 0
[docs] decay: int = 64
[docs] mute_group: int = 0 # OFF
[docs] reverb_send: int = 0
[docs] delay_send: int = 0
[docs] fx_send: int = 0
@dataclass
[docs] class DrumKitPatch: """Complete drum kit patch data""" # Common parameters
[docs] level: int = 100
[docs] pan: int = 64 # Center
[docs] reverb_send: int = 0
[docs] delay_send: int = 0
[docs] fx_send: int = 0
# Individual pad settings
[docs] pads: Optional[Dict[int, DrumPadSettings]] = None
[docs] def __post_init__(self) -> None: """Initialize pad settings""" if self.pads is None: self.pads = {i: DrumPadSettings() for i in range(16)}
# SuperNATURAL drum kit presets