40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
|
|
import { Instrument } from './types';
|
|
|
|
export const INSTRUMENTS: Instrument[] = [
|
|
{ name: 'Kick' },
|
|
{ name: 'Snare' },
|
|
{ name: 'Hi-Hat' },
|
|
{ name: 'Open Hat' },
|
|
{ name: 'Ride' },
|
|
];
|
|
|
|
export const INITIAL_TEMPO = 76;
|
|
export const INITIAL_STEPS = 16;
|
|
export const MIN_TEMPO = 40;
|
|
export const MAX_TEMPO = 240;
|
|
export const MIN_STEPS = 4;
|
|
export const MAX_STEPS = 64;
|
|
|
|
// --- BASS CONSTANTS ---
|
|
|
|
const NOTE_NAMES = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'];
|
|
|
|
const getFrequency = (midiNote: number): number => {
|
|
// A4 (MIDI 69) is 440 Hz
|
|
return 440 * Math.pow(2, (midiNote - 69) / 12);
|
|
};
|
|
|
|
export const BASS_NOTES: { name: string; isSharp: boolean }[] = [];
|
|
export const NOTE_FREQ_MAP: { [key: string]: number } = {};
|
|
|
|
// Generate notes for 2 octaves, starting from C2 (MIDI 36) up to B3
|
|
for (let octave = 2; octave < 4; octave++) {
|
|
for (let i = 0; i < 12; i++) {
|
|
const noteName = `${NOTE_NAMES[i]}${octave}`;
|
|
const midiNote = 36 + (octave - 2) * 12 + i;
|
|
BASS_NOTES.push({ name: noteName, isSharp: NOTE_NAMES[i].includes('#') });
|
|
NOTE_FREQ_MAP[noteName] = getFrequency(midiNote);
|
|
}
|
|
}
|