# -*- coding: utf-8 -*-

"""
音·创 v3 内置的 Midi 读取插件的数值常量
"""

"""
版权所有 © 2026 金羿、玉衡Alioth、偷吃不是Touch
Copyright © 2026 Eilles, YuhengAlioth, Touch

开源相关声明请见 仓库根目录下的 License.md
Terms & Conditions: License.md in the root directory
"""

# 睿乐组织 开发交流群 861684859
# Email TriM-Organization@hotmail.com
# 若需转载或借鉴 许可声明请查看仓库目录下的 License.md


from typing import Dict, List, Tuple

# Midi用对照表

MIDI_DEFAULT_VOLUME_VALUE: int = (
    64  # Midi默认音量，当用户未指定时，默认使用折中默认音量
)

MIDI_DEFAULT_PROGRAM_VALUE: int = (
    74  # 当 Midi 本身与用户皆未指定音色时，默认 Flute 长笛
)


# Midi乐器对MC乐器对照表

# “经典”对照表，由 Chalie Ping “查理平” 和 金羿ELS 提供

MM_CLASSIC_PITCHED_INSTRUMENT_TABLE: Dict[int, str] = {
    0: "note.harp",
    1: "note.harp",
    2: "note.pling",
    3: "note.harp",
    4: "note.pling",
    5: "note.pling",
    6: "note.harp",
    7: "note.harp",
    8: "note.snare",
    9: "note.harp",
    10: "note.didgeridoo",
    11: "note.harp",
    12: "note.xylophone",
    13: "note.chime",
    14: "note.harp",
    15: "note.harp",
    16: "note.bass",
    17: "note.harp",
    18: "note.harp",
    19: "note.harp",
    20: "note.harp",
    21: "note.harp",
    22: "note.harp",
    23: "note.guitar",
    24: "note.guitar",
    25: "note.guitar",
    26: "note.guitar",
    27: "note.guitar",
    28: "note.guitar",
    29: "note.guitar",
    30: "note.guitar",
    31: "note.bass",
    32: "note.bass",
    33: "note.bass",
    34: "note.bass",
    35: "note.bass",
    36: "note.bass",
    37: "note.bass",
    38: "note.bass",
    39: "note.bass",
    40: "note.harp",
    41: "note.harp",
    42: "note.harp",
    43: "note.harp",
    44: "note.iron_xylophone",
    45: "note.guitar",
    46: "note.harp",
    47: "note.harp",
    48: "note.guitar",
    49: "note.guitar",
    50: "note.bit",
    51: "note.bit",
    52: "note.harp",
    53: "note.harp",
    54: "note.bit",
    55: "note.flute",
    56: "note.flute",
    57: "note.flute",
    58: "note.flute",
    59: "note.flute",
    60: "note.flute",
    61: "note.flute",
    62: "note.flute",
    63: "note.flute",
    64: "note.bit",
    65: "note.bit",
    66: "note.bit",
    67: "note.bit",
    68: "note.flute",
    69: "note.harp",
    70: "note.harp",
    71: "note.flute",
    72: "note.flute",
    73: "note.flute",
    74: "note.harp",
    75: "note.flute",
    76: "note.harp",
    77: "note.harp",
    78: "note.harp",
    79: "note.harp",
    80: "note.bit",
    81: "note.bit",
    82: "note.bit",
    83: "note.bit",
    84: "note.bit",
    85: "note.bit",
    86: "note.bit",
    87: "note.bit",
    88: "note.bit",
    89: "note.bit",
    90: "note.bit",
    91: "note.bit",
    92: "note.bit",
    93: "note.bit",
    94: "note.bit",
    95: "note.bit",
    96: "note.bit",
    97: "note.bit",
    98: "note.bit",
    99: "note.bit",
    100: "note.bit",
    101: "note.bit",
    102: "note.bit",
    103: "note.bit",
    104: "note.harp",
    105: "note.banjo",
    106: "note.harp",
    107: "note.harp",
    108: "note.harp",
    109: "note.harp",
    110: "note.harp",
    111: "note.guitar",
    112: "note.harp",
    113: "note.bell",
    114: "note.harp",
    115: "note.cow_bell",
    116: "note.bd",
    117: "note.bass",
    118: "note.bit",
    119: "note.bd",
    120: "note.guitar",
    121: "note.harp",
    122: "note.harp",
    123: "note.harp",
    124: "note.harp",
    125: "note.hat",
    126: "note.bd",
    127: "note.snare",
}
"""“经典”乐音乐器对照表"""

