Increased DEFAULT_TRACK_HEIGHT from 120px to 150px to properly fit: - Volume slider - Pan slider - Input level meter (when track is armed or recording) This ensures all controls have adequate vertical spacing and the input meter doesn't get cramped when it appears under the pan control. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
65 lines
1.3 KiB
TypeScript
65 lines
1.3 KiB
TypeScript
/**
|
|
* Multi-track types and interfaces
|
|
*/
|
|
|
|
import type { EffectChain } from '@/lib/audio/effects/chain';
|
|
import type { Selection } from './selection';
|
|
|
|
export interface Track {
|
|
id: string;
|
|
name: string;
|
|
color: string;
|
|
height: number;
|
|
audioBuffer: AudioBuffer | null;
|
|
|
|
// Track controls
|
|
volume: number; // 0-1
|
|
pan: number; // -1 (left) to 1 (right)
|
|
mute: boolean;
|
|
solo: boolean;
|
|
recordEnabled: boolean;
|
|
|
|
// Effects
|
|
effectChain: EffectChain;
|
|
|
|
// UI state
|
|
collapsed: boolean;
|
|
selected: boolean;
|
|
|
|
// Selection (for editing operations)
|
|
selection: Selection | null;
|
|
}
|
|
|
|
export interface TrackState {
|
|
tracks: Track[];
|
|
selectedTrackId: string | null;
|
|
soloedTracks: Set<string>;
|
|
}
|
|
|
|
export type TrackColor =
|
|
| 'red'
|
|
| 'orange'
|
|
| 'yellow'
|
|
| 'green'
|
|
| 'blue'
|
|
| 'indigo'
|
|
| 'purple'
|
|
| 'pink'
|
|
| 'gray';
|
|
|
|
export const TRACK_COLORS: Record<TrackColor, string> = {
|
|
red: 'rgb(239, 68, 68)',
|
|
orange: 'rgb(249, 115, 22)',
|
|
yellow: 'rgb(234, 179, 8)',
|
|
green: 'rgb(34, 197, 94)',
|
|
blue: 'rgb(59, 130, 246)',
|
|
indigo: 'rgb(99, 102, 241)',
|
|
purple: 'rgb(168, 85, 247)',
|
|
pink: 'rgb(236, 72, 153)',
|
|
gray: 'rgb(156, 163, 175)',
|
|
};
|
|
|
|
export const DEFAULT_TRACK_HEIGHT = 150;
|
|
export const MIN_TRACK_HEIGHT = 60;
|
|
export const MAX_TRACK_HEIGHT = 300;
|