'use client'; import { Card, CardContent } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { Slider } from '@/components/ui/slider'; import { Label } from '@/components/ui/label'; import { LayerBox } from './LayerBox'; import { Visualizer } from './Visualizer'; import { useAudioEngine } from '@/hooks/useAudioEngine'; import { Play, Pause, Shuffle, Drum, Music, Cloud, Guitar, Waves, Piano, } from 'lucide-react'; import { Genre, GENRE_CONFIG, INSTRUMENT_OPTIONS } from '@/types/audio'; export function LofiGenerator() { const { state, currentStep, togglePlayback, generateNewBeat, setMasterVolume, setLayerVolume, toggleMute, setGenre, setDuration, setInstrument, setBpm, setSwing, } = useAudioEngine(); const genres: { value: Genre; label: string }[] = [ { value: 'hiphop', label: 'Hip Hop' }, { value: 'classical', label: 'Classical' }, { value: 'trap', label: 'Trap' }, { value: 'pop', label: 'Pop' }, ]; return (
{/* Modern Header */}

Beat Generator

Create custom beats across multiple genres

{/* Top Controls: Duration & Genre */}
setDuration(v)} min={1} max={10} step={1} className="flex-1" /> {state.duration} min
{/* Transport Controls */}
{/* Visualizer */} {/* Master Controls */}
{Math.round(state.volumes.master * 100)}%
setMasterVolume(v)} min={0} max={1} step={0.01} />
{state.bpm}
setBpm(v)} min={60} max={180} step={1} />
{Math.round(state.swing * 100)}%
setSwing(v)} min={0} max={0.5} step={0.01} />
{/* Instrument Layers */}

Instruments

} volume={state.volumes.drums} muted={state.muted.drums} instrument={state.instruments.drums} instrumentOptions={INSTRUMENT_OPTIONS.drums} onVolumeChange={(v) => setLayerVolume('drums', v)} onToggleMute={() => toggleMute('drums')} onInstrumentChange={(v) => setInstrument('drums', v)} accentColor="orange" /> } volume={state.volumes.bass} muted={state.muted.bass} instrument={state.instruments.bass} instrumentOptions={INSTRUMENT_OPTIONS.bass} onVolumeChange={(v) => setLayerVolume('bass', v)} onToggleMute={() => toggleMute('bass')} onInstrumentChange={(v) => setInstrument('bass', v)} accentColor="blue" /> } volume={state.volumes.piano} muted={state.muted.piano} instrument={state.instruments.piano} instrumentOptions={INSTRUMENT_OPTIONS.piano} onVolumeChange={(v) => setLayerVolume('piano', v)} onToggleMute={() => toggleMute('piano')} onInstrumentChange={(v) => setInstrument('piano', v)} accentColor="green" /> } volume={state.volumes.brass} muted={state.muted.brass} instrument={state.instruments.brass} instrumentOptions={INSTRUMENT_OPTIONS.brass} onVolumeChange={(v) => setLayerVolume('brass', v)} onToggleMute={() => toggleMute('brass')} onInstrumentChange={(v) => setInstrument('brass', v)} accentColor="yellow" /> } volume={state.volumes.chords} muted={state.muted.chords} instrument={state.instruments.chords} instrumentOptions={INSTRUMENT_OPTIONS.chords} onVolumeChange={(v) => setLayerVolume('chords', v)} onToggleMute={() => toggleMute('chords')} onInstrumentChange={(v) => setInstrument('chords', v)} accentColor="pink" /> } volume={state.volumes.ambient} muted={state.muted.ambient} instrument={state.instruments.ambient} instrumentOptions={INSTRUMENT_OPTIONS.ambient} onVolumeChange={(v) => setLayerVolume('ambient', v)} onToggleMute={() => toggleMute('ambient')} onInstrumentChange={(v) => setInstrument('ambient', v)} accentColor="purple" />
{/* Footer */}

Click play to initialize audio engine • Genre: {GENRE_CONFIG[state.genre].name}

); }