MM_CLASSIC_PERCUSSION_INSTRUMENT_TABLE: Dict[int, str] = {
    34: "note.bd",
    35: "note.bd",
    36: "note.hat",
    37: "note.snare",
    38: "note.snare",
    39: "note.snare",
    40: "note.hat",
    41: "note.snare",
    42: "note.hat",
    43: "note.snare",
    44: "note.snare",
    45: "note.bell",
    46: "note.snare",
    47: "note.snare",
    48: "note.bell",
    49: "note.hat",
    50: "note.bell",
    51: "note.bell",
    52: "note.bell",
    53: "note.bell",
    54: "note.bell",
    55: "note.bell",
    56: "note.snare",
    57: "note.hat",
    58: "note.chime",
    59: "note.iron_xylophone",
    60: "note.bd",
    61: "note.bd",
    62: "note.xylophone",
    63: "note.xylophone",
    64: "note.xylophone",
    65: "note.hat",
    66: "note.bell",
    67: "note.bell",
    68: "note.hat",
    69: "note.hat",
    70: "note.snare",
    71: "note.flute",
    72: "note.hat",
    73: "note.hat",
    74: "note.xylophone",
    75: "note.hat",
    76: "note.hat",
    77: "note.xylophone",
    78: "note.xylophone",
    79: "note.bell",
    80: "note.bell",
}
"""“经典”打击乐器对照表"""

#  Touch “偷吃” 高准确率音色对照表

MM_TOUCH_PITCHED_INSTRUMENT_TABLE: Dict[int, str] = {
    0: "note.harp",
    1: "note.harp",
    2: "note.pling",
    3: "note.harp",
    4: "note.pling",
    5: "note.pling",
    6: "note.guitar",
    7: "note.guitar",
    8: "note.iron_xylophone",
    9: "note.bell",
    10: "note.iron_xylophone",
    11: "note.iron_xylophone",
    12: "note.iron_xylophone",
    13: "note.xylophone",
    14: "note.chime",
    15: "note.banjo",
    16: "note.xylophone",
    17: "note.iron_xylophone",
    18: "note.flute",
    19: "note.flute",
    20: "note.flute",
    21: "note.flute",
    22: "note.flute",
    23: "note.flute",
    24: "note.guitar",
    25: "note.guitar",
    26: "note.guitar",
    27: "note.guitar",
    28: "note.guitar",
    29: "note.guitar",
    30: "note.guitar",
    31: "note.bass",
    32: "note.bass",
    33: "note.bass",
    34: "note.bass",
    35: "note.bass",
    36: "note.bass",
    37: "note.bass",
    38: "note.bass",
    39: "note.bass",
    40: "note.flute",
    41: "note.flute",
    42: "note.flute",
    43: "note.bass",
    44: "note.flute",
    45: "note.iron_xylophone",
    46: "note.harp",
    47: "note.snare",
    48: "note.flute",
    49: "note.flute",
    50: "note.flute",
    51: "note.flute",
    52: "note.didgeridoo",
    53: "note.flute",
    54: "note.flute",
    55: "mob.zombie.wood",
    56: "note.flute",
    57: "note.flute",
    58: "note.flute",
    59: "note.flute",
    60: "note.flute",
    61: "note.flute",
    62: "note.flute",
    63: "note.flute",
    64: "note.bit",
    65: "note.bit",
    66: "note.bit",
    67: "note.bit",
    68: "note.flute",
    69: "note.bit",
    70: "note.banjo",
    71: "note.flute",
    72: "note.flute",
    73: "note.flute",
    74: "note.flute",
    75: "note.flute",
    76: "note.iron_xylophone",
    77: "note.iron_xylophone",
    78: "note.flute",
    79: "note.flute",
    80: "note.bit",
    81: "note.bit",
    82: "note.flute",
    83: "note.flute",
    84: "note.guitar",
    85: "note.flute",
    86: "note.bass",
    87: "note.bass",
    88: "note.bit",
    89: "note.flute",
    90: "note.bit",
    91: "note.flute",
    92: "note.bell",
    93: "note.guitar",
    94: "note.flute",
    95: "note.bit",
    96: "note.bit",
    97: "note.flute",
    98: "note.bell",
    99: "note.bit",
    100: "note.bit",
    101: "note.bit",
    102: "note.bit",
    103: "note.bit",
    104: "note.iron_xylophone",
    105: "note.banjo",
    106: "note.harp",
    107: "note.harp",
    108: "note.bell",
    109: "note.flute",
    110: "note.flute",
    111: "note.flute",
    112: "note.bell",
    113: "note.xylophone",
    114: "note.flute",
    115: "note.hat",
    116: "note.snare",
    117: "note.snare",
    118: "note.bd",
    119: "firework.blast",
    120: "note.guitar",
    121: "note.harp",
    122: "note.harp",
    123: "note.harp",
    124: "note.bit",
    125: "note.hat",
    126: "firework.twinkle",
    127: "mob.zombie.wood",
}
"""“偷吃”乐音乐器对照表"""

