import { DrumPattern, ChordProgression, Genre } from '@/types/audio'; // Genre-specific drum patterns export const drumPatterns: Record = { hiphop: [ { kick: [true, false, false, false, false, false, false, false, true, false, true, false, false, false, false, false], snare: [false, false, false, false, true, false, false, false, false, false, false, false, true, false, false, false], hihat: [true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false], openhat: [false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, true], }, { kick: [true, false, false, false, false, false, true, false, true, false, false, false, false, false, false, false], snare: [false, false, false, false, true, false, false, false, false, false, false, false, true, false, false, true], hihat: [true, true, true, false, true, true, true, false, true, true, true, false, true, true, true, false], openhat: [false, false, false, true, false, false, false, true, false, false, false, true, false, false, false, false], }, ], classical: [ { kick: [true, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false], snare: [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], hihat: [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], openhat: [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], }, { kick: [true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false], snare: [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], hihat: [true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false], openhat: [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], }, ], trap: [ { kick: [true, false, false, false, false, false, true, false, false, false, true, false, false, false, false, false], snare: [false, false, false, false, true, false, false, false, false, false, false, false, true, false, false, false], hihat: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true], openhat: [false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false], }, { kick: [true, false, false, true, false, false, true, false, false, false, true, false, false, true, false, false], snare: [false, false, false, false, true, false, false, false, false, false, false, false, true, false, false, true], hihat: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true], openhat: [false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, true], }, ], pop: [ { kick: [true, false, false, false, true, false, false, false, true, false, false, false, true, false, false, false], snare: [false, false, false, false, true, false, false, false, false, false, false, false, true, false, false, false], hihat: [true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false], openhat: [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true], }, { kick: [true, false, false, false, false, false, true, false, true, false, false, false, false, false, true, false], snare: [false, false, false, false, true, false, false, false, false, false, false, false, true, false, false, false], hihat: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true], openhat: [false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false], }, ], }; // Genre-specific chord progressions export const chordProgressions: Record = { hiphop: [ { name: 'Classic ii-V-I', chords: [ ['D3', 'F3', 'A3', 'C4'], ['G2', 'B2', 'D3', 'F3'], ['C3', 'E3', 'G3', 'B3'], ['C3', 'E3', 'G3', 'B3'], ], durations: ['2n', '2n', '2n', '2n'], }, { name: 'Minor Key Chill', chords: [ ['A2', 'C3', 'E3', 'G3'], ['D3', 'F3', 'A3', 'C4'], ['E2', 'G#2', 'B2', 'D3'], ['A2', 'C3', 'E3', 'G3'], ], durations: ['2n', '2n', '2n', '2n'], }, ], classical: [ { name: 'Romantic', chords: [ ['C3', 'E3', 'G3'], ['F3', 'A3', 'C4'], ['G3', 'B3', 'D4'], ['C3', 'E3', 'G3'], ], durations: ['1n', '1n', '1n', '1n'], }, { name: 'Baroque', chords: [ ['D3', 'F3', 'A3'], ['G2', 'B2', 'D3'], ['C3', 'E3', 'G3'], ['A2', 'C3', 'E3'], ], durations: ['1n', '1n', '1n', '1n'], }, ], trap: [ { name: 'Dark Minor', chords: [ ['A2', 'C3', 'E3'], ['F2', 'A2', 'C3'], ['G2', 'B2', 'D3'], ['E2', 'G#2', 'B2'], ], durations: ['2n', '2n', '2n', '2n'], }, { name: 'Eerie', chords: [ ['D3', 'F3', 'A3'], ['Bb2', 'D3', 'F3'], ['A2', 'C3', 'E3'], ['G2', 'Bb2', 'D3'], ], durations: ['2n', '2n', '2n', '2n'], }, ], pop: [ { name: 'Four Chord Pop', chords: [ ['C3', 'E3', 'G3'], ['G2', 'B2', 'D3'], ['A2', 'C3', 'E3'], ['F2', 'A2', 'C3'], ], durations: ['1n', '1n', '1n', '1n'], }, { name: 'Uplifting', chords: [ ['D3', 'F#3', 'A3'], ['A2', 'C#3', 'E3'], ['B2', 'D3', 'F#3'], ['G2', 'B2', 'D3'], ], durations: ['1n', '1n', '1n', '1n'], }, ], }; // Bass patterns by genre export const bassPatterns: Record = { hiphop: [ ['C2', null, null, null, 'C2', null, 'G1', null, 'C2', null, null, null, 'E2', null, null, null], ['A1', null, null, 'A1', null, null, 'G1', null, 'A1', null, null, null, 'E1', null, 'G1', null], ], classical: [ ['C2', null, null, null, 'G2', null, null, null, 'C2', null, null, null, 'G2', null, null, null], ['D2', null, null, null, 'A2', null, null, null, 'D2', null, null, null, 'A2', null, null, null], ], trap: [ ['C1', null, null, 'C1', null, null, 'C1', null, null, null, 'G1', null, null, 'C1', null, null], ['A0', null, null, 'A0', null, 'A0', null, null, 'A0', null, null, null, 'E1', null, 'A0', null], ], pop: [ ['C2', null, 'C2', null, 'G2', null, 'G2', null, 'A2', null, 'A2', null, 'F2', null, 'F2', null], ['D2', null, null, 'D2', 'A2', null, null, null, 'B2', null, null, 'B2', 'G2', null, null, null], ], }; // Brass melody patterns by genre export const brassPatterns: Record = { hiphop: [ ['C4', null, null, null, 'E4', null, null, null, 'G4', null, null, null, 'E4', null, null, null], [null, null, 'D4', null, null, null, 'F4', null, null, null, 'A4', null, null, null, 'G4', null], ], classical: [ ['G4', null, null, null, null, null, null, null, 'E4', null, null, null, null, null, null, null], ['C4', null, null, null, 'D4', null, null, null, 'E4', null, null, null, 'G4', null, null, null], ], trap: [ ['A3', null, null, null, null, null, null, null, 'C4', null, null, null, null, null, null, null], [null, null, null, null, 'E4', null, null, null, null, null, null, null, 'D4', null, null, null], ], pop: [ ['E4', null, null, null, 'G4', null, null, null, 'A4', null, null, null, 'G4', null, null, null], ['C4', null, 'D4', null, 'E4', null, 'G4', null, 'A4', null, 'G4', null, 'E4', null, 'D4', null], ], }; // Piano patterns by genre export const pianoPatterns: Record = { hiphop: [ [['C4', 'E4', 'G4'], null, null, null, ['D4', 'F4', 'A4'], null, null, null, ['E4', 'G4', 'B4'], null, null, null, ['D4', 'F4', 'A4'], null, null, null], [['A3', 'C4', 'E4'], null, ['A3', 'C4', 'E4'], null, null, null, ['G3', 'B3', 'D4'], null, ['G3', 'B3', 'D4'], null, null, null, ['F3', 'A3', 'C4'], null, null, null], ], classical: [ [['C4', 'E4', 'G4'], ['E4'], ['G4'], ['C5'], ['G4'], ['E4'], ['C4', 'E4', 'G4'], null, ['D4', 'F4', 'A4'], ['F4'], ['A4'], ['D5'], ['A4'], ['F4'], ['D4', 'F4', 'A4'], null], [['A3', 'C4', 'E4'], null, ['C4', 'E4'], null, ['A3', 'C4', 'E4'], null, ['C4', 'E4'], null, ['G3', 'B3', 'D4'], null, ['B3', 'D4'], null, ['G3', 'B3', 'D4'], null, null, null], ], trap: [ [['A3', 'C4', 'E4'], null, null, null, null, null, null, null, ['G3', 'Bb3', 'D4'], null, null, null, null, null, null, null], [['D4', 'F4', 'A4'], null, null, null, null, null, ['C4', 'E4', 'G4'], null, null, null, null, null, null, null, ['Bb3', 'D4', 'F4'], null], ], pop: [ [['C4', 'E4', 'G4'], null, ['C4', 'E4', 'G4'], null, ['G3', 'B3', 'D4'], null, ['G3', 'B3', 'D4'], null, ['A3', 'C4', 'E4'], null, ['A3', 'C4', 'E4'], null, ['F3', 'A3', 'C4'], null, ['F3', 'A3', 'C4'], null], [['D4', 'F#4', 'A4'], null, null, ['D4', 'F#4', 'A4'], ['A3', 'C#4', 'E4'], null, null, ['A3', 'C#4', 'E4'], ['B3', 'D4', 'F#4'], null, null, ['B3', 'D4', 'F#4'], ['G3', 'B3', 'D4'], null, null, null], ], }; export function getRandomPattern(genre: Genre): DrumPattern { const patterns = drumPatterns[genre]; return patterns[Math.floor(Math.random() * patterns.length)]; } export function getRandomProgression(genre: Genre): ChordProgression { const progressions = chordProgressions[genre]; return progressions[Math.floor(Math.random() * progressions.length)]; } export function getRandomBassPattern(genre: Genre): (string | null)[] { const patterns = bassPatterns[genre]; return patterns[Math.floor(Math.random() * patterns.length)]; } export function getRandomBrassPattern(genre: Genre): (string | null)[] { const patterns = brassPatterns[genre]; return patterns[Math.floor(Math.random() * patterns.length)]; } export function getRandomPianoPattern(genre: Genre): (string[] | null)[] { const patterns = pianoPatterns[genre]; return patterns[Math.floor(Math.random() * patterns.length)]; }