| import { SpessaSynthInfo } from "./loggin.js"; |
| import { consoleColors } from "./other.js"; |
| import { DEFAULT_PERCUSSION } from "../synthetizer/synth_constants.js"; |
|
|
| export const XG_SFX_VOICE = 64; |
|
|
| const GM2_DEFAULT_BANK = 121; |
|
|
| |
| |
| |
| |
| export function getDefaultBank(sys) |
| { |
| return sys === "gm2" ? GM2_DEFAULT_BANK : 0; |
| } |
|
|
| |
| |
| |
| |
| export function isXGDrums(bankNr) |
| { |
| return bankNr === 120 || bankNr === 126 || bankNr === 127; |
| } |
|
|
| |
| |
| |
| |
| export function isValidXGMSB(bank) |
| { |
| return isXGDrums(bank) || bank === XG_SFX_VOICE || bank === GM2_DEFAULT_BANK; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| export function parseBankSelect(bankBefore, bank, system, isLSB, isDrums, channelNumber) |
| { |
| |
| let out = bankBefore; |
| let drumsStatus = 0; |
| if (isLSB) |
| { |
| if (isSystemXG(system)) |
| { |
| if (!isValidXGMSB(bank)) |
| { |
| out = bank; |
| } |
| } |
| else if (system === "gm2") |
| { |
| out = bank; |
| } |
| } |
| else |
| { |
| let canSetBankSelect = true; |
| switch (system) |
| { |
| case "gm": |
| |
| SpessaSynthInfo( |
| `%cIgnoring the Bank Select (${bank}), as the synth is in GM mode.`, |
| consoleColors.info |
| ); |
| canSetBankSelect = false; |
| break; |
| |
| case "xg": |
| canSetBankSelect = isValidXGMSB(bank); |
| |
| if (isXGDrums(bank)) |
| { |
| drumsStatus = 2; |
| } |
| else |
| { |
| |
| if (channelNumber % 16 !== DEFAULT_PERCUSSION) |
| { |
| drumsStatus = 1; |
| } |
| } |
| break; |
| |
| case "gm2": |
| if (bank === 120) |
| { |
| drumsStatus = 2; |
| } |
| else |
| { |
| if (channelNumber % 16 !== DEFAULT_PERCUSSION) |
| { |
| drumsStatus = 1; |
| } |
| } |
| } |
| |
| if (isDrums) |
| { |
| |
| bank = 128; |
| } |
| if (bank === 128 && !isDrums) |
| { |
| |
| bank = bankBefore; |
| } |
| if (canSetBankSelect) |
| { |
| out = bank; |
| } |
| } |
| return { |
| newBank: out, |
| drumsStatus: drumsStatus |
| }; |
| } |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| export function chooseBank(msb, lsb, isDrums, isXG) |
| { |
| if (isXG) |
| { |
| if (isDrums) |
| { |
| if (isXGDrums(msb)) |
| { |
| return msb; |
| } |
| else |
| { |
| return 128; |
| } |
| } |
| else |
| { |
| |
| if (isValidXGMSB(msb)) |
| { |
| return msb; |
| } |
| |
| if (lsb === 0 && msb !== 0) |
| { |
| return msb; |
| } |
| if (!isValidXGMSB(lsb)) |
| { |
| return lsb; |
| } |
| return 0; |
| } |
| } |
| else |
| { |
| return isDrums ? 128 : msb; |
| } |
| } |
|
|
| |
| |
| |
| |
| export function isSystemXG(system) |
| { |
| return system === "gm2" || system === "xg"; |
| } |