MM_TOUCH_PERCUSSION_INSTRUMENT_TABLE: Dict[int, str] = {
    34: "note.hat",
    35: "note.bd",
    36: "note.bd",
    37: "note.snare",
    38: "note.snare",
    39: "fire.ignite",
    40: "note.snare",
    41: "note.hat",
    42: "note.hat",
    43: "firework.blast",
    44: "note.hat",
    45: "note.snare",
    46: "note.snare",
    47: "note.snare",
    48: "note.bell",
    49: "note.hat",
    50: "note.bell",
    51: "note.bell",
    52: "note.bell",
    53: "note.bell",
    54: "note.bell",
    55: "note.bell",
    56: "note.snare",
    57: "note.hat",
    58: "note.chime",
    59: "note.iron_xylophone",
    60: "note.bd",
    61: "note.bd",
    62: "note.xylophone",
    63: "note.xylophone",
    64: "note.xylophone",
    65: "note.hat",
    66: "note.bell",
    67: "note.bell",
    68: "note.hat",
    69: "note.hat",
    70: "note.snare",
    71: "note.flute",
    72: "note.hat",
    73: "note.hat",
    74: "note.xylophone",
    75: "note.hat",
    76: "note.hat",
    77: "note.xylophone",
    78: "note.xylophone",
    79: "note.bell",
    80: "note.bell",
}
"""“偷吃”打击乐器对照表"""


# 金羿音色对照表，在偷吃的表的基础上修改而来

MM_EILLES_PITCHED_INSTRUMENT_TABLE: Dict[int, str] = (
    MM_TOUCH_PITCHED_INSTRUMENT_TABLE
    | {
        57: "note.trumpet",
        58: "note.trumpet_exposed",
        59: "note.trumpet_weathered",
        61: "note.trumpet",
        62: "note.trumpet_oxidized",
        63: "note.trumpet_weathered",
        64: "note.trumpet_oxidized",
        65: "note.trumpet",
        66: "note.trumpet_exposed",
        67: "note.trumpet_weathered",
        68: "note.trumpet_oxidized",
        69: "note.trumpet",
        70: "note.trumpet",
        71: "note.trumpet_exposed",
        72: "note.banjo",
    }
)
"""“金羿”乐音乐器对照表"""
MM_EILLES_PERCUSSION_INSTRUMENT_TABLE: Dict[int, str] = {}
"""“金羿”打击乐器对照表"""


# Dislink “断联” 音色对照表
# https://github.com/Dislink/midi2bdx/blob/main/index.html


MM_DISLINK_PITCHED_INSTRUMENT_TABLE: Dict[int, str] = {
    0: "note.harp",
    1: "note.harp",
    2: "note.pling",
    3: "note.harp",
    4: "note.harp",
    5: "note.harp",
    6: "note.harp",
    7: "note.harp",
    8: "note.iron_xylophone",
    9: "note.bell",
    10: "note.iron_xylophone",
    11: "note.iron_xylophone",
    12: "note.iron_xylophone",
    13: "note.iron_xylophone",
    14: "note.chime",
    15: "note.iron_xylophone",
    16: "note.harp",
    17: "note.harp",
    18: "note.harp",
    19: "note.harp",
    20: "note.harp",
    21: "note.harp",
    22: "note.harp",
    23: "note.harp",
    24: "note.guitar",
    25: "note.guitar",
    26: "note.guitar",
    27: "note.guitar",
    28: "note.guitar",
    29: "note.guitar",
    30: "note.guitar",
    31: "note.guitar",
    32: "note.bass",
    33: "note.bass",
    34: "note.bass",
    35: "note.bass",
    36: "note.bass",
    37: "note.bass",
    38: "note.bass",
    39: "note.bass",
    40: "note.harp",
    41: "note.flute",
    42: "note.flute",
    43: "note.flute",
    44: "note.flute",
    45: "note.harp",
    46: "note.harp",
    47: "note.harp",
    48: "note.harp",
    49: "note.harp",
    50: "note.harp",
    51: "note.harp",
    52: "note.harp",
    53: "note.harp",
    54: "note.harp",
    55: "note.harp",
    56: "note.harp",
    57: "note.harp",
    58: "note.harp",
    59: "note.harp",
    60: "note.harp",
    61: "note.harp",
    62: "note.harp",
    63: "note.harp",
    64: "note.harp",
    65: "note.harp",
    66: "note.harp",
    67: "note.harp",
    68: "note.harp",
    69: "note.harp",
    70: "note.harp",
    71: "note.harp",
    72: "note.flute",
    73: "note.flute",
    74: "note.flute",
    75: "note.flute",
    76: "note.flute",
    77: "note.flute",
    78: "note.flute",
    79: "note.flute",
    80: "note.bit",
    81: "note.bit",
    82: "note.harp",
    83: "note.harp",
    84: "note.harp",
    85: "note.harp",
    86: "note.harp",
    87: "note.harp",
    88: "note.harp",
    89: "note.harp",
    90: "note.harp",
    91: "note.harp",
    92: "note.harp",
    93: "note.harp",
    94: "note.harp",
    95: "note.harp",
    96: "note.harp",
    97: "note.harp",
    98: "note.harp",
    99: "note.harp",
    100: "note.harp",
    101: "note.harp",
    102: "note.harp",
    103: "note.harp",
    104: "note.harp",
    105: "note.banjo",
    106: "note.harp",
    107: "note.harp",
    108: "note.harp",
    109: "note.harp",
    110: "note.harp",
    111: "note.harp",
    112: "note.cow_bell",
    113: "note.harp",
    114: "note.harp",
    115: "note.bd",
    116: "note.bd",
    117: "note.bd",
    118: "note.bd",
    119: "note.harp",
    120: "note.harp",
    121: "note.harp",
    122: "note.harp",
    123: "note.harp",
    124: "note.harp",
    125: "note.harp",
    126: "note.harp",
    127: "note.harp",
}
"""“断联”乐音乐器对照表"""

MM_DISLINK_PERCUSSION_INSTRUMENT_TABLE: Dict[int, str] = {
    34: "note.bd",
    35: "note.bd",
    36: "note.snare",
    37: "note.snare",
    38: "note.bd",
    39: "note.snare",
    40: "note.bd",
    41: "note.hat",
    42: "note.bd",
    43: "note.hat",
    44: "note.bd",
    45: "note.hat",
    46: "note.bd",
    47: "note.bd",
    48: "note.bd",
    49: "note.bd",
    50: "note.bd",
    51: "note.bd",
    52: "note.bd",
    53: "note.bd",
    54: "note.bd",
    55: "note.cow_bell",
    56: "note.bd",
    57: "note.bd",
    58: "note.bd",
    59: "note.bd",
    60: "note.bd",
    61: "note.bd",
    62: "note.bd",
    63: "note.bd",
    64: "note.bd",
    65: "note.bd",
    66: "note.bd",
    67: "note.bd",
    68: "note.bd",
    69: "note.bd",
    70: "note.bd",
    71: "note.bd",
    72: "note.bd",
    73: "note.bd",
    74: "note.bd",
    75: "note.bd",
    76: "note.bd",
    77: "note.bd",
    78: "note.bd",
    79: "note.bd",
    80: "note.bd",
}
"""“断联”打击乐器对照表"""

# NoteBlockStudio “NBS”音色对照表
# https://github.com/OpenNBS/NoteBlockStudio/blob/main/scripts/midi_instruments/midi_instruments.gml
# 此表来自于 Commit 1ab5357c197872495197f27ad8374d711b2a5195
# 需要更新：https://github.com/OpenNBS/NoteBlockStudio/compare/main...development?diff=unified&w

MM_NBS_PITCHED_INSTRUMENT_TABLE: Dict[int, str] = {
    0: "note.harp",
    1: "note.pling",
    2: "note.harp",
    3: "note.pling",
    4: "note.harp",
    5: "note.harp",
    6: "note.guitar",
    7: "note.banjo",
    8: "note.bell",
    9: "note.bell",
    10: "note.bell",
    11: "note.iron_xylophone",
    12: "note.iron_xylophone",
    13: "note.xylophone",
    14: "note.bell",
    15: "note.iron_xylophone",
    16: "note.flute",
    17: "note.flute",
    18: "note.flute",
    19: "note.flute",
    20: "note.flute",
    21: "note.flute",
    22: "note.flute",
    23: "note.flute",
    24: "note.guitar",
    25: "note.guitar",
    26: "note.guitar",
    27: "note.bass",
    28: "note.guitar",
    29: "note.guitar",
    30: "note.bass",
    31: "note.bass",
    32: "note.bass",
    33: "note.guitar",
    34: "note.guitar",
    35: "note.bass",
    36: "note.pling",
    37: "note.flute",
    38: "note.flute",
    39: "note.flute",
    40: "note.flute",
    41: "note.flute",
    42: "note.didgeridoo",
    43: "note.flute",
    44: "note.didgeridoo",
    45: "note.flute",
    46: "note.flute",
    47: "note.flute",
    48: "note.flute",
    49: "note.flute",
    50: "note.flute",
    51: "note.flute",
    52: "note.flute",
    53: "note.flute",
    54: "note.flute",
    55: "note.flute",
    56: "note.flute",
    57: "note.flute",
    58: "note.flute",
    59: "note.flute",
    60: "note.bit",
    61: "note.flute",
    62: "note.flute",
    63: "note.flute",
    64: "note.flute",
    65: "note.guitar",
    66: "note.flute",
    67: "note.flute",
    68: "note.flute",
    69: "note.bell",
    70: "note.flute",
    71: "note.flute",
    72: "note.flute",
    73: "note.flute",
    74: "note.chime",
    75: "note.flute",
    76: "note.flute",
    77: "note.guitar",
    78: "note.pling",
    79: "note.flute",
    80: "note.guitar",
    81: "note.banjo",
    82: "note.banjo",
    83: "note.banjo",
    84: "note.guitar",
    85: "note.iron_xylophone",
    86: "note.flute",
    87: "note.flute",
    88: "note.chime",
    89: "note.cow_bell",
    90: "note.iron_xylophone",
    91: "note.xylophone",
    92: "note.basedrum",
    93: "note.snare",
    94: "note.snare",
    95: "note.basedrum",
    96: "note.snare",
    97: "note.hat",
    98: "note.snare",
    99: "note.hat",
    100: "note.basedrum",
    101: "note.hat",
    102: "note.basedrum",
    103: "note.hat",
    104: "note.basedrum",
    105: "note.snare",
    106: "note.snare",
    107: "note.snare",
    108: "note.cow_bell",
    109: "note.snare",
    110: "note.hat",
    111: "note.snare",
    112: "note.hat",
    113: "note.hat",
    114: "note.hat",
    115: "note.hat",
    116: "note.hat",
    117: "note.chime",
    118: "note.hat",
    119: "note.snare",
    120: "note.hat",
    121: "note.hat",
    122: "note.hat",
    123: "note.hat",
    124: "note.hat",
    125: "note.snare",
    126: "note.basedrum",
    127: "note.basedrum",
}
"""“NBS”乐音乐器对照表"""


MM_NBS_PERCUSSION_INSTRUMENT_TABLE: Dict[int, str] = {
    24: "note.bit",
    25: "note.snare",
    26: "note.hat",
    27: "note.snare",
    28: "note.snare",
    29: "note.hat",
    30: "note.hat",
    31: "note.hat",
    32: "note.hat",
    33: "note.hat",
    34: "note.chime",
    35: "note.basedrum",
    36: "note.basedrum",
    37: "note.hat",
    38: "note.snare",
    39: "note.hat",
    40: "note.snare",
    41: "note.basedrum",
    42: "note.snare",
    43: "note.basedrum",
    44: "note.snare",
    45: "note.basedrum",
    46: "note.basedrum",
    47: "note.snare",
    48: "note.snare",
    49: "note.snare",
    50: "note.snare",
    51: "note.snare",
    52: "note.snare",
    53: "note.hat",
    54: "note.snare",
    55: "note.snare",
    56: "note.cow_bell",
    57: "note.snare",
    58: "note.hat",
    59: "note.snare",
    60: "note.hat",
    61: "note.hat",
    62: "note.hat",
    63: "note.basedrum",
    64: "note.basedrum",
    65: "note.snare",
    66: "note.snare",
    67: "note.xylophone",
    68: "note.xylophone",
    69: "note.hat",
    70: "note.hat",
    71: "note.flute",
    72: "note.flute",
    73: "note.hat",
    74: "note.hat",
    75: "note.hat",
    76: "note.hat",
    77: "note.hat",
    78: "note.didgeridoo",
    79: "note.didgeridoo",
    80: "note.hat",
    81: "note.chime",
    82: "note.hat",
    83: "note.chime",
    84: "note.chime",
    85: "note.hat",
    86: "note.basedrum",
    87: "note.basedrum",
}
"""“NBS”打击乐器对照表"""


# 默认音色对照表
MM_DEFAULT_PITCHED_INSTRUMENT_TABLE = MM_EILLES_PITCHED_INSTRUMENT_TABLE
"""默认的乐音乐器音色对照表"""
MM_DEFAULT_PERCUSSION_INSTRUMENT_TABLE = MM_TOUCH_PERCUSSION_INSTRUMENT_TABLE
"""默认的打击乐器音色对照表"""
