From fc84edfc59fa85d4dbb9334e158c2bd02e6a7987 Mon Sep 17 00:00:00 2001 From: Xiaohan-Tian <157918347+Xiaohan-Tian@users.noreply.github.com> Date: Thu, 9 Apr 2026 21:54:54 -0700 Subject: [PATCH 01/13] feat: add audio track support with WAV/MP3 playback and looping MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduce KGAudioTrack and KGAudioRegion as new track/region types alongside existing MIDI tracks. Users can import WAV, MP3, OGG, FLAC, and AAC files into audio tracks with full playback, looping, and solo/mute/volume support. New core models: - KGAudioTrack (extends KGTrack with TrackType.Wave) - KGAudioRegion (extends KGRegion with audio file reference) - KGAudioPlayerBus (Tone.Gain + ToneBufferSource-based playback) - KGAudioFileStorage (OPFS media/ directory for binary audio files) New commands: - AddAudioTrackCommand (create audio track with player bus) - ImportAudioCommand (import audio file, create region at playhead, auto-expand maxBars) Playback features: - Audio regions scheduled via Tone.Transport alongside MIDI events - Loop support with duration capping at loop boundaries - Resume safety offset to prevent ToneBufferSource timing misses - Cross-track buffer copy when moving audio regions between tracks - Proper buffer cleanup on track deletion and project switch UI changes: - Separate "+ MIDI" and "+ Audio" buttons in top-left spacer - Audio track shows upload button instead of instrument selector - FileImportModal reused for audio file drag-and-drop upload - Real waveform rendering on audio region canvas - Green color scheme for audio regions (vs blue for MIDI) - Pencil icon and resize handles hidden for audio regions - Cross-type region moves blocked (MIDI ↔ Audio) - Piano roll blocked for audio regions - Audio region deletion support Infrastructure: - Project structure version bumped to 4 (no-op migration) - class-transformer discriminators updated for new subtypes - RemoveTrackCommand updated to clean up audio player buses --- src/components/MainContent.css | 2 + src/components/MainContent.tsx | 18 +- src/components/track/Region.css | 22 ++ src/components/track/RegionItem.tsx | 137 ++++++-- src/components/track/Track.css | 2 +- src/components/track/TrackGridItem.tsx | 27 +- src/components/track/TrackGridPanel.tsx | 40 ++- src/components/track/TrackInfoItem.tsx | 63 +++- src/core/KGProject.ts | 4 +- src/core/audio-interface/KGAudioInterface.ts | 291 +++++++++++++++-- src/core/audio-interface/KGAudioPlayerBus.ts | 294 ++++++++++++++++++ src/core/commands/index.ts | 2 + .../commands/region/ImportAudioCommand.ts | 104 +++++++ .../commands/track/AddAudioTrackCommand.ts | 83 +++++ src/core/commands/track/RemoveTrackCommand.ts | 15 +- src/core/io/KGAudioFileStorage.ts | 72 +++++ .../project-upgrader/KGProjectUpgrader.ts | 5 + src/core/project-upgrader/upgradeToV4.ts | 17 + src/core/region/KGAudioRegion.ts | 73 +++++ src/core/track/KGAudioTrack.ts | 38 +++ src/core/track/KGTrack.ts | 2 + src/hooks/useRegionOperations.ts | 7 +- src/stores/projectStore.ts | 188 ++++++++++- 23 files changed, 1406 insertions(+), 100 deletions(-) create mode 100644 src/core/audio-interface/KGAudioPlayerBus.ts create mode 100644 src/core/commands/region/ImportAudioCommand.ts create mode 100644 src/core/commands/track/AddAudioTrackCommand.ts create mode 100644 src/core/io/KGAudioFileStorage.ts create mode 100644 src/core/project-upgrader/upgradeToV4.ts create mode 100644 src/core/region/KGAudioRegion.ts create mode 100644 src/core/track/KGAudioTrack.ts diff --git a/src/components/MainContent.css b/src/components/MainContent.css index 9dec725..31bc118 100644 --- a/src/components/MainContent.css +++ b/src/components/MainContent.css @@ -25,6 +25,8 @@ border-bottom: 1px solid #3a3a3a; border-right: 1px solid #3a3a3a; z-index: 1002; /* Higher than other elements to ensure it's always visible */ + display: flex; + flex-direction: row; } /* Offset spacer when instrument selection panel is visible on the left */ diff --git a/src/components/MainContent.tsx b/src/components/MainContent.tsx index f09f55f..c56e09c 100644 --- a/src/components/MainContent.tsx +++ b/src/components/MainContent.tsx @@ -5,6 +5,7 @@ import { useProjectStore } from '../stores/projectStore'; import { KGCore } from '../core/KGCore'; import { KGTrack } from '../core/track/KGTrack'; import { KGMidiRegion } from '../core/region/KGMidiRegion'; +import { KGAudioRegion } from '../core/region/KGAudioRegion'; import TrackInfoPanel from './track/TrackInfoPanel'; import TrackGridPanel from './track/TrackGridPanel'; import PianoRoll from './piano-roll/PianoRoll'; @@ -35,7 +36,8 @@ const MainContent: React.FC = ({ activeRegionId, setShowPianoRoll, setActiveRegionId, - addTrack + addTrack, + addAudioTrack } = useProjectStore(); // State to store regions @@ -130,7 +132,7 @@ const MainContent: React.FC = ({ // Iterate through all regions in the track track.getRegions().forEach(region => { - if (region instanceof KGMidiRegion) { + if (region instanceof KGMidiRegion || region instanceof KGAudioRegion) { // Calculate bar number and length from beats const beatsPerBar = timeSignature.numerator; const barNumber = Math.floor(region.getStartFromBeat() / beatsPerBar) + 1; @@ -432,6 +434,15 @@ const MainContent: React.FC = ({ // Handle explicit pencil action: select region and open piano roll const handleOpenPianoRoll = (regionId: string) => { + // Don't open piano roll for audio regions + const project = KGCore.instance().getCurrentProject(); + for (const track of project.getTracks()) { + const region = track.getRegions().find(r => r.getId() === regionId); + if (region && region.getCurrentType() === 'KGAudioRegion') { + return; + } + } + if (DEBUG_MODE.MAIN_CONTENT) { console.log(`Open piano roll via pencil for region: ${regionId}`); } @@ -691,7 +702,8 @@ const MainContent: React.FC = ({
{/* Top-left spacer */}
- + +
{/* Bar numbers at the top */} diff --git a/src/components/track/Region.css b/src/components/track/Region.css index c1c17d5..d9629dc 100644 --- a/src/components/track/Region.css +++ b/src/components/track/Region.css @@ -71,6 +71,28 @@ position: relative; /* Allow overlayed controls */ } +.region-content.audio-region-content { + background-color: #90EE90; /* Light green for audio regions */ +} + +/* Audio region overrides */ +.track-region.audio-region { + background-color: #3a6b4a; + border-color: #4a8b5a; +} + +.track-region.audio-region:hover { + box-shadow: 0 0 0 1px #6aab7a; +} + +.track-region.audio-region .region-header { + background-color: #4a8b5a; +} + +.track-region.audio-region:hover .region-header { + background-color: #5a9b6a; +} + /* Region pencil trigger inside content */ .region-pencil-btn { position: absolute; diff --git a/src/components/track/RegionItem.tsx b/src/components/track/RegionItem.tsx index 084e021..1526026 100644 --- a/src/components/track/RegionItem.tsx +++ b/src/components/track/RegionItem.tsx @@ -4,6 +4,7 @@ import { FaPencilAlt } from 'react-icons/fa'; import type { ResizeAction } from '../interfaces'; import { REGION_CONSTANTS, DEBUG_MODE } from '../../constants'; import { KGMidiRegion } from '../../core/region/KGMidiRegion'; +import { KGAudioRegion } from '../../core/region/KGAudioRegion'; import { useProjectStore } from '../../stores/projectStore'; import { KGMainContentState } from '../../core/state/KGMainContentState'; @@ -28,6 +29,9 @@ interface RegionItemProps { onOpenPianoRoll?: (regionId: string) => void; // MIDI region data for rendering notes midiRegion?: KGMidiRegion; + // Audio region data for rendering waveform + audioRegion?: KGAudioRegion; + audioBuffer?: AudioBuffer; } const RegionItem: React.FC = ({ @@ -45,7 +49,9 @@ const RegionItem: React.FC = ({ onDragEnd, onClick, onOpenPianoRoll, - midiRegion + midiRegion, + audioRegion, + audioBuffer }) => { // Get selection state and time signature from store const { selectedRegionIds, timeSignature } = useProjectStore(); @@ -204,6 +210,58 @@ const RegionItem: React.FC = ({ } }; + // Function to render audio waveform on canvas + const renderWaveformOnCanvas = () => { + if (!canvasRef.current || !regionContentRef.current || !audioBuffer) return; + + const canvas = canvasRef.current; + const ctx = canvas.getContext('2d'); + if (!ctx) return; + + const contentRect = regionContentRef.current.getBoundingClientRect(); + const width = contentRect.width; + const height = contentRect.height; + + canvas.width = width; + canvas.height = height; + + ctx.clearRect(0, 0, width, height); + + // Get channel data (use first channel) + const channelData = audioBuffer.getChannelData(0); + const samples = channelData.length; + + // Downsample to canvas width + const samplesPerPixel = Math.max(1, Math.floor(samples / width)); + const centerY = height / 2; + + ctx.strokeStyle = 'rgba(255, 255, 255, 0.7)'; + ctx.lineWidth = 1; + ctx.beginPath(); + + for (let x = 0; x < width; x++) { + const startSample = Math.floor(x * samplesPerPixel); + const endSample = Math.min(startSample + samplesPerPixel, samples); + + let min = 0; + let max = 0; + for (let i = startSample; i < endSample; i++) { + const val = channelData[i]; + if (val < min) min = val; + if (val > max) max = val; + } + + // Draw vertical line from min to max amplitude + const yMin = centerY - max * centerY; + const yMax = centerY - min * centerY; + + ctx.moveTo(x, yMin); + ctx.lineTo(x, yMax); + } + + ctx.stroke(); + }; + // Create a stable reference to track note changes const notesRef = useRef(''); const [noteUpdateTrigger, setNoteUpdateTrigger] = useState(0); @@ -226,15 +284,23 @@ const RegionItem: React.FC = ({ // Set up canvas when component mounts or updates useEffect(() => { - renderNotesOnCanvas(); - }, [midiRegion, timeSignature, id, noteUpdateTrigger]); + if (audioRegion && audioBuffer) { + renderWaveformOnCanvas(); + } else { + renderNotesOnCanvas(); + } + }, [midiRegion, audioRegion, audioBuffer, timeSignature, id, noteUpdateTrigger]); // Re-render canvas when region content size changes useEffect(() => { if (!regionContentRef.current) return; const resizeObserver = new ResizeObserver(() => { - renderNotesOnCanvas(); + if (audioRegion && audioBuffer) { + renderWaveformOnCanvas(); + } else { + renderNotesOnCanvas(); + } }); resizeObserver.observe(regionContentRef.current); @@ -244,7 +310,7 @@ const RegionItem: React.FC = ({ resizeObserver.unobserve(regionContentRef.current); } }; - }, [midiRegion, timeSignature]); + }, [midiRegion, audioRegion, audioBuffer, timeSignature]); // Handle mouse movement to detect edge proximity const handleMouseMove = (e: React.MouseEvent) => { @@ -259,6 +325,13 @@ const RegionItem: React.FC = ({ return; } + // Audio regions: move only, no resize + if (audioRegion) { + setCursor('grab'); + setResizeEdge('none'); + return; + } + const regionElement = e.currentTarget; const rect = regionElement.getBoundingClientRect(); @@ -453,7 +526,7 @@ const RegionItem: React.FC = ({ return (
= ({ data-is-dragging={isDragging} >
- {name} + {audioRegion ? audioRegion.getAudioFileName() : name}
-
- +
+ {!audioRegion && ( + + )}
diff --git a/src/components/track/Track.css b/src/components/track/Track.css index 67143bc..fe1d7c6 100644 --- a/src/components/track/Track.css +++ b/src/components/track/Track.css @@ -26,7 +26,7 @@ font-size: 12px; padding: 0; height: 100%; - width: 100%; + flex: 1; display: flex; align-items: center; justify-content: center; diff --git a/src/components/track/TrackGridItem.tsx b/src/components/track/TrackGridItem.tsx index ab29a17..96b8004 100644 --- a/src/components/track/TrackGridItem.tsx +++ b/src/components/track/TrackGridItem.tsx @@ -1,6 +1,8 @@ import React, { useEffect, useState, useRef } from 'react'; import { KGTrack } from '../../core/track/KGTrack'; import { KGMidiRegion } from '../../core/region/KGMidiRegion'; +import { KGAudioRegion } from '../../core/region/KGAudioRegion'; +import { KGAudioInterface } from '../../core/audio-interface/KGAudioInterface'; import RegionItem from './RegionItem'; import type { RegionUI, ResizeAction } from '../interfaces'; import { REGION_CONSTANTS, DEBUG_MODE } from '../../constants'; @@ -506,11 +508,22 @@ const TrackGridItem: React.FC = ({ > {/* Render regions for this track */} {trackRegions.map(region => { - // Find the corresponding KGMidiRegion in the track - const midiRegion = track.getRegions().find(r => r.getId() === region.id) as KGMidiRegion | undefined; - + // Find the corresponding region in the track + const coreRegion = track.getRegions().find(r => r.getId() === region.id); + const midiRegion = coreRegion?.getCurrentType() === 'KGMidiRegion' ? coreRegion as unknown as KGMidiRegion : undefined; + const audioRegion = coreRegion?.getCurrentType() === 'KGAudioRegion' ? coreRegion as unknown as KGAudioRegion : undefined; + + // Get audio buffer for waveform rendering + let audioBuffer: AudioBuffer | undefined; + if (audioRegion) { + audioBuffer = KGAudioInterface.instance().getAudioBuffer( + track.getId().toString(), + audioRegion.getAudioFileId() + ); + } + return ( - = ({ onDragEnd={handleRegionDragEnd} // Keep onClick for selection-only logic if needed by parent onClick={handleRegionClick} - // New explicit pencil action - onOpenPianoRoll={(regionId) => { + // New explicit pencil action — disabled for audio regions + onOpenPianoRoll={audioRegion ? undefined : (regionId) => { if (onOpenPianoRoll) { onOpenPianoRoll(regionId); } else if (onRegionClick) { @@ -536,6 +549,8 @@ const TrackGridItem: React.FC = ({ } }} midiRegion={midiRegion} + audioRegion={audioRegion} + audioBuffer={audioBuffer} /> ); })} diff --git a/src/components/track/TrackGridPanel.tsx b/src/components/track/TrackGridPanel.tsx index 50b104e..7045516 100644 --- a/src/components/track/TrackGridPanel.tsx +++ b/src/components/track/TrackGridPanel.tsx @@ -1,5 +1,5 @@ import React, { useRef } from 'react'; -import { KGTrack } from '../../core/track/KGTrack'; +import { KGTrack, TrackType } from '../../core/track/KGTrack'; import { KGMidiRegion } from '../../core/region/KGMidiRegion'; import TrackGridItem from './TrackGridItem'; import { Playhead } from '../common'; @@ -9,6 +9,8 @@ import { KGMainContentState } from '../../core/state/KGMainContentState'; import { isModifierKeyPressed } from '../../util/osUtil'; import { CreateRegionCommand, ResizeRegionCommand, MoveRegionCommand } from '../../core/commands'; import { KGCore } from '../../core/KGCore'; +import { KGAudioInterface } from '../../core/audio-interface/KGAudioInterface'; +import { KGAudioRegion } from '../../core/region/KGAudioRegion'; import { generateNewRegionName } from '../../util/miscUtil'; interface TrackGridPanelProps { @@ -64,7 +66,12 @@ const TrackGridPanel: React.FC = ({ // Get the track and its ID const track = tracks[trackIndex]; const trackId = track.getId().toString(); - + + // Don't allow manual region creation on audio tracks + if (track.getType() === TrackType.Wave) { + return; + } + if (DEBUG_MODE.TRACK_GRID_PANEL) { console.log(`Creating region on track ${trackIndex + 1}, bar ${barNumber}`); } @@ -238,7 +245,19 @@ const TrackGridPanel: React.FC = ({ // Get the target track const targetTrack = tracks[finalTrackIndex]; if (!targetTrack) return; - + + // Block cross-type region moves (MIDI <-> Audio) + const sourceTrack = tracks.find(t => { + return t.getRegions().some(r => r.getId() === regionId); + }); + if (sourceTrack && sourceTrack.getType() !== targetTrack.getType()) { + // Snap back — don't execute the move + if (DEBUG_MODE.TRACK_GRID_PANEL) { + console.log(`Blocked cross-type move: ${sourceTrack.getType()} region cannot move to ${targetTrack.getType()} track`); + } + return; + } + // Use command pattern to move the region try { const command = MoveRegionCommand.fromBarCoordinates( @@ -251,9 +270,22 @@ const TrackGridPanel: React.FC = ({ KGCore.instance().executeCommand(command); + // Copy audio buffer to target track if this is a cross-track audio region move + if (sourceTrack && targetTrack && sourceTrack.getId() !== targetTrack.getId()) { + const coreRegion = targetTrack.getRegions().find(r => r.getId() === regionId); + if (coreRegion?.getCurrentType() === 'KGAudioRegion') { + const audioRegion = coreRegion as unknown as KGAudioRegion; + KGAudioInterface.instance().copyAudioBufferBetweenTracks( + sourceTrack.getId().toString(), + targetTrack.getId().toString(), + audioRegion.getAudioFileId() + ); + } + } + if (DEBUG_MODE.TRACK_GRID_PANEL) { console.log(`Executed MoveRegionCommand: region ${regionId} moved using command pattern`); - + // Verify the command worked const movedRegion = command.getTargetRegion(); console.log(`Verified region: ${movedRegion ? 'found' : 'not found'}, startBeat=${movedRegion?.getStartFromBeat()}, trackId=${movedRegion?.getTrackId()}`); diff --git a/src/components/track/TrackInfoItem.tsx b/src/components/track/TrackInfoItem.tsx index c9feb2d..b97a603 100644 --- a/src/components/track/TrackInfoItem.tsx +++ b/src/components/track/TrackInfoItem.tsx @@ -1,10 +1,13 @@ import React, { useState, useRef, useEffect } from 'react'; import { KGTrack } from '../../core/track/KGTrack'; import { KGMidiTrack } from '../../core/track/KGMidiTrack'; +import { KGAudioTrack } from '../../core/track/KGAudioTrack'; import { useProjectStore } from '../../stores/projectStore'; import { TbPiano } from 'react-icons/tb'; import { TbSettings } from 'react-icons/tb'; +import { FaFileAudio } from 'react-icons/fa'; import KGDropdown from '../common/KGDropdown'; +import FileImportModal from '../common/FileImportModal'; import { FLUIDR3_INSTRUMENT_MAP } from '../../constants/generalMidiConstants'; import { DEBUG_MODE } from '../../constants/uiConstants'; import { KGAudioInterface } from '../../core/audio-interface/KGAudioInterface'; @@ -34,7 +37,7 @@ const TrackInfoItem: React.FC = ({ onDrop, onDragEnd }) => { - const { selectedTrackId, setSelectedTrack, removeTrack, toggleInstrumentSelectionForTrack, tracks: allTracks } = useProjectStore(); + const { selectedTrackId, setSelectedTrack, removeTrack, toggleInstrumentSelectionForTrack, importAudioToTrack, tracks: allTracks } = useProjectStore(); const isSelected = selectedTrackId === track.getId().toString(); // Inline instrument dropdown removed; use InstrumentSelection panel instead @@ -48,6 +51,7 @@ const TrackInfoItem: React.FC = ({ const [currentInstrument, setCurrentInstrument] = useState(getTrackInstrument()); const [showSettingsDropdown, setShowSettingsDropdown] = useState(false); + const [showAudioImportModal, setShowAudioImportModal] = useState(false); const settingsDropdownRef = useRef(null); const suppressDragRef = useRef(false); const [volume, setVolume] = useState(track.getVolume()); @@ -195,6 +199,8 @@ const TrackInfoItem: React.FC = ({ // Inline instrument change removed; handled by InstrumentSelection panel + const isAudioTrack = track instanceof KGAudioTrack; + // Handle piano button click const handlePianoButtonClick = (e: React.MouseEvent) => { e.stopPropagation(); @@ -204,6 +210,19 @@ const TrackInfoItem: React.FC = ({ toggleInstrumentSelectionForTrack(); }; + // Handle audio import button click + const handleAudioImportClick = (e: React.MouseEvent) => { + e.stopPropagation(); + setSelectedTrack(track.getId().toString()); + setShowAudioImportModal(true); + }; + + // Handle audio file import + const handleAudioFileImport = (file: File) => { + importAudioToTrack(track.getId().toString(), file); + setShowAudioImportModal(false); + }; + // Handle settings button click const handleSettingsButtonClick = (e: React.MouseEvent) => { e.stopPropagation(); @@ -253,12 +272,18 @@ const TrackInfoItem: React.FC = ({
- {String(FLUIDR3_INSTRUMENT_MAP[currentInstrument + {isAudioTrack ? ( +
+ +
+ ) : ( + {String(FLUIDR3_INSTRUMENT_MAP[currentInstrument + )}
= ({
- + {isAudioTrack ? ( + + ) : ( + + )}
+ {isAudioTrack && ( + setShowAudioImportModal(false)} + onFileImport={handleAudioFileImport} + acceptedTypes={['.wav', '.mp3', '.ogg', '.flac', '.aac']} + title="Import Audio" + description="Drag and drop your audio file here" + /> + )}
); }; -export default TrackInfoItem; \ No newline at end of file +export default TrackInfoItem; \ No newline at end of file diff --git a/src/core/KGProject.ts b/src/core/KGProject.ts index 233fc2f..787f1c4 100644 --- a/src/core/KGProject.ts +++ b/src/core/KGProject.ts @@ -1,6 +1,7 @@ import { Expose, Type } from 'class-transformer'; import { KGTrack } from './track/KGTrack'; import { KGMidiTrack } from './track/KGMidiTrack'; +import { KGAudioTrack } from './track/KGAudioTrack'; import { type TimeSignature, WithDefault } from '../types/projectTypes'; import { TIME_CONSTANTS, KEY_SIGNATURE_MAP } from '../constants/coreConstants'; @@ -47,7 +48,7 @@ export class KGProject { @WithDefault(0) private projectStructureVersion: number = 0; - public static readonly CURRENT_PROJECT_STRUCTURE_VERSION: number = 3; + public static readonly CURRENT_PROJECT_STRUCTURE_VERSION: number = 4; @Expose() @Type(() => KGTrack, { @@ -56,6 +57,7 @@ export class KGProject { subTypes: [ { value: KGTrack, name: 'KGTrack' }, { value: KGMidiTrack, name: 'KGMidiTrack' }, + { value: KGAudioTrack, name: 'KGAudioTrack' }, ], }, }) diff --git a/src/core/audio-interface/KGAudioInterface.ts b/src/core/audio-interface/KGAudioInterface.ts index b775e98..dfda13a 100644 --- a/src/core/audio-interface/KGAudioInterface.ts +++ b/src/core/audio-interface/KGAudioInterface.ts @@ -5,7 +5,9 @@ import { FLUIDR3_INSTRUMENT_MAP } from '../../constants/generalMidiConstants'; import { pitchToNoteNameString } from '../../util/midiUtil'; import * as Tone from 'tone'; import { KGAudioBus } from './KGAudioBus'; +import { KGAudioPlayerBus } from './KGAudioPlayerBus'; import type { InstrumentType } from '../track/KGMidiTrack'; +import type { KGAudioRegion } from '../region/KGAudioRegion'; import { KGCore } from '../KGCore'; import { ConfigManager } from '../config/ConfigManager'; @@ -15,6 +17,13 @@ import { ConfigManager } from '../config/ConfigManager'; * Abstracts audio engine implementation (Tone.js) for potential future replacement */ export class KGAudioInterface { + /** + * Avoid scheduling audio-region resume callbacks exactly on the current + * transport boundary. Tone.Transport can miss those edge-triggered events, + * which leaves the playhead moving but the resumed clip silent. + */ + private static readonly AUDIO_RESUME_SAFETY_OFFSET_SECONDS = 0.005; + // Private static instance for singleton pattern private static _instance: KGAudioInterface | null = null; @@ -25,6 +34,9 @@ export class KGAudioInterface { // Track management - now using KGAudioBus private trackAudioBuses: Map = new Map(); + // Audio player buses for audio/wav tracks + private trackAudioPlayerBuses: Map = new Map(); + // Playback state private isPlaying: boolean = false; private masterVolume: number = AUDIO_INTERFACE_CONSTANTS.DEFAULT_MASTER_VOLUME; @@ -125,6 +137,12 @@ export class KGAudioInterface { audioBus.dispose(); }); this.trackAudioBuses.clear(); + + // Dispose of all audio player buses + this.trackAudioPlayerBuses.forEach(playerBus => { + playerBus.dispose(); + }); + this.trackAudioPlayerBuses.clear(); // Dispose master gain if (this.masterGain) { @@ -217,6 +235,113 @@ export class KGAudioInterface { } } + // ===== AUDIO PLAYER BUS MANAGEMENT (for audio/wav tracks) ===== + + /** + * Create an audio player bus for an audio track + */ + public async createTrackAudioPlayerBus( + trackId: string, + volume: number = AUDIO_INTERFACE_CONSTANTS.DEFAULT_TRACK_VOLUME + ): Promise { + // Remove existing player bus if it exists + await this.removeTrackAudioPlayerBus(trackId); + + try { + console.log(`Creating audio player bus for track ${trackId}`); + const playerBus = await KGAudioPlayerBus.create(volume); + + if (this.masterGain) { + playerBus.connect(this.masterGain); + } + + this.trackAudioPlayerBuses.set(trackId, playerBus); + console.log(`Created audio player bus for track ${trackId}`); + } catch (error) { + console.error(`Failed to create audio player bus for track ${trackId}:`, error); + throw error; + } + } + + /** + * Remove an audio player bus + */ + public async removeTrackAudioPlayerBus(trackId: string): Promise { + try { + const playerBus = this.trackAudioPlayerBuses.get(trackId); + if (playerBus) { + playerBus.dispose(); + this.trackAudioPlayerBuses.delete(trackId); + console.log(`Removed audio player bus for track ${trackId}`); + } + } catch (error) { + console.error(`Error removing audio player bus for track ${trackId}:`, error); + } + } + + /** + * Load an audio buffer into a track's player bus + */ + public loadAudioBufferForTrack( + trackId: string, + audioFileId: string, + buffer: Tone.ToneAudioBuffer + ): void { + const playerBus = this.trackAudioPlayerBuses.get(trackId); + if (playerBus) { + playerBus.loadBuffer(audioFileId, buffer); + } else { + console.warn(`No audio player bus found for track ${trackId}`); + } + } + + /** + * Get the raw AudioBuffer for waveform rendering + */ + public getAudioBuffer(trackId: string, audioFileId: string): AudioBuffer | undefined { + // Try the specified track first + const playerBus = this.trackAudioPlayerBuses.get(trackId); + const buffer = playerBus?.getAudioBuffer(audioFileId); + if (buffer) return buffer; + + // Fallback: search all player buses (handles region moved to a different track) + for (const bus of this.trackAudioPlayerBuses.values()) { + const found = bus.getAudioBuffer(audioFileId); + if (found) return found; + } + return undefined; + } + + /** + * Copy an audio buffer from one track's player bus to another. + * Used when an audio region is moved between tracks. + */ + public copyAudioBufferBetweenTracks( + sourceTrackId: string, + targetTrackId: string, + audioFileId: string + ): void { + // Use the raw AudioBuffer approach: get from any bus, wrap in ToneAudioBuffer, load into target + const rawBuffer = this.getAudioBuffer(sourceTrackId, audioFileId); + if (!rawBuffer) return; + + const targetBus = this.trackAudioPlayerBuses.get(targetTrackId); + if (!targetBus) return; + + if (!targetBus.hasBuffer(audioFileId)) { + const newToneBuffer = new Tone.ToneAudioBuffer(rawBuffer); + targetBus.loadBuffer(audioFileId, newToneBuffer); + + // Remove the buffer from the source bus to free memory + const sBus = this.trackAudioPlayerBuses.get(sourceTrackId); + if (sBus && sBus !== targetBus) { + sBus.removeBuffer(audioFileId); + } + + console.log(`Moved audio buffer ${audioFileId} from track ${sourceTrackId} to track ${targetTrackId}`); + } + } + /** * Change instrument type for a track (replaces setTrackInstrument) */ @@ -263,6 +388,9 @@ export class KGAudioInterface { // Set project BPM and time signature FIRST (this affects timing calculations) Tone.Transport.bpm.value = project.getBpm(); const timeSignature = project.getTimeSignature(); + const secondsPerBeat = 60 / project.getBpm(); + const resumeSafetyOffsetBeats = + KGAudioInterface.AUDIO_RESUME_SAFETY_OFFSET_SECONDS / secondsPerBeat; Tone.Transport.timeSignature = [timeSignature.numerator, timeSignature.denominator]; console.log(`Setting Tone.js BPM to ${project.getBpm()}, actual value: ${Tone.Transport.bpm.value}`); @@ -309,13 +437,14 @@ export class KGAudioInterface { console.log(`Track ${trackId} has audio bus: ${audioBus ? 'true' : 'false'}; type: ${track.getType()}`); + // Schedule MIDI track events if (audioBus && track.getType() === 'MIDI') { track.getRegions().forEach(region => { console.log(`Region ${region.getId().toString()}: type: ${region.getCurrentType()}`); if (region.getCurrentType() === 'KGMidiRegion') { const midiRegion = region as unknown as { getNotes: () => KGMidiNote[] }; - + // Get notes from region (assuming it has a getNotes method) if (midiRegion.getNotes) { midiRegion.getNotes().forEach((note: KGMidiNote) => { @@ -334,7 +463,7 @@ export class KGAudioInterface { if (noteStartBeat < startPosition) { return; // Skip notes that would have already finished before playback starts } - + // Convert beats to Tone.js time format for scheduling const noteStartTime = this.beatsToToneTime(noteStartBeat); const noteDuration = this.beatsToToneTime(noteDurationBeats); @@ -355,13 +484,115 @@ export class KGAudioInterface { audioBus.triggerAttackRelease(noteName, noteDuration, time + playbackDelay, velocity); } }, noteStartTime); - + this.scheduledEvents.add(eventId); }); } } }); } + + // Schedule audio/wav track events + const playerBus = this.trackAudioPlayerBuses.get(trackId); + if (playerBus && track.getType() === 'Wave') { + track.getRegions().forEach(region => { + if (region.getCurrentType() === 'KGAudioRegion') { + const audioRegion = region as unknown as KGAudioRegion; + const regionStartBeat = region.getStartFromBeat(); + const regionEndBeat = regionStartBeat + region.getLength(); + + // Skip regions outside loop range when looping + if (regionStartBeat >= scheduleEndBeat || regionEndBeat <= scheduleStartBeat) { + return; + } + + // Skip regions that start before playback start position + if (regionStartBeat < startPosition) { + // Region starts before playhead — calculate offset into the audio file + const offsetBeats = startPosition - regionStartBeat; + const offsetSeconds = offsetBeats * secondsPerBeat; + const remainingBeats = regionEndBeat - startPosition; + const remainingSeconds = remainingBeats * secondsPerBeat; + const audioFileId = audioRegion.getAudioFileId(); + + // Cap duration at loop boundary to prevent overlap on loop re-trigger + let effectiveRemainingSeconds = remainingSeconds; + if (isLooping) { + const maxDurationBeats = scheduleEndBeat - startPosition; + const maxDurationSeconds = maxDurationBeats * secondsPerBeat; + effectiveRemainingSeconds = Math.min(remainingSeconds, maxDurationSeconds); + } + + if (effectiveRemainingSeconds > 0 && playerBus.hasBuffer(audioFileId)) { + // Resume slightly after the current transport boundary and + // compensate the source offset/duration. Scheduling exactly + // at the playhead here can intermittently miss the callback, + // which leaves the playhead moving but the clip silent. + const safeResumeBeat = Math.min( + startPosition + resumeSafetyOffsetBeats, + regionEndBeat + ); + const extraOffsetSeconds = (safeResumeBeat - startPosition) * secondsPerBeat; + const adjustedOffsetSeconds = offsetSeconds + extraOffsetSeconds; + const adjustedRemainingSeconds = Math.max( + 0, + effectiveRemainingSeconds - extraOffsetSeconds + ); + + if (adjustedRemainingSeconds <= 0) { + return; + } + + const regionStartTime = this.beatsToToneTime(safeResumeBeat); + + const eventId = Tone.Transport.schedule((time) => { + const hasSoloedTracks = this.hasSoloedTracks(); + if (playerBus.shouldPlayWithSolo(hasSoloedTracks)) { + playerBus.schedulePlayback( + time + playbackDelay, + audioFileId, + adjustedOffsetSeconds, + adjustedRemainingSeconds + ); + } + }, regionStartTime); + this.scheduledEvents.add(eventId); + } + return; + } + + const audioFileId = audioRegion.getAudioFileId(); + let effectiveDurationSeconds = audioRegion.getAudioDurationSeconds(); + + if (!playerBus.hasBuffer(audioFileId)) { + console.warn(`No audio buffer loaded for ${audioFileId}`); + return; + } + + // Cap duration at loop boundary to prevent overlap on loop re-trigger + if (isLooping) { + const maxDurationBeats = scheduleEndBeat - regionStartBeat; + const maxDurationSeconds = maxDurationBeats * secondsPerBeat; + effectiveDurationSeconds = Math.min(effectiveDurationSeconds, maxDurationSeconds); + } + + const regionStartTime = this.beatsToToneTime(regionStartBeat); + + console.log( + `Scheduling audio region "${region.getName()}" at beat ${regionStartBeat}, duration: ${effectiveDurationSeconds}s` + ); + + const eventId = Tone.Transport.schedule((time) => { + const hasSoloedTracks = this.hasSoloedTracks(); + if (playerBus.shouldPlayWithSolo(hasSoloedTracks)) { + playerBus.schedulePlayback(time + playbackDelay, audioFileId, 0, effectiveDurationSeconds); + } + }, regionStartTime); + + this.scheduledEvents.add(eventId); + } + }); + } }); console.log(`Prepared playback from position ${startPosition} with ${this.scheduledEvents.size} events`); @@ -404,7 +635,12 @@ export class KGAudioInterface { this.trackAudioBuses.forEach(audioBus => { audioBus.releaseAll(); }); - + + // Stop all audio player buses + this.trackAudioPlayerBuses.forEach(playerBus => { + playerBus.stopAll(); + }); + this.isPlaying = false; console.log('Audio playback stopped'); @@ -560,10 +796,14 @@ export class KGAudioInterface { public setTrackVolume(trackId: string, volume: number): void { try { const audioBus = this.trackAudioBuses.get(trackId); + const playerBus = this.trackAudioPlayerBuses.get(trackId); if (audioBus) { audioBus.setVolume(volume); - console.log(`Set track ${trackId} volume to ${volume}`); - } else { + } + if (playerBus) { + playerBus.setVolume(volume); + } + if (!audioBus && !playerBus) { console.warn(`No audio bus found for track ${trackId}`); } } catch (error) { @@ -577,14 +817,18 @@ export class KGAudioInterface { public setTrackMute(trackId: string, muted: boolean): void { try { const audioBus = this.trackAudioBuses.get(trackId); + const playerBus = this.trackAudioPlayerBuses.get(trackId); if (audioBus) { audioBus.setMuted(muted); - console.log(`Set track ${trackId} mute to ${muted}`); - // Recompute effective volumes across all buses (solo logic) - this.updateAllEffectiveVolumes(); - } else { + } + if (playerBus) { + playerBus.setMuted(muted); + } + if (!audioBus && !playerBus) { console.warn(`No audio bus found for track ${trackId}`); } + // Recompute effective volumes across all buses (solo logic) + this.updateAllEffectiveVolumes(); } catch (error) { console.error(`Error setting track ${trackId} mute:`, error); } @@ -596,14 +840,18 @@ export class KGAudioInterface { public setTrackSolo(trackId: string, solo: boolean): void { try { const audioBus = this.trackAudioBuses.get(trackId); + const playerBus = this.trackAudioPlayerBuses.get(trackId); if (audioBus) { audioBus.setSolo(solo); - console.log(`Set track ${trackId} solo to ${solo}`); - // Recompute effective volumes across all buses (solo logic) - this.updateAllEffectiveVolumes(); - } else { + } + if (playerBus) { + playerBus.setSolo(solo); + } + if (!audioBus && !playerBus) { console.warn(`No audio bus found for track ${trackId}`); } + // Recompute effective volumes across all buses (solo logic) + this.updateAllEffectiveVolumes(); } catch (error) { console.error(`Error setting track ${trackId} solo:`, error); } @@ -646,17 +894,20 @@ export class KGAudioInterface { public getTrackVolume(trackId: string): number { const audioBus = this.trackAudioBuses.get(trackId); - return audioBus?.getVolume() ?? AUDIO_INTERFACE_CONSTANTS.DEFAULT_TRACK_VOLUME; + const playerBus = this.trackAudioPlayerBuses.get(trackId); + return audioBus?.getVolume() ?? playerBus?.getVolume() ?? AUDIO_INTERFACE_CONSTANTS.DEFAULT_TRACK_VOLUME; } public getTrackMuted(trackId: string): boolean { const audioBus = this.trackAudioBuses.get(trackId); - return audioBus?.getMuted() ?? false; + const playerBus = this.trackAudioPlayerBuses.get(trackId); + return audioBus?.getMuted() ?? playerBus?.getMuted() ?? false; } public getTrackSolo(trackId: string): boolean { const audioBus = this.trackAudioBuses.get(trackId); - return audioBus?.getSolo() ?? false; + const playerBus = this.trackAudioPlayerBuses.get(trackId); + return audioBus?.getSolo() ?? playerBus?.getSolo() ?? false; } public getMasterVolume(): number { @@ -692,7 +943,8 @@ export class KGAudioInterface { * Check if any tracks are currently soloed */ private hasSoloedTracks(): boolean { - return Array.from(this.trackAudioBuses.values()).some(audioBus => audioBus.getSolo()); + return Array.from(this.trackAudioBuses.values()).some(bus => bus.getSolo()) || + Array.from(this.trackAudioPlayerBuses.values()).some(bus => bus.getSolo()); } /** @@ -702,6 +954,7 @@ export class KGAudioInterface { try { const hasSoloedTracks = this.hasSoloedTracks(); this.trackAudioBuses.forEach(bus => bus.applyEffectiveVolume(hasSoloedTracks)); + this.trackAudioPlayerBuses.forEach(bus => bus.applyEffectiveVolume(hasSoloedTracks)); } catch (error) { console.error('Error updating effective volumes:', error); } @@ -784,4 +1037,4 @@ export class KGAudioInterface { public getLookaheadTime(): number { return Tone.getContext().lookAhead; } -} \ No newline at end of file +} diff --git a/src/core/audio-interface/KGAudioPlayerBus.ts b/src/core/audio-interface/KGAudioPlayerBus.ts new file mode 100644 index 0000000..f4f97ca --- /dev/null +++ b/src/core/audio-interface/KGAudioPlayerBus.ts @@ -0,0 +1,294 @@ +import * as Tone from 'tone'; +import { AUDIO_INTERFACE_CONSTANTS } from '../../constants/coreConstants'; + +/** + * KGAudioPlayerBus - Represents an audio playback bus for a track. + * Parallel to KGAudioBus but wraps a Tone.Gain node + a buffer cache + * instead of a Tone.Sampler. Supports multiple audio files per track + * via ToneBufferSource instances created on-demand during playback. + */ +export class KGAudioPlayerBus { + // Gain node for volume/mute routing + private gainNode: Tone.Gain; + + // Cached audio buffers keyed by audioFileId + private audioBuffers: Map = new Map(); + + // Active buffer sources for cleanup on stop + private activeSources: Tone.ToneBufferSource[] = []; + + // Audio properties + private volume: number; + private muted: boolean; + private solo: boolean; + + /** + * Private constructor - use KGAudioPlayerBus.create() instead + */ + private constructor( + gainNode: Tone.Gain, + volume: number, + muted: boolean, + solo: boolean + ) { + this.gainNode = gainNode; + this.volume = volume; + this.muted = muted; + this.solo = solo; + + this.updateGainVolume(); + + console.log(`KGAudioPlayerBus created - volume: ${volume}, muted: ${muted}, solo: ${solo}`); + } + + /** + * Create a new KGAudioPlayerBus instance (async factory method) + */ + public static async create( + volume: number = AUDIO_INTERFACE_CONSTANTS.DEFAULT_TRACK_VOLUME, + muted: boolean = false, + solo: boolean = false + ): Promise { + try { + const gainNode = new Tone.Gain(1); + const bus = new KGAudioPlayerBus(gainNode, volume, muted, solo); + console.log('KGAudioPlayerBus created successfully'); + return bus; + } catch (error) { + console.error('Failed to create KGAudioPlayerBus:', error); + throw error; + } + } + + // ===== BUFFER MANAGEMENT ===== + + /** + * Load/cache an audio buffer for a given audioFileId + */ + public loadBuffer(audioFileId: string, buffer: Tone.ToneAudioBuffer): void { + this.audioBuffers.set(audioFileId, buffer); + console.log(`Loaded audio buffer for ${audioFileId}, duration: ${buffer.duration}s`); + } + + /** + * Check if a buffer is cached for the given audioFileId + */ + public hasBuffer(audioFileId: string): boolean { + return this.audioBuffers.has(audioFileId); + } + + /** + * Remove and dispose a cached buffer + */ + public removeBuffer(audioFileId: string): void { + const buffer = this.audioBuffers.get(audioFileId); + if (buffer) { + buffer.dispose(); + this.audioBuffers.delete(audioFileId); + console.log(`Removed audio buffer for ${audioFileId}`); + } + } + + /** + * Get the raw AudioBuffer for waveform rendering + */ + public getAudioBuffer(audioFileId: string): AudioBuffer | undefined { + const toneBuffer = this.audioBuffers.get(audioFileId); + return toneBuffer?.get() as AudioBuffer | undefined; + } + + // ===== PLAYBACK ===== + + /** + * Schedule playback of an audio buffer at a specific time. + * Creates a new ToneBufferSource each call (stateless, safe for loop re-triggering). + */ + public schedulePlayback( + time: number, + audioFileId: string, + offset: number = 0, + duration?: number + ): void { + const buffer = this.audioBuffers.get(audioFileId); + if (!buffer) { + console.error(`No audio buffer found for ${audioFileId}`); + return; + } + + try { + const source = new Tone.ToneBufferSource(buffer); + source.connect(this.gainNode); + + // Ensure start time is not in the past — ToneBufferSource silently fails + // if the time has already passed, unlike Sampler which handles it gracefully. + const safeTime = Math.max(time, Tone.now()); + + if (duration !== undefined) { + source.start(safeTime, offset, duration); + } else { + source.start(safeTime, offset); + } + + this.activeSources.push(source); + + // Clean up source reference after it finishes + source.onended = () => { + const idx = this.activeSources.indexOf(source); + if (idx !== -1) { + this.activeSources.splice(idx, 1); + } + source.dispose(); + }; + } catch (error) { + console.error(`Error scheduling playback for ${audioFileId}:`, error); + } + } + + /** + * Stop all active audio sources + */ + public stopAll(): void { + try { + for (const source of this.activeSources) { + try { + source.stop(); + } catch { + // Source may have already stopped + } + // Don't dispose here — the onended callback handles disposal. + // Double-dispose corrupts Tone.js internal state. + } + this.activeSources = []; + } catch (error) { + console.error('Error stopping all audio sources:', error); + } + } + + // ===== AUDIO PROPERTIES ===== + + public setVolume(volume: number): void { + this.volume = volume; + this.updateGainVolume(); + console.log(`Set audio player bus volume to ${volume}`); + } + + public getVolume(): number { + return this.volume; + } + + public setMuted(muted: boolean): void { + this.muted = muted; + this.updateGainVolume(); + console.log(`Set audio player bus muted to ${muted}`); + } + + public getMuted(): boolean { + return this.muted; + } + + public setSolo(solo: boolean): void { + this.solo = solo; + console.log(`Set audio player bus solo to ${solo}`); + } + + public getSolo(): boolean { + return this.solo; + } + + /** + * Apply effective volume considering both mute and solo context + */ + public applyEffectiveVolume(hasSoloedTracks: boolean): void { + try { + let effectiveVolume = this.volume; + if (this.muted) { + effectiveVolume = 0; + } else if (hasSoloedTracks && !this.solo) { + effectiveVolume = 0; + } + const volumeDb = effectiveVolume > 0 ? 20 * Math.log10(effectiveVolume) : -Infinity; + this.gainNode.gain.value = Math.pow(10, volumeDb / 20); + } catch (error) { + console.error('Error applying effective volume for audio player bus:', error); + } + } + + /** + * Check if this audio bus should play considering solo logic + */ + public shouldPlayWithSolo(hasSoloedTracks: boolean): boolean { + if (this.muted) { + return false; + } + if (hasSoloedTracks) { + return this.solo; + } + return true; + } + + // ===== AUDIO ROUTING ===== + + public connect(destination: Tone.InputNode): void { + try { + this.gainNode.connect(destination); + console.log('Connected audio player bus to destination'); + } catch (error) { + console.error('Error connecting audio player bus:', error); + } + } + + public disconnect(): void { + try { + this.gainNode.disconnect(); + console.log('Disconnected audio player bus'); + } catch (error) { + console.error('Error disconnecting audio player bus:', error); + } + } + + // ===== RESOURCE MANAGEMENT ===== + + public dispose(): void { + try { + this.stopAll(); + for (const buffer of this.audioBuffers.values()) { + buffer.dispose(); + } + this.audioBuffers.clear(); + this.gainNode.dispose(); + console.log('Disposed KGAudioPlayerBus'); + } catch (error) { + console.error('Error disposing KGAudioPlayerBus:', error); + } + } + + // ===== PRIVATE UTILITY ===== + + private updateGainVolume(): void { + try { + const effectiveVolume = this.muted ? 0 : this.volume; + // Convert linear volume to gain value + this.gainNode.gain.value = effectiveVolume; + } catch (error) { + console.error('Error updating gain volume:', error); + } + } + + // ===== DEBUGGING ===== + + public getState(): { + volume: number; + muted: boolean; + solo: boolean; + bufferCount: number; + activeSourceCount: number; + } { + return { + volume: this.volume, + muted: this.muted, + solo: this.solo, + bufferCount: this.audioBuffers.size, + activeSourceCount: this.activeSources.length, + }; + } +} diff --git a/src/core/commands/index.ts b/src/core/commands/index.ts index bb1e8cd..06b73f0 100644 --- a/src/core/commands/index.ts +++ b/src/core/commands/index.ts @@ -8,6 +8,7 @@ export { KGCommandHistory } from './KGCommandHistory'; // Track commands export { AddTrackCommand } from './track/AddTrackCommand'; +export { AddAudioTrackCommand } from './track/AddAudioTrackCommand'; export { RemoveTrackCommand } from './track/RemoveTrackCommand'; export { ReorderTracksCommand } from './track/ReorderTracksCommand'; export { UpdateTrackCommand, type TrackUpdateProperties } from './track/UpdateTrackCommand'; @@ -19,6 +20,7 @@ export { ResizeRegionCommand } from './region/ResizeRegionCommand'; export { MoveRegionCommand } from './region/MoveRegionCommand'; export { PasteRegionsCommand } from './region/PasteRegionsCommand'; export { UpdateRegionCommand, type RegionUpdateProperties } from './region/UpdateRegionCommand'; +export { ImportAudioCommand } from './region/ImportAudioCommand'; // Note commands export { CreateNoteCommand } from './note/CreateNoteCommand'; diff --git a/src/core/commands/region/ImportAudioCommand.ts b/src/core/commands/region/ImportAudioCommand.ts new file mode 100644 index 0000000..27eb620 --- /dev/null +++ b/src/core/commands/region/ImportAudioCommand.ts @@ -0,0 +1,104 @@ +import { KGCommand } from '../KGCommand'; +import { KGCore } from '../../KGCore'; +import { KGAudioRegion } from '../../region/KGAudioRegion'; + +/** + * Command to import an audio file into an audio track as a region. + * Async work (file decode, OPFS storage, buffer loading) must be done + * before execute() is called — this command is synchronous. + */ +export class ImportAudioCommand extends KGCommand { + private trackId: number; + private trackIndex: number; + private audioFileId: string; + private audioFileName: string; + private audioDurationSeconds: number; + private insertBeat: number; + private durationInBeats: number; + private previousMaxBars: number; + private newMaxBars: number; + private regionId: string; + private createdRegion: KGAudioRegion | null = null; + + constructor( + trackId: number, + trackIndex: number, + audioFileId: string, + audioFileName: string, + audioDurationSeconds: number, + insertBeat: number, + durationInBeats: number, + previousMaxBars: number, + newMaxBars: number + ) { + super(); + this.trackId = trackId; + this.trackIndex = trackIndex; + this.audioFileId = audioFileId; + this.audioFileName = audioFileName; + this.audioDurationSeconds = audioDurationSeconds; + this.insertBeat = insertBeat; + this.durationInBeats = durationInBeats; + this.previousMaxBars = previousMaxBars; + this.newMaxBars = newMaxBars; + this.regionId = `audio_region_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`; + } + + execute(): void { + const core = KGCore.instance(); + const currentProject = core.getCurrentProject(); + + // Create the audio region + this.createdRegion = new KGAudioRegion( + this.regionId, + this.trackId.toString(), + this.trackIndex, + this.audioFileName, + this.insertBeat, + this.durationInBeats, + this.audioFileId, + this.audioFileName, + this.audioDurationSeconds + ); + + // Add region to the track + const track = currentProject.getTracks().find(t => t.getId() === this.trackId); + if (!track) { + throw new Error(`Track ${this.trackId} not found`); + } + track.addRegion(this.createdRegion); + + // Expand maxBars if needed + if (this.newMaxBars > this.previousMaxBars) { + currentProject.setMaxBars(this.newMaxBars); + } + + console.log(`Imported audio "${this.audioFileName}" at beat ${this.insertBeat}, duration: ${this.durationInBeats} beats`); + } + + undo(): void { + const core = KGCore.instance(); + const currentProject = core.getCurrentProject(); + + // Remove the region from the track + const track = currentProject.getTracks().find(t => t.getId() === this.trackId); + if (track) { + track.removeRegion(this.regionId); + } + + // Revert maxBars if we expanded it + if (this.newMaxBars > this.previousMaxBars) { + currentProject.setMaxBars(this.previousMaxBars); + } + + console.log(`Undid audio import "${this.audioFileName}"`); + } + + getDescription(): string { + return `Import audio "${this.audioFileName}"`; + } + + public getCreatedRegion(): KGAudioRegion | null { + return this.createdRegion; + } +} diff --git a/src/core/commands/track/AddAudioTrackCommand.ts b/src/core/commands/track/AddAudioTrackCommand.ts new file mode 100644 index 0000000..ac9ef10 --- /dev/null +++ b/src/core/commands/track/AddAudioTrackCommand.ts @@ -0,0 +1,83 @@ +import { KGCommand } from '../KGCommand'; +import { KGCore } from '../../KGCore'; +import { KGAudioTrack } from '../../track/KGAudioTrack'; +import { KGAudioInterface } from '../../audio-interface/KGAudioInterface'; +import { generateNewTrackName } from '../../../util/miscUtil'; + +/** + * Command to add a new audio track to the project. + * Handles both the core model update and audio player bus setup. + */ +export class AddAudioTrackCommand extends KGCommand { + private trackId: number; + private trackName: string; + private trackIndex: number; + private createdTrack: KGAudioTrack | null = null; + + constructor(trackId?: number, trackName?: string) { + super(); + + if (trackId === undefined) { + const currentProject = KGCore.instance().getCurrentProject(); + const tracks = currentProject.getTracks(); + this.trackId = tracks.length > 0 + ? Math.max(...tracks.map(track => track.getId())) + 1 + : 1; + } else { + this.trackId = trackId; + } + + this.trackName = trackName || generateNewTrackName(); + this.trackIndex = 0; + } + + execute(): void { + const core = KGCore.instance(); + const currentProject = core.getCurrentProject(); + const tracks = currentProject.getTracks(); + + this.trackIndex = tracks.length; + + this.createdTrack = new KGAudioTrack(this.trackName, this.trackId); + this.createdTrack.setTrackIndex(this.trackIndex); + + const updatedTracks = [...tracks, this.createdTrack]; + currentProject.setTracks(updatedTracks); + + // Create audio player bus for the new track + const audioInterface = KGAudioInterface.instance(); + audioInterface.createTrackAudioPlayerBus(this.trackId.toString()); + + console.log(`Added audio track ${this.trackId}`); + } + + undo(): void { + if (!this.createdTrack) { + throw new Error('Cannot undo: no track was created'); + } + + const core = KGCore.instance(); + const currentProject = core.getCurrentProject(); + const tracks = currentProject.getTracks(); + + const updatedTracks = tracks.filter(track => track.getId() !== this.trackId); + currentProject.setTracks(updatedTracks); + + const audioInterface = KGAudioInterface.instance(); + audioInterface.removeTrackAudioPlayerBus(this.trackId.toString()); + + console.log(`Removed audio track ${this.trackId}`); + } + + getDescription(): string { + return `Add audio track "${this.trackName}"`; + } + + public getTrackId(): number { + return this.trackId; + } + + public getCreatedTrack(): KGAudioTrack | null { + return this.createdTrack; + } +} diff --git a/src/core/commands/track/RemoveTrackCommand.ts b/src/core/commands/track/RemoveTrackCommand.ts index c72db00..d4fc159 100644 --- a/src/core/commands/track/RemoveTrackCommand.ts +++ b/src/core/commands/track/RemoveTrackCommand.ts @@ -39,9 +39,10 @@ export class RemoveTrackCommand extends KGCommand { this.originalInstrument = (trackToRemove as KGMidiTrack).getInstrument(); } - // Remove audio synth for the track + // Remove audio bus for the track (handles both MIDI synth and audio player bus) const audioInterface = KGAudioInterface.instance(); audioInterface.removeTrackSynth(this.trackId.toString()); + audioInterface.removeTrackAudioPlayerBus(this.trackId.toString()); // Remove the track from the core model const updatedTracks = tracks.filter(track => track.getId() !== this.trackId); @@ -85,11 +86,15 @@ export class RemoveTrackCommand extends KGCommand { // Update the core model currentProject.setTracks(updatedTracks); - // Recreate audio synth for the track + // Recreate audio bus for the track const audioInterface = KGAudioInterface.instance(); - audioInterface.createTrackSynth(this.trackId.toString(), this.originalInstrument); - - console.log(`Restored track ${this.trackId} with ${this.originalInstrument} instrument`); + if (this.removedTrack.getCurrentType() === 'KGAudioTrack') { + audioInterface.createTrackAudioPlayerBus(this.trackId.toString()); + } else { + audioInterface.createTrackSynth(this.trackId.toString(), this.originalInstrument); + } + + console.log(`Restored track ${this.trackId}`); } getDescription(): string { diff --git a/src/core/io/KGAudioFileStorage.ts b/src/core/io/KGAudioFileStorage.ts new file mode 100644 index 0000000..aca87f5 --- /dev/null +++ b/src/core/io/KGAudioFileStorage.ts @@ -0,0 +1,72 @@ +import { OPFS_CONSTANTS } from '../../constants/coreConstants'; + +/** + * KGAudioFileStorage — Utility for storing and loading audio files + * in the OPFS media/ directory alongside project data. + */ +export class KGAudioFileStorage { + /** + * Store an audio file in the project's media/ directory. + */ + public static async storeAudioFile( + projectName: string, + fileId: string, + file: File + ): Promise { + const mediaDir = await KGAudioFileStorage.getMediaDir(projectName); + const fileHandle = await mediaDir.getFileHandle(fileId, { create: true }); + const writable = await fileHandle.createWritable(); + await writable.write(await file.arrayBuffer()); + await writable.close(); + console.log(`Stored audio file ${fileId} (${file.size} bytes) for project "${projectName}"`); + } + + /** + * Load an audio file as ArrayBuffer from the project's media/ directory. + */ + public static async loadAudioFile( + projectName: string, + fileId: string + ): Promise { + const mediaDir = await KGAudioFileStorage.getMediaDir(projectName); + const fileHandle = await mediaDir.getFileHandle(fileId); + const file = await fileHandle.getFile(); + return file.arrayBuffer(); + } + + /** + * Delete an audio file from the project's media/ directory. + */ + public static async deleteAudioFile( + projectName: string, + fileId: string + ): Promise { + try { + const mediaDir = await KGAudioFileStorage.getMediaDir(projectName); + await mediaDir.removeEntry(fileId); + console.log(`Deleted audio file ${fileId} from project "${projectName}"`); + } catch (error) { + console.warn(`Failed to delete audio file ${fileId}:`, error); + } + } + + /** + * Generate a unique audio file ID preserving the original file extension. + */ + public static generateAudioFileId(originalFileName: string): string { + const ext = originalFileName.split('.').pop()?.toLowerCase() || 'wav'; + const timestamp = Date.now(); + const random = Math.random().toString(36).substring(2, 10); + return `audio_${timestamp}_${random}.${ext}`; + } + + /** + * Get the media directory handle for a project. + */ + private static async getMediaDir(projectName: string): Promise { + const root = await navigator.storage.getDirectory(); + const projectsDir = await root.getDirectoryHandle(OPFS_CONSTANTS.ROOT_DIR); + const projectDir = await projectsDir.getDirectoryHandle(projectName); + return projectDir.getDirectoryHandle(OPFS_CONSTANTS.MEDIA_DIR, { create: true }); + } +} diff --git a/src/core/project-upgrader/KGProjectUpgrader.ts b/src/core/project-upgrader/KGProjectUpgrader.ts index d0f3bfa..1bf5f6a 100644 --- a/src/core/project-upgrader/KGProjectUpgrader.ts +++ b/src/core/project-upgrader/KGProjectUpgrader.ts @@ -2,6 +2,7 @@ import { KGProject } from '../KGProject'; import { upgradeToV1 } from './upgradeToV1'; import { upgradeToV2 } from './upgradeToV2'; import { upgradeToV3 } from './upgradeToV3'; +import { upgradeToV4 } from './upgradeToV4'; /** * Upgrade the given project to the latest structure version, one version at a time. @@ -33,6 +34,10 @@ export function upgradeProjectToLatest(project: KGProject): KGProject { workingProject = upgradeToV3(workingProject); break; } + case 4: { + workingProject = upgradeToV4(workingProject); + break; + } default: { // If an upgrader is missing, throw to prevent loading incompatible structures throw new Error(`No upgrader found for project structure version ${nextVersion}`); diff --git a/src/core/project-upgrader/upgradeToV4.ts b/src/core/project-upgrader/upgradeToV4.ts new file mode 100644 index 0000000..2e8ef31 --- /dev/null +++ b/src/core/project-upgrader/upgradeToV4.ts @@ -0,0 +1,17 @@ +import { KGProject } from '../KGProject'; + +/** + * Upgrade a project from structure version 3 to 4. + * Adds audio track support. No data migration needed — existing projects have no audio tracks. + */ +export function upgradeToV4(project: KGProject): KGProject { + try { + // No data migration needed for audio track support. + // The new KGAudioTrack and KGAudioRegion subtypes are registered in + // the class-transformer discriminators and will be deserialized automatically. + } finally { + project.setProjectStructureVersion(4); + } + + return project; +} diff --git a/src/core/region/KGAudioRegion.ts b/src/core/region/KGAudioRegion.ts new file mode 100644 index 0000000..d5b49a9 --- /dev/null +++ b/src/core/region/KGAudioRegion.ts @@ -0,0 +1,73 @@ +import { Expose } from 'class-transformer'; +import { KGRegion } from './KGRegion'; +import { WithDefault } from '../../types/projectTypes'; + +/** + * KGAudioRegion - Class representing an audio region in the DAW + * Contains a reference to an audio file stored in OPFS and inherits position/length from KGRegion + */ +export class KGAudioRegion extends KGRegion { + @Expose() + protected override __type: string = 'KGAudioRegion'; + + @Expose() + @WithDefault('') + protected audioFileId: string = ''; + + @Expose() + @WithDefault('') + protected audioFileName: string = ''; + + @Expose() + @WithDefault(0) + protected audioDurationSeconds: number = 0; + + constructor( + id: string, + trackId: string, + trackIndex: number, + name: string, + startFromBeat: number = 0, + length: number = 0, + audioFileId: string = '', + audioFileName: string = '', + audioDurationSeconds: number = 0 + ) { + super(id, trackId, trackIndex, name, startFromBeat, length); + this.__type = 'KGAudioRegion'; + this.audioFileId = audioFileId; + this.audioFileName = audioFileName; + this.audioDurationSeconds = audioDurationSeconds; + } + + // Getters + public getAudioFileId(): string { + return this.audioFileId; + } + + public getAudioFileName(): string { + return this.audioFileName; + } + + public getAudioDurationSeconds(): number { + return this.audioDurationSeconds; + } + + // Setters + public setAudioFileId(audioFileId: string): void { + this.audioFileId = audioFileId; + } + + public setAudioFileName(audioFileName: string): void { + this.audioFileName = audioFileName; + } + + public setAudioDurationSeconds(audioDurationSeconds: number): void { + this.audioDurationSeconds = audioDurationSeconds; + } + + // Override getCurrentType to return specific subclass type + public override getCurrentType(): string { + return 'KGAudioRegion'; + } +} diff --git a/src/core/track/KGAudioTrack.ts b/src/core/track/KGAudioTrack.ts new file mode 100644 index 0000000..5053995 --- /dev/null +++ b/src/core/track/KGAudioTrack.ts @@ -0,0 +1,38 @@ +import { Expose, Type } from 'class-transformer'; +import { KGTrack, TrackType } from './KGTrack'; +import { KGRegion } from '../region/KGRegion'; +import { KGAudioRegion } from '../region/KGAudioRegion'; +import { AUDIO_INTERFACE_CONSTANTS } from '../../constants/coreConstants'; + +export class KGAudioTrack extends KGTrack { + @Expose() + protected override __type: string = 'KGAudioTrack'; + + @Expose() + @Type(() => KGRegion, { + discriminator: { + property: '__type', + subTypes: [ + { value: KGRegion, name: 'KGRegion' }, + { value: KGAudioRegion, name: 'KGAudioRegion' }, + ], + }, + }) + protected override regions: KGAudioRegion[] = []; + + constructor(name: string = 'Untitled Audio Track', id: number = 0, volume: number = AUDIO_INTERFACE_CONSTANTS.DEFAULT_TRACK_VOLUME) { + super(name, id, TrackType.Wave); + this.__type = 'KGAudioTrack'; + this.volume = volume; + } + + // Override parent setRegions to enforce KGAudioRegion type + public override setRegions(regions: KGAudioRegion[]): void { + this.regions = regions; + } + + // Override getCurrentType to return specific subclass type + public override getCurrentType(): string { + return 'KGAudioTrack'; + } +} diff --git a/src/core/track/KGTrack.ts b/src/core/track/KGTrack.ts index 7b811a7..11bbf3d 100644 --- a/src/core/track/KGTrack.ts +++ b/src/core/track/KGTrack.ts @@ -1,6 +1,7 @@ import { Expose, Type } from 'class-transformer'; import { KGRegion } from '../region/KGRegion'; import { KGMidiRegion } from '../region/KGMidiRegion'; +import { KGAudioRegion } from '../region/KGAudioRegion'; import { AUDIO_INTERFACE_CONSTANTS } from '../../constants/coreConstants'; import { WithDefault } from '../../types/projectTypes'; @@ -42,6 +43,7 @@ export class KGTrack { subTypes: [ { value: KGRegion, name: 'KGRegion' }, { value: KGMidiRegion, name: 'KGMidiRegion' }, + { value: KGAudioRegion, name: 'KGAudioRegion' }, ], }, }) diff --git a/src/hooks/useRegionOperations.ts b/src/hooks/useRegionOperations.ts index e2e1adc..5bd59e6 100644 --- a/src/hooks/useRegionOperations.ts +++ b/src/hooks/useRegionOperations.ts @@ -1,6 +1,7 @@ import { useCallback } from 'react'; import { DEBUG_MODE } from '../constants'; import { KGMidiRegion } from '../core/region/KGMidiRegion'; +import { KGAudioRegion } from '../core/region/KGAudioRegion'; import { KGTrack } from '../core/track/KGTrack'; import { KGCore } from '../core/KGCore'; import type { RegionUI } from '../components/interfaces'; @@ -46,9 +47,9 @@ export const useRegionOperations = ({ const deleteSelectedRegions = useCallback(() => { // Get all selected regions from KGCore const selectedItems = core.getSelectedItems(); - const selectedRegions = selectedItems.filter(item => - item instanceof KGMidiRegion - ) as KGMidiRegion[]; + const selectedRegions = selectedItems.filter(item => + item instanceof KGMidiRegion || item instanceof KGAudioRegion + ); if (selectedRegions.length === 0) { if (DEBUG_MODE.MAIN_CONTENT) { diff --git a/src/stores/projectStore.ts b/src/stores/projectStore.ts index 78c7a2a..cbb9e27 100644 --- a/src/stores/projectStore.ts +++ b/src/stores/projectStore.ts @@ -9,10 +9,14 @@ import { KGAudioInterface } from '../core/audio-interface/KGAudioInterface'; import { KGPianoRollState } from '../core/state/KGPianoRollState'; import { KGMidiNote } from '../core/midi/KGMidiNote'; import { KGRegion } from '../core/region/KGRegion'; -import { AddTrackCommand, RemoveTrackCommand, ReorderTracksCommand, UpdateTrackCommand, type TrackUpdateProperties, PasteRegionsCommand, PasteNotesCommand, ChangeProjectPropertyCommand } from '../core/commands'; +import { AddTrackCommand, AddAudioTrackCommand, RemoveTrackCommand, ReorderTracksCommand, UpdateTrackCommand, type TrackUpdateProperties, PasteRegionsCommand, PasteNotesCommand, ChangeProjectPropertyCommand, ImportAudioCommand } from '../core/commands'; +import { KGAudioTrack } from '../core/track/KGAudioTrack'; +import { KGAudioRegion } from '../core/region/KGAudioRegion'; +import { KGAudioFileStorage } from '../core/io/KGAudioFileStorage'; import { ConfigManager } from '../core/config/ConfigManager'; import { upgradeProjectToLatest } from '../core/project-upgrader/KGProjectUpgrader'; import { toggleLoop } from '../util/loopUtil'; +import * as Tone from 'tone'; /** * Update CSS custom property for time signature numerator @@ -63,9 +67,13 @@ interface ProjectState { showInstrumentSelection: boolean; // instrumentSelectionTrackId removed; panel now follows selectedTrackId + // Audio import modal state + showAudioImportModal: boolean; + audioImportTargetTrackId: string | null; + // Settings state showSettings: boolean; - + // Undo/redo state canUndo: boolean; canRedo: boolean; @@ -75,6 +83,10 @@ interface ProjectState { // Actions setProjectName: (name: string) => void; addTrack: () => Promise; + addAudioTrack: () => Promise; + importAudioToTrack: (trackId: string, file: File) => Promise; + openAudioImportModal: (trackId: string) => void; + closeAudioImportModal: () => void; removeTrack: (id: number) => Promise; updateTrack: (track: KGTrack) => Promise; updateTrackProperties: (trackId: number, properties: TrackUpdateProperties) => Promise; @@ -250,6 +262,10 @@ export const useProjectStore = create((set, get) => { // Initial Instrument Selection panel state showInstrumentSelection: initialShowInstrumentSelection, + // Initial audio import modal state + showAudioImportModal: false, + audioImportTargetTrackId: null, + // Initial Settings state showSettings: false, @@ -300,6 +316,117 @@ export const useProjectStore = create((set, get) => { } }, + addAudioTrack: async () => { + try { + const command = new AddAudioTrackCommand(); + KGCore.instance().executeCommand(command); + + const project = KGCore.instance().getCurrentProject(); + set({ tracks: [...project.getTracks()] as KGTrack[] }); + + const newTrackId = command.getTrackId().toString(); + set({ + selectedTrackId: newTrackId, + showAudioImportModal: true, + audioImportTargetTrackId: newTrackId, + }); + + console.log(`Added audio track ${command.getTrackId()}`); + } catch (error) { + console.error('Error adding audio track:', error); + get().setStatus('Failed to add audio track'); + } + }, + + importAudioToTrack: async (trackId: string, file: File) => { + try { + get().setStatus(`Importing "${file.name}"...`); + + // Decode the audio file to get duration + const arrayBuffer = await file.arrayBuffer(); + const toneBuffer = new Tone.ToneAudioBuffer(); + await new Promise((resolve, reject) => { + toneBuffer.onload = () => resolve(); + // Set buffer from array buffer + const audioContext = Tone.getContext().rawContext as AudioContext; + audioContext.decodeAudioData( + arrayBuffer.slice(0), // slice to avoid detached buffer + (decoded) => { + toneBuffer.set(decoded); + resolve(); + }, + (err) => reject(err) + ); + }); + + const audioDurationSeconds = toneBuffer.duration; + const { bpm, timeSignature, playheadPosition, maxBars } = get(); + + // Calculate duration in beats + const durationInBeats = audioDurationSeconds * (bpm / 60); + + // Calculate if we need to expand maxBars + const beatsPerBar = timeSignature.numerator; + const endBeat = playheadPosition + durationInBeats; + const requiredBars = Math.ceil(endBeat / beatsPerBar); + const newMaxBars = Math.max(maxBars, requiredBars); + + // Store audio file in OPFS + const projectName = get().projectName; + const audioFileId = KGAudioFileStorage.generateAudioFileId(file.name); + await KGAudioFileStorage.storeAudioFile(projectName, audioFileId, file); + + // Load buffer into the audio player bus + const audioInterface = KGAudioInterface.instance(); + audioInterface.loadAudioBufferForTrack(trackId, audioFileId, toneBuffer); + + // Find the track to get trackIndex + const project = KGCore.instance().getCurrentProject(); + const track = project.getTracks().find(t => t.getId().toString() === trackId); + if (!track) { + throw new Error(`Track ${trackId} not found`); + } + + // Execute the import command + const command = new ImportAudioCommand( + track.getId(), + track.getTrackIndex(), + audioFileId, + file.name, + audioDurationSeconds, + playheadPosition, + durationInBeats, + maxBars, + newMaxBars + ); + KGCore.instance().executeCommand(command); + + // Update store state + const updatedState: Partial = { + tracks: [...project.getTracks()] as KGTrack[], + }; + if (newMaxBars > maxBars) { + updatedState.maxBars = newMaxBars; + updateMaxBarsCSS(newMaxBars); + } + set(updatedState); + + get().setStatus(`Imported "${file.name}" successfully`); + console.log(`Imported audio "${file.name}" to track ${trackId}`); + } catch (error) { + console.error('Error importing audio:', error); + get().setStatus(`Failed to import audio: ${error}`); + } + }, + + openAudioImportModal: (trackId: string) => { + set({ showAudioImportModal: true, audioImportTargetTrackId: trackId }); + }, + + closeAudioImportModal: () => { + set({ showAudioImportModal: false, audioImportTargetTrackId: null }); + }, + removeTrack: async (id: number) => { try { // Get the current tracks and find the index of the track being deleted @@ -488,23 +615,52 @@ export const useProjectStore = create((set, get) => { // Setup audio synths for all tracks const audioInterface = KGAudioInterface.instance(); - // Clear any existing synths first - tracks.forEach(track => { - audioInterface.removeTrackSynth(track.getId().toString()); - }); - - // Create synths for all tracks (with their stored volumes) + // Clear any existing synths/buses first tracks.forEach(track => { const trackId = track.getId().toString(); - // Get instrument from track model if it's a MIDI track - let instrument: InstrumentType = 'acoustic_grand_piano'; // Default fallback - if (track.getCurrentType() === 'KGMidiTrack' && 'getInstrument' in track) { - instrument = (track as KGMidiTrack).getInstrument(); - } - audioInterface.createTrackSynth(trackId, instrument); - // Volume is applied during bus creation; ensure sync if bus already existed - audioInterface.setTrackVolume(trackId, track.getVolume()); + audioInterface.removeTrackSynth(trackId); + audioInterface.removeTrackAudioPlayerBus(trackId); }); + + // Create synths/buses for all tracks (with their stored volumes) + const projectName = projectToLoad.getName(); + for (const track of tracks) { + const trackId = track.getId().toString(); + + if (track.getCurrentType() === 'KGAudioTrack') { + // Audio track: create player bus and load audio buffers + await audioInterface.createTrackAudioPlayerBus(trackId, track.getVolume()); + + // Load audio buffers for all regions in this audio track + const audioTrack = track as KGAudioTrack; + for (const region of audioTrack.getRegions()) { + if (region.getCurrentType() === 'KGAudioRegion') { + const audioRegion = region as KGAudioRegion; + const audioFileId = audioRegion.getAudioFileId(); + if (audioFileId) { + try { + const arrayBuffer = await KGAudioFileStorage.loadAudioFile(projectName, audioFileId); + const audioContext = Tone.getContext().rawContext as AudioContext; + const decoded = await audioContext.decodeAudioData(arrayBuffer); + const toneBuffer = new Tone.ToneAudioBuffer(); + toneBuffer.set(decoded); + audioInterface.loadAudioBufferForTrack(trackId, audioFileId, toneBuffer); + } catch (err) { + console.error(`Failed to load audio file ${audioFileId}:`, err); + } + } + } + } + } else { + // MIDI track: create sampler-based audio bus + let instrument: InstrumentType = 'acoustic_grand_piano'; + if (track.getCurrentType() === 'KGMidiTrack' && 'getInstrument' in track) { + instrument = (track as KGMidiTrack).getInstrument(); + } + audioInterface.createTrackSynth(trackId, instrument); + audioInterface.setTrackVolume(trackId, track.getVolume()); + } + } // Update CSS variable for time signature numerator updateTimeSignatureCSS(timeSignature); From 6080accd3a0ddac79d85e890f31bf063f46b761c Mon Sep 17 00:00:00 2001 From: Xiaohan-Tian <157918347+Xiaohan-Tian@users.noreply.github.com> Date: Thu, 9 Apr 2026 22:17:20 -0700 Subject: [PATCH 02/13] feat: added `rm` opfs mock bash command --- src/core/KGDebugger.ts | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/core/KGDebugger.ts b/src/core/KGDebugger.ts index 7d01253..40027c4 100644 --- a/src/core/KGDebugger.ts +++ b/src/core/KGDebugger.ts @@ -345,7 +345,7 @@ export class KGDebugger { console.log(" testExtractXMLFromString(input) - Test XML extraction from string"); console.log(" testToolCall(input) - Execute tool call(s) from JSON and show results"); console.log(" inputChatBox(content, interval?) - Type into ChatBox textarea and submit with Enter"); - console.log(" opfs(command) - OPFS file browser (pwd, ls, cd, cat, dl)"); + console.log(" opfs(command) - OPFS file browser (pwd, ls, cd, cat, dl, rm)"); console.log(" help() - Show this help"); console.log(""); console.log("💡 Usage tips:"); @@ -463,6 +463,7 @@ export class KGDebugger { * cd — change directory (supports .., /, relative, and quoted paths) * cat — print file contents * dl — download a file to your local machine + * rm — remove a file or directory (recursive) * * Usage in console: * await KGDebugger.opfs('pwd') @@ -498,9 +499,13 @@ export class KGDebugger { await this.opfsDl(arg) break + case 'rm': + await this.opfsRm(arg) + break + default: console.log(`opfs: command not found: ${cmd}`) - console.log('Available commands: pwd, ls, cd , cat , dl ') + console.log('Available commands: pwd, ls, cd , cat , dl , rm ') } } catch (error) { console.error(`opfs: ${error}`) @@ -660,4 +665,19 @@ export class KGDebugger { console.error(`opfs: dl: ${fileName}: No such file`) } } + + private async opfsRm(name: string): Promise { + if (!name) { + console.error('opfs: rm: missing file or directory name') + return + } + + const dir = await this.opfsResolveCwd() + try { + await dir.removeEntry(name, { recursive: true }) + console.log(`removed: ${name}`) + } catch { + console.error(`opfs: rm: ${name}: No such file or directory`) + } + } } \ No newline at end of file From 83f4bfe47fd02e13584e25b56e81d95f8ee6f5ff Mon Sep 17 00:00:00 2001 From: Xiaohan-Tian <157918347+Xiaohan-Tian@users.noreply.github.com> Date: Fri, 10 Apr 2026 12:14:20 -0700 Subject: [PATCH 03/13] fix: missing media files when renaming + saving the project --- src/components/Toolbar.tsx | 30 ++++++---- src/components/track/Region.css | 4 ++ src/core/io/KGAudioFileStorage.ts | 17 +++++- src/core/io/KGProjectStorage.ts | 57 ++++++++++++++++++ src/hooks/useGlobalKeyboardHandler.ts | 12 +++- src/stores/projectStore.ts | 16 ++++-- src/util/saveUtil.ts | 83 +++++++++++++++++---------- 7 files changed, 167 insertions(+), 52 deletions(-) diff --git a/src/components/Toolbar.tsx b/src/components/Toolbar.tsx index b9b155f..c1c5649 100644 --- a/src/components/Toolbar.tsx +++ b/src/components/Toolbar.tsx @@ -30,6 +30,7 @@ import PianoIcon from './common/icons/PianoIcon'; const Toolbar: React.FC = () => { const { projectName, setProjectName, + savedProjectName, setSavedProjectName, bpm, timeSignature, keySignature, setStatus, isPlaying, startPlaying, stopPlaying, setPlayheadPosition, currentTime, setBpm, setTimeSignature, setKeySignature, @@ -73,25 +74,25 @@ const Toolbar: React.FC = () => { }; // Common project loading logic extracted for reuse - const loadProjectFromData = async (project: KGProject, sourceDescription: string) => { + const loadProjectFromData = async (project: KGProject, sourceDescription: string, savedName?: string) => { try { // Clean up UI state first cleanupProjectState(); - + // Automatically clear chat history when loading a project clearChatHistoryAndUI(); - + // Load the project using the store's loadProject method const { loadProject: storeLoadProject } = useProjectStore.getState(); - await storeLoadProject(project); - + await storeLoadProject(project, savedName); + // Update status to indicate project loaded setStatus(`${sourceDescription} loaded successfully`); - + if (DEBUG_MODE.TOOLBAR) { console.log(`project loaded successfully from ${sourceDescription}`); } - + } catch (error) { console.error(`Error loading project from ${sourceDescription}:`, error); setStatus(`Failed to load project: ${error}`); @@ -159,8 +160,8 @@ const Toolbar: React.FC = () => { return; } - // Use common loading logic - await loadProjectFromData(loadedProject, `Project "${projectNameToLoad}"`); + // Use common loading logic — pass the OPFS folder name so savedProjectName is set correctly + await loadProjectFromData(loadedProject, `Project "${projectNameToLoad}"`, projectNameToLoad.trim()); } catch (error) { console.error("Error loading project:", error); @@ -174,7 +175,12 @@ const Toolbar: React.FC = () => { console.log("user clicked save button"); } - await saveProject(projectName, setStatus); + await saveProject(projectName, savedProjectName, setStatus, (finalName) => { + setSavedProjectName(finalName); + if (finalName !== projectName) { + setProjectName(finalName); + } + }); }; const handleExportProject = (exportType: string) => { @@ -317,7 +323,7 @@ const Toolbar: React.FC = () => { throw new Error('Failed to load imported project'); } - await loadProjectFromData(loaded, `KGStudio file "${file.name}"`); + await loadProjectFromData(loaded, `KGStudio file "${file.name}"`, projectName); if (DEBUG_MODE.TOOLBAR) { console.log("KGStudio file imported successfully:", projectName); @@ -357,7 +363,7 @@ const Toolbar: React.FC = () => { throw new Error('Failed to load imported project from storage'); } - await loadProjectFromData(loaded, `JSON file "${file.name}"`); + await loadProjectFromData(loaded, `JSON file "${file.name}"`, importedName); if (DEBUG_MODE.TOOLBAR) { console.log("KGStudio JSON project imported and saved to OPFS:", importedName); diff --git a/src/components/track/Region.css b/src/components/track/Region.css index d9629dc..9175075 100644 --- a/src/components/track/Region.css +++ b/src/components/track/Region.css @@ -85,6 +85,10 @@ box-shadow: 0 0 0 1px #6aab7a; } +.track-region.audio-region.selected { + border-color: #ffffff; +} + .track-region.audio-region .region-header { background-color: #4a8b5a; } diff --git a/src/core/io/KGAudioFileStorage.ts b/src/core/io/KGAudioFileStorage.ts index aca87f5..208e539 100644 --- a/src/core/io/KGAudioFileStorage.ts +++ b/src/core/io/KGAudioFileStorage.ts @@ -7,13 +7,14 @@ import { OPFS_CONSTANTS } from '../../constants/coreConstants'; export class KGAudioFileStorage { /** * Store an audio file in the project's media/ directory. + * Creates the project and media directories if they don't exist yet. */ public static async storeAudioFile( projectName: string, fileId: string, file: File ): Promise { - const mediaDir = await KGAudioFileStorage.getMediaDir(projectName); + const mediaDir = await KGAudioFileStorage.getOrCreateMediaDir(projectName); const fileHandle = await mediaDir.getFileHandle(fileId, { create: true }); const writable = await fileHandle.createWritable(); await writable.write(await file.arrayBuffer()); @@ -61,7 +62,8 @@ export class KGAudioFileStorage { } /** - * Get the media directory handle for a project. + * Get the media directory handle for an existing project (read/delete path). + * Does NOT create directories — fails if project folder doesn't exist. */ private static async getMediaDir(projectName: string): Promise { const root = await navigator.storage.getDirectory(); @@ -69,4 +71,15 @@ export class KGAudioFileStorage { const projectDir = await projectsDir.getDirectoryHandle(projectName); return projectDir.getDirectoryHandle(OPFS_CONSTANTS.MEDIA_DIR, { create: true }); } + + /** + * Get or create the media directory handle for a project (write path). + * Creates project and media directories if they don't exist. + */ + private static async getOrCreateMediaDir(projectName: string): Promise { + const root = await navigator.storage.getDirectory(); + const projectsDir = await root.getDirectoryHandle(OPFS_CONSTANTS.ROOT_DIR, { create: true }); + const projectDir = await projectsDir.getDirectoryHandle(projectName, { create: true }); + return projectDir.getDirectoryHandle(OPFS_CONSTANTS.MEDIA_DIR, { create: true }); + } } diff --git a/src/core/io/KGProjectStorage.ts b/src/core/io/KGProjectStorage.ts index ed92db8..3fc296d 100644 --- a/src/core/io/KGProjectStorage.ts +++ b/src/core/io/KGProjectStorage.ts @@ -206,10 +206,31 @@ export class KGProjectStorage { project.setName(newName); await this.save(newName, project, false); + // Copy media files from old to new location + await this.copyMediaFiles(oldName, newName); + // Delete old location await this.delete(oldName); } + /** + * Save a project under a new name, migrating media files from the old folder. + * Used when the user renames the project and saves. Handles the case where the + * old folder doesn't exist yet (new project never saved). + */ + public async saveWithRename(oldName: string, newName: string, data: KGProject): Promise { + this.ensureInitialized(); + + // Save project JSON to the new folder + await this.save(newName, data, false); + + // Migrate media files only if the old folder exists + if (await this.exists(oldName)) { + await this.copyMediaFiles(oldName, newName); + await this.delete(oldName); + } + } + /** * Export a project folder as a zip Blob (.kgstudio bundle). * Includes project.json, meta.json, and all files in media/. @@ -374,6 +395,42 @@ export class KGProjectStorage { return candidate; } + // --- Media migration --- + + /** + * Copy all files from projects//media/ to projects//media/. + * If the source media directory doesn't exist, returns without error. + */ + private async copyMediaFiles(fromName: string, toName: string): Promise { + try { + const fromDir = await this.projectsDirHandle!.getDirectoryHandle(fromName); + let fromMedia: FileSystemDirectoryHandle; + try { + fromMedia = await fromDir.getDirectoryHandle(OPFS_CONSTANTS.MEDIA_DIR); + } catch { + // No media directory in source — nothing to copy + return; + } + + const toDir = await this.projectsDirHandle!.getDirectoryHandle(toName); + const toMedia = await toDir.getDirectoryHandle(OPFS_CONSTANTS.MEDIA_DIR, { create: true }); + + for await (const entry of fromMedia.values()) { + if (entry.kind === 'file') { + const fileHandle = entry as FileSystemFileHandle; + const file = await fileHandle.getFile(); + const newHandle = await toMedia.getFileHandle(entry.name, { create: true }); + const writable = await newHandle.createWritable(); + await writable.write(await file.arrayBuffer()); + await writable.close(); + } + } + } catch (error) { + console.error(`Error copying media files from "${fromName}" to "${toName}":`, error); + throw error; + } + } + // --- File I/O helpers --- private async writeFile( diff --git a/src/hooks/useGlobalKeyboardHandler.ts b/src/hooks/useGlobalKeyboardHandler.ts index 3ab7ae8..3d0d916 100644 --- a/src/hooks/useGlobalKeyboardHandler.ts +++ b/src/hooks/useGlobalKeyboardHandler.ts @@ -11,7 +11,7 @@ import { selectAllNotesInActiveRegion } from '../util/selectionUtil'; * Handles keyboard shortcuts defined in the configuration */ export const useGlobalKeyboardHandler = () => { - const { undo, redo, setStatus, isPlaying, startPlaying, stopPlaying, toggleLoop, projectName } = useProjectStore(); + const { undo, redo, setStatus, isPlaying, startPlaying, stopPlaying, toggleLoop, projectName, savedProjectName, setSavedProjectName, setProjectName } = useProjectStore(); useEffect(() => { const handleKeyDown = (event: KeyboardEvent) => { @@ -39,7 +39,10 @@ export const useGlobalKeyboardHandler = () => { // Early return to handle save immediately try { - saveProject(projectName, setStatus); + saveProject(projectName, savedProjectName, setStatus, (finalName) => { + setSavedProjectName(finalName); + if (finalName !== projectName) setProjectName(finalName); + }); } catch (error) { console.error('Save failed:', error); setStatus('Save failed'); @@ -154,7 +157,10 @@ export const useGlobalKeyboardHandler = () => { if (saveShortcut && matchesKeyboardShortcut(event, saveShortcut)) { event.preventDefault(); try { - saveProject(projectName, setStatus); + saveProject(projectName, savedProjectName, setStatus, (finalName) => { + setSavedProjectName(finalName); + if (finalName !== projectName) setProjectName(finalName); + }); } catch (error) { console.error('Save failed:', error); setStatus('Save failed'); diff --git a/src/stores/projectStore.ts b/src/stores/projectStore.ts index cbb9e27..451a439 100644 --- a/src/stores/projectStore.ts +++ b/src/stores/projectStore.ts @@ -38,6 +38,7 @@ function updateMaxBarsCSS(maxBars: number): void { interface ProjectState { // State projectName: string; + savedProjectName: string; // OPFS folder name where the project is currently saved tracks: KGTrack[]; currentStatus: string; maxBars: number; @@ -82,6 +83,7 @@ interface ProjectState { // Actions setProjectName: (name: string) => void; + setSavedProjectName: (name: string) => void; addTrack: () => Promise; addAudioTrack: () => Promise; importAudioToTrack: (trackId: string, file: File) => Promise; @@ -95,7 +97,7 @@ interface ProjectState { setStatus: (status: string) => void; removeStatus: () => void; refreshStatus: () => void; - loadProject: (project: KGProject | null) => Promise; + loadProject: (project: KGProject | null, savedName?: string) => Promise; setPlayheadPosition: (position: number) => void; startPlaying: () => Promise; stopPlaying: () => Promise; @@ -234,6 +236,7 @@ export const useProjectStore = create((set, get) => { return { // Initial state projectName: currentProject.getName(), + savedProjectName: currentProject.getName(), tracks: currentProject.getTracks() as KGTrack[], currentStatus: KGCore.instance().getStatus() || 'Unknown', maxBars: currentProject.getMaxBars(), @@ -281,10 +284,10 @@ export const useProjectStore = create((set, get) => { // Create and execute the change project property command const command = new ChangeProjectPropertyCommand({ name }); KGCore.instance().executeCommand(command); - + // Update the store state set({ projectName: name }); - + console.log(`Set project name to "${name}"`); } catch (error) { console.error('Error setting project name:', error); @@ -292,6 +295,10 @@ export const useProjectStore = create((set, get) => { } }, + setSavedProjectName: (name: string) => { + set({ savedProjectName: name }); + }, + addTrack: async () => { try { // Create and execute the add track command @@ -579,7 +586,7 @@ export const useProjectStore = create((set, get) => { set({ currentStatus: KGCore.instance().getStatus() || 'Unknown' }); }, - loadProject: async (project: KGProject | null = null) => { + loadProject: async (project: KGProject | null = null, savedName?: string) => { try { const { setPlayheadPosition } = get(); @@ -675,6 +682,7 @@ export const useProjectStore = create((set, get) => { // Force a new array reference for tracks to trigger React/Zustand re-render set({ projectName: projectToLoad.getName(), + savedProjectName: savedName ?? projectToLoad.getName(), tracks: [...tracks], maxBars, timeSignature, diff --git a/src/util/saveUtil.ts b/src/util/saveUtil.ts index 780e16a..a394744 100644 --- a/src/util/saveUtil.ts +++ b/src/util/saveUtil.ts @@ -2,58 +2,79 @@ import { KGProjectStorage, DuplicateEntryError } from '../core/io/KGProjectStora import { KGCore } from '../core/KGCore'; /** - * Save project utility function - * Handles saving the current project with proper error handling and user confirmation - * @param projectName - The name of the project to save - * @param setStatus - Function to update the status message - * @returns Promise - Returns true if save was successful, false otherwise + * Save project utility function. + * Detects renames (savedProjectName !== projectName) and migrates the OPFS folder, + * including media files. Duplicate name conflicts during rename auto-resolve with + * the {name} (1), {name} (2), ... pattern. + * + * @param projectName Current in-memory project name + * @param savedProjectName OPFS folder name the project was last saved under + * @param setStatus Function to update the status message + * @param onSaveSuccess Called with the final saved name on success */ export const saveProject = async ( projectName: string, - setStatus: (status: string) => void + savedProjectName: string, + setStatus: (status: string) => void, + onSaveSuccess: (finalName: string) => void, ): Promise => { const storage = KGProjectStorage.getInstance(); + const isRename = savedProjectName !== projectName; + if (isRename) { + // Determine the target name, resolving conflicts automatically + let targetName = projectName; + if (await storage.exists(projectName)) { + targetName = await storage.resolveUniqueName(projectName); + } + + try { + await storage.saveWithRename( + savedProjectName, + targetName, + KGCore.instance().getCurrentProject(), + ); + + const statusMsg = + targetName !== projectName + ? `Project renamed to "${targetName}" and saved` + : `Project "${targetName}" has been saved`; + setStatus(statusMsg); + onSaveSuccess(targetName); + return true; + } catch (error) { + console.error('Error saving renamed project:', error); + window.alert(`An error occurred while saving: ${error}`); + return false; + } + } + + // Same name — existing overwrite logic try { - await storage.save( - projectName, - KGCore.instance().getCurrentProject(), - false, - ); - + await storage.save(projectName, KGCore.instance().getCurrentProject(), false); setStatus(`Project "${projectName}" has been saved`); - console.log("project saved successfully"); + onSaveSuccess(projectName); return true; - } catch (error) { - console.error("Error saving project:", error); - if (error instanceof DuplicateEntryError) { - const confirmed = window.confirm(`Project "${projectName}" already exists. Do you want to overwrite it?`); - + const confirmed = window.confirm( + `Project "${projectName}" already exists. Do you want to overwrite it?`, + ); if (confirmed) { try { - await storage.save( - projectName, - KGCore.instance().getCurrentProject(), - true, - ); - + await storage.save(projectName, KGCore.instance().getCurrentProject(), true); setStatus(`Project "${projectName}" has been saved`); - console.log("project saved successfully after overwrite"); + onSaveSuccess(projectName); return true; - } catch (overwriteError) { - console.error("Error overwriting project:", overwriteError); + console.error('Error overwriting project:', overwriteError); window.alert(`An error occurred while overwriting the project: ${overwriteError}`); return false; } - } else { - // User cancelled the overwrite - return false; } + return false; } else { - console.error("Error saving project:", error); + console.error('Error saving project:', error); window.alert(`An unknown error ${error} occurred. Please try again.`); return false; } From 21a19918b532c68c2cfd6f981dfc7dc8087bba80 Mon Sep 17 00:00:00 2001 From: Xiaohan-Tian <157918347+Xiaohan-Tian@users.noreply.github.com> Date: Fri, 10 Apr 2026 12:30:57 -0700 Subject: [PATCH 04/13] fix: assigned an image as audio track's instrument-preview background --- public/resources/instruments/speaker.png | Bin 0 -> 584918 bytes src/components/InstrumentSelection.tsx | 10 +++++++--- src/components/track/TrackInfoItem.tsx | 9 ++++++--- 3 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 public/resources/instruments/speaker.png diff --git a/public/resources/instruments/speaker.png b/public/resources/instruments/speaker.png new file mode 100644 index 0000000000000000000000000000000000000000..6dafe66807631fb68829b8c31df54749a5b9a8dc GIT binary patch literal 584918 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 z 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�)HAi(BAVB!vZ83%f8nwEUfx=M$@EuGR{& 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"?9}Hu4TD?}J}9=l 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 { const { @@ -53,14 +54,15 @@ const InstrumentSelection: React.FC = () => { } }; - const previewImage = FLUIDR3_INSTRUMENT_MAP[currentInstrumentKey]?.image || 'piano.png'; - const previewAlt = FLUIDR3_INSTRUMENT_MAP[currentInstrumentKey]?.displayName || currentInstrumentKey; + const isAudioTrack = targetTrack instanceof KGAudioTrack; + const previewImage = isAudioTrack ? 'speaker.png' : (FLUIDR3_INSTRUMENT_MAP[currentInstrumentKey]?.image || 'piano.png'); + const previewAlt = isAudioTrack ? 'Audio Track' : (FLUIDR3_INSTRUMENT_MAP[currentInstrumentKey]?.displayName || currentInstrumentKey); const hasTargetTrack = !!targetTrack; return (

-

{hasTargetTrack ? `${previewAlt.toString()}` : ''}

+

{hasTargetTrack ? previewAlt : ''}

@@ -76,6 +78,7 @@ const InstrumentSelection: React.FC = () => { )}
{hasTargetTrack ? targetTrack.getName() : ''}
+ {!isAudioTrack && (
@@ -104,6 +107,7 @@ const InstrumentSelection: React.FC = () => {
+ )}
); }; diff --git a/src/components/track/TrackInfoItem.tsx b/src/components/track/TrackInfoItem.tsx index b97a603..f6d3e8d 100644 --- a/src/components/track/TrackInfoItem.tsx +++ b/src/components/track/TrackInfoItem.tsx @@ -273,9 +273,12 @@ const TrackInfoItem: React.FC = ({
{isAudioTrack ? ( -
- -
+ Audio Track ) : ( Date: Fri, 10 Apr 2026 13:28:01 -0700 Subject: [PATCH 05/13] feat: add Open Project modal with project browser, soft delete, and duplicate Replace the prompt-based project loading with a full modal UI: - Draggable/resizable panel with overlay and backdrop blur - Filterable project list with incremental fuzzy matching - Sortable columns (name, created, updated) with asc/desc toggle - Duplicate project with auto-rename on name conflict - Soft delete with trash view, restore, and permanent delete - Auto-purge trash after 30 days - Orphan media file cleanup on project open - Skip folders without valid meta.json in project listing --- src/components/Toolbar.tsx | 117 +++--- src/components/common/OpenProjectModal.css | 285 +++++++++++++ src/components/common/OpenProjectModal.tsx | 442 +++++++++++++++++++++ src/components/common/index.ts | 3 +- src/core/io/KGProjectStorage.ts | 147 ++++++- 5 files changed, 934 insertions(+), 60 deletions(-) create mode 100644 src/components/common/OpenProjectModal.css create mode 100644 src/components/common/OpenProjectModal.tsx diff --git a/src/components/Toolbar.tsx b/src/components/Toolbar.tsx index c1c5649..476c372 100644 --- a/src/components/Toolbar.tsx +++ b/src/components/Toolbar.tsx @@ -24,6 +24,7 @@ import { convertProjectToMidi, convertMidiToProject } from '../util/midiUtil'; import { KEY_SIGNATURE_MAP } from '../constants/coreConstants'; import KGDropdown from './common/KGDropdown'; import FileImportModal from './common/FileImportModal'; +import OpenProjectModal from './common/OpenProjectModal'; import { clearChatHistoryAndUI } from '../util/chatUtil'; import PianoIcon from './common/icons/PianoIcon'; @@ -55,6 +56,9 @@ const Toolbar: React.FC = () => { // State for import modal const [showImportModal, setShowImportModal] = React.useState(false); + + // State for open project modal + const [showOpenProject, setShowOpenProject] = React.useState(false); // Key signature options const keySignatureOptions = Object.keys(KEY_SIGNATURE_MAP) as KeySignature[]; @@ -86,6 +90,12 @@ const Toolbar: React.FC = () => { const { loadProject: storeLoadProject } = useProjectStore.getState(); await storeLoadProject(project, savedName); + // Clean up orphan media files (only on open, not on save) + if (savedName) { + const storage = KGProjectStorage.getInstance(); + await storage.cleanupOrphanMedia(savedName, project); + } + // Update status to indicate project loaded setStatus(`${sourceDescription} loaded successfully`); @@ -100,73 +110,55 @@ const Toolbar: React.FC = () => { } }; + // Core logic for creating a new project (no confirmation dialog) + const createNewProject = () => { + if (DEBUG_MODE.TOOLBAR) { + console.log("creating new project"); + } + + cleanupProjectState(); + clearChatHistoryAndUI(); + + const newProject = new KGProject(); + const { loadProject: storeLoadProject } = useProjectStore.getState(); + storeLoadProject(newProject); + + setStatus(`New project "${newProject.getName()}" created`); + + if (DEBUG_MODE.TOOLBAR) { + console.log("new project created successfully"); + } + }; + // Handler functions for file operations const handleNewProject = () => { const confirmed = window.confirm("Are you sure you want to create a new project? Any unsaved changes will be lost."); if (confirmed) { - if (DEBUG_MODE.TOOLBAR) { - console.log("user clicked new button"); - } - - // Clean up UI state first - cleanupProjectState(); - - // Automatically clear chat history when creating a new project - clearChatHistoryAndUI(); - - // Create a new project with default parameters - const newProject = new KGProject(); - - // Load the new project using the store's loadProject method - const { loadProject: storeLoadProject } = useProjectStore.getState(); - storeLoadProject(newProject); - - // Default track creation is handled centrally in the store's loadProject - - // Update status to indicate new project created - setStatus(`New project "${newProject.getName()}" created`); - - if (DEBUG_MODE.TOOLBAR) { - console.log("new project created successfully"); - } + createNewProject(); } }; - const handleLoadProject = async () => { - const confirmed = window.confirm("Are you sure you want to load another project? Any unsaved changes will be lost."); - if (confirmed) { - if (DEBUG_MODE.TOOLBAR) { - console.log("user clicked load button"); - } - - // Ask user for project name - const projectNameToLoad = window.prompt("Enter the project name to load:"); - - // Check if user input is empty or null (user cancelled) - if (!projectNameToLoad || projectNameToLoad.trim() === '') { - if (projectNameToLoad !== null) { // Only show error if user didn't cancel - window.alert("Project name cannot be empty. Please enter a valid project name."); - } + const handleLoadProject = () => { + if (DEBUG_MODE.TOOLBAR) { + console.log("user clicked load button"); + } + setShowOpenProject(true); + }; + + const handleOpenProjectSelect = async (projectNameToLoad: string) => { + try { + const storage = KGProjectStorage.getInstance(); + const loadedProject = await storage.load(projectNameToLoad); + + if (!loadedProject) { + window.alert(`Project "${projectNameToLoad}" not found.`); return; } - - try { - // Try to load the project from storage - const storage = KGProjectStorage.getInstance(); - const loadedProject = await storage.load(projectNameToLoad.trim()); - - if (!loadedProject) { - window.alert(`Project "${projectNameToLoad}" not found. Please check the project name and try again.`); - return; - } - - // Use common loading logic — pass the OPFS folder name so savedProjectName is set correctly - await loadProjectFromData(loadedProject, `Project "${projectNameToLoad}"`, projectNameToLoad.trim()); - - } catch (error) { - console.error("Error loading project:", error); - window.alert(`An error occurred while loading the project: ${error}`); - } + + await loadProjectFromData(loadedProject, `Project "${projectNameToLoad}"`, projectNameToLoad); + } catch (error) { + console.error("Error loading project:", error); + window.alert(`An error occurred while loading the project: ${error}`); } }; @@ -842,6 +834,15 @@ const Toolbar: React.FC = () => { title="Import Project" description="Drag and drop your project file here" /> + + {showOpenProject && ( + setShowOpenProject(false)} + onOpenProject={handleOpenProjectSelect} + currentProjectName={savedProjectName} + onCreateNewProject={createNewProject} + /> + )} ); }; diff --git a/src/components/common/OpenProjectModal.css b/src/components/common/OpenProjectModal.css new file mode 100644 index 0000000..8a3c6c8 --- /dev/null +++ b/src/components/common/OpenProjectModal.css @@ -0,0 +1,285 @@ +/* Overlay — blocks and blurs content below */ +.open-project-overlay { + position: fixed; + inset: 0; + background-color: rgba(0, 0, 0, 0.5); + backdrop-filter: blur(3px); + z-index: 2000; +} + +/* Open Project Panel — follows PianoRoll panel pattern */ +.open-project-panel { + position: fixed; + background-color: #2d2d2d; + border: 1px solid #3a3a3a; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.5); + display: flex; + flex-direction: column; + overflow: hidden; +} + +/* Header — draggable */ +.open-project-header { + height: 30px; + background-color: #1e1e1e; + border-bottom: 1px solid #3a3a3a; + display: flex; + align-items: center; + padding: 0 10px; + cursor: move; + user-select: none; + flex-shrink: 0; +} + +.open-project-title { + flex: 1; + text-align: center; + font-size: 14px; + color: #e0e0e0; + text-transform: uppercase; +} + +/* Filter bar — sticky at top */ +.open-project-filter { + padding: 10px 12px; + background-color: #252525; + border-bottom: 1px solid #3a3a3a; + flex-shrink: 0; +} + +.open-project-filter-row { + display: flex; + align-items: center; + gap: 10px; +} + +.open-project-filter input { + flex: 1; + padding: 6px 10px; + background-color: #1e1e1e; + border: 1px solid #3a3a3a; + border-radius: 4px; + color: #e0e0e0; + font-size: 13px; + outline: none; + box-sizing: border-box; +} + +.open-project-filter input:focus { + border-color: #7b68ee; +} + +.open-project-filter input::placeholder { + color: #777; +} + +/* View toggle (Projects / Trash) */ +.open-project-view-toggle { + display: flex; + border: 1px solid #3a3a3a; + border-radius: 4px; + overflow: hidden; + flex-shrink: 0; +} + +.open-project-toggle-btn { + background-color: #1e1e1e; + color: #999; + border: none; + padding: 5px 12px; + font-size: 12px; + cursor: pointer; + transition: background-color 0.1s, color 0.1s; +} + +.open-project-toggle-btn:not(:last-child) { + border-right: 1px solid #3a3a3a; +} + +.open-project-toggle-btn:hover { + color: #e0e0e0; +} + +.open-project-toggle-btn.active { + background-color: #7b68ee; + color: #fff; +} + +/* Trash hint banner */ +.open-project-trash-hint { + padding: 6px 12px; + background-color: #3a2a1a; + border-bottom: 1px solid #5a3a1a; + color: #d4a054; + font-size: 11px; + flex-shrink: 0; +} + +/* Sort header row */ +.open-project-sort-header { + display: flex; + align-items: center; + padding: 6px 12px; + background-color: #252525; + border-bottom: 1px solid #3a3a3a; + font-size: 11px; + color: #999; + text-transform: uppercase; + user-select: none; + flex-shrink: 0; +} + +.open-project-sort-col { + cursor: pointer; + display: flex; + align-items: center; + gap: 4px; + padding: 2px 4px; + border-radius: 3px; +} + +.open-project-sort-col:hover { + color: #e0e0e0; + background-color: #3a3a3a; +} + +.open-project-sort-col.active { + color: #7b68ee; +} + +.open-project-sort-col-name { + flex: 1; +} + +.open-project-sort-col-created, +.open-project-sort-col-updated { + width: 160px; + text-align: left; +} + +/* Scrollable project list */ +.open-project-list { + flex: 1; + overflow-y: auto; + overflow-x: hidden; +} + +/* Individual project row */ +.open-project-item { + display: flex; + align-items: center; + padding: 10px 12px; + border-bottom: 1px solid #333; + cursor: pointer; + transition: background-color 0.1s; +} + +.open-project-item:hover { + background-color: #353535; +} + +.open-project-item-info { + flex: 1; + min-width: 0; +} + +.open-project-item-name { + font-size: 14px; + color: #e0e0e0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.open-project-item-meta { + font-size: 11px; + color: #888; + margin-top: 3px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +/* Action buttons container */ +.open-project-item-actions { + display: flex; + align-items: center; + gap: 6px; + flex-shrink: 0; + margin-left: 10px; +} + +/* Open button */ +.open-project-item-open-btn { + background-color: #7b68ee; + color: #fff; + border: none; + border-radius: 4px; + padding: 5px 14px; + font-size: 12px; + cursor: pointer; +} + +.open-project-item-open-btn:hover { + background-color: #6a58d6; +} + +/* Icon action buttons (duplicate, delete, restore, perm-delete) */ +.open-project-item-action-btn { + background: transparent; + border: 1px solid #555; + border-radius: 4px; + color: #bbb; + padding: 5px 8px; + font-size: 12px; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: background-color 0.1s, color 0.1s, border-color 0.1s; +} + +.open-project-item-action-btn:hover { + background-color: #444; + color: #e0e0e0; + border-color: #777; +} + +.open-project-item-permdelete-btn:hover { + background-color: #5a2020; + color: #ff6666; + border-color: #ff4444; +} + +.open-project-item-restore-btn:hover { + background-color: #1a3a2a; + color: #66cc88; + border-color: #44aa66; +} + +/* Loading and empty states */ +.open-project-loading, +.open-project-empty { + display: flex; + align-items: center; + justify-content: center; + flex: 1; + color: #888; + font-size: 14px; + padding: 40px; +} + +/* Resize handle — same as PianoRoll */ +.open-project-panel .resize-handle { + position: absolute; + right: 5px; + bottom: 5px; + width: 20px; + height: 20px; + cursor: nwse-resize; + color: #999; + display: flex; + align-items: center; + justify-content: center; + z-index: 100; +} diff --git a/src/components/common/OpenProjectModal.tsx b/src/components/common/OpenProjectModal.tsx new file mode 100644 index 0000000..5f93577 --- /dev/null +++ b/src/components/common/OpenProjectModal.tsx @@ -0,0 +1,442 @@ +import React, { useState, useEffect, useRef, useCallback } from 'react'; +import { createPortal } from 'react-dom'; +import { FaTimes, FaGripLines, FaSortUp, FaSortDown, FaCopy, FaTrash, FaUndo } from 'react-icons/fa'; +import { KGProjectStorage, type ProjectMeta } from '../../core/io/KGProjectStorage'; +import { isValidProjectName } from '../../util/projectNameUtil'; +import './OpenProjectModal.css'; + +interface OpenProjectModalProps { + onClose: () => void; + onOpenProject: (projectName: string) => Promise; + currentProjectName: string | null; + onCreateNewProject: () => void; +} + +type SortField = 'name' | 'createdAt' | 'updatedAt'; +type SortDirection = 'asc' | 'desc'; +type ViewMode = 'projects' | 'trash'; + +const THIRTY_DAYS_MS = 30 * 24 * 60 * 60 * 1000; + +/** + * Incremental fuzzy filter: characters in the filter must appear in order + * within the project name (case-insensitive, ignoring non-alphanumeric chars). + */ +const matchesFilter = (projectName: string, filter: string): boolean => { + if (!filter) return true; + const normalizedName = projectName.toLowerCase().replace(/[^a-z0-9]/g, ''); + const normalizedFilter = filter.toLowerCase().replace(/[^a-z0-9]/g, ''); + + let nameIndex = 0; + for (let i = 0; i < normalizedFilter.length; i++) { + const charIndex = normalizedName.indexOf(normalizedFilter[i], nameIndex); + if (charIndex === -1) return false; + nameIndex = charIndex + 1; + } + return true; +}; + +const formatDate = (timestamp: number): string => { + if (timestamp === 0) return 'Unknown'; + const date = new Date(timestamp); + return date.toLocaleDateString(undefined, { + year: 'numeric', + month: 'short', + day: 'numeric', + hour: '2-digit', + minute: '2-digit', + }); +}; + +const OpenProjectModal: React.FC = ({ onClose, onOpenProject, currentProjectName, onCreateNewProject }) => { + const panelRef = useRef(null); + + // Position & size + const [position, setPosition] = useState({ x: 0, y: 0 }); + const [size, setSize] = useState({ width: 600, height: 400 }); + + // Drag & resize + const [isDragging, setIsDragging] = useState(false); + const [isResizing, setIsResizing] = useState(false); + const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 }); + + // Data + const [projects, setProjects] = useState([]); + const [isLoading, setIsLoading] = useState(true); + const [filter, setFilter] = useState(''); + + // Sort + const [sortField, setSortField] = useState('updatedAt'); + const [sortDirection, setSortDirection] = useState('desc'); + + // View mode toggle + const [viewMode, setViewMode] = useState('projects'); + + // Calculate initial position/size to fill main-content area + useEffect(() => { + const toolbarEl = document.querySelector('.toolbar'); + const statusBarEl = document.querySelector('.status-bar'); + + const width = Math.max(400, window.innerWidth - 400); + const height = Math.max(300, window.innerHeight - 200); + const x = (window.innerWidth - width) / 2; + const y = (window.innerHeight - height) / 2; + + setPosition({ x, y }); + setSize({ width, height }); + }, []); + + // Fetch projects when view mode changes + const fetchProjects = useCallback(async (mode: ViewMode) => { + setIsLoading(true); + try { + const storage = KGProjectStorage.getInstance(); + + // Auto-purge old trash when switching to trash view + if (mode === 'trash') { + await storage.purgeDeletedOlderThan(THIRTY_DAYS_MS); + } + + const list = await storage.listWithMeta(mode === 'trash'); + setProjects(list); + } catch (error) { + console.error('Error loading project list:', error); + } finally { + setIsLoading(false); + } + }, []); + + useEffect(() => { + fetchProjects(viewMode); + }, [viewMode, fetchProjects]); + + // Escape key to close + useEffect(() => { + const handleKeyDown = (e: KeyboardEvent) => { + if (e.key === 'Escape') onClose(); + }; + window.addEventListener('keydown', handleKeyDown); + return () => window.removeEventListener('keydown', handleKeyDown); + }, [onClose]); + + // Drag & resize mouse handling + const handleMouseDown = (e: React.MouseEvent, action: 'drag' | 'resize') => { + if (action === 'drag') { + setIsDragging(true); + if (panelRef.current) { + const rect = panelRef.current.getBoundingClientRect(); + setDragOffset({ x: e.clientX - rect.left, y: e.clientY - rect.top }); + } + } else { + setIsResizing(true); + e.preventDefault(); + } + }; + + useEffect(() => { + const handleMouseMove = (e: MouseEvent) => { + if (isDragging) { + setPosition({ x: e.clientX - dragOffset.x, y: e.clientY - dragOffset.y }); + } else if (isResizing) { + setSize({ + width: Math.max(400, e.clientX - position.x), + height: Math.max(300, e.clientY - position.y), + }); + } + }; + + const handleMouseUp = () => { + setIsDragging(false); + setIsResizing(false); + }; + + if (isDragging || isResizing) { + document.addEventListener('mousemove', handleMouseMove); + document.addEventListener('mouseup', handleMouseUp); + } + + return () => { + document.removeEventListener('mousemove', handleMouseMove); + document.removeEventListener('mouseup', handleMouseUp); + }; + }, [isDragging, isResizing, dragOffset, position]); + + // Sort toggle + const handleSortClick = useCallback((field: SortField) => { + if (field === sortField) { + setSortDirection(d => (d === 'asc' ? 'desc' : 'asc')); + } else { + setSortField(field); + setSortDirection(field === 'name' ? 'asc' : 'desc'); + } + }, [sortField]); + + // Filter + sort projects + const filteredProjects = React.useMemo(() => { + const filtered = projects.filter(p => matchesFilter(p.name, filter)); + + filtered.sort((a, b) => { + let cmp: number; + if (sortField === 'name') { + cmp = a.name.localeCompare(b.name); + } else { + cmp = a[sortField] - b[sortField]; + } + return sortDirection === 'asc' ? cmp : -cmp; + }); + + return filtered; + }, [projects, filter, sortField, sortDirection]); + + // --- Action handlers --- + + const handleOpen = async (projectName: string) => { + await onOpenProject(projectName); + onClose(); + }; + + const handleDuplicate = async (e: React.MouseEvent, projectName: string) => { + e.stopPropagation(); + const newName = window.prompt('Enter a name for the duplicated project:', projectName); + if (!newName || newName.trim() === '') return; + + const trimmed = newName.trim(); + if (!isValidProjectName(trimmed)) { + window.alert('Invalid project name. Only letters, numbers, spaces, hyphens, underscores, periods, and parentheses are allowed.'); + return; + } + + try { + const storage = KGProjectStorage.getInstance(); + const finalName = await storage.resolveUniqueName(trimmed); + await storage.duplicate(projectName, finalName); + // Open the duplicated project + await onOpenProject(finalName); + onClose(); + } catch (error) { + console.error('Error duplicating project:', error); + window.alert(`Failed to duplicate project: ${error}`); + } + }; + + const handleSoftDelete = async (e: React.MouseEvent, projectName: string) => { + e.stopPropagation(); + try { + const storage = KGProjectStorage.getInstance(); + await storage.softDelete(projectName); + // Refresh list + await fetchProjects(viewMode); + } catch (error) { + console.error('Error deleting project:', error); + window.alert(`Failed to delete project: ${error}`); + } + }; + + const handleRestore = async (e: React.MouseEvent, projectName: string) => { + e.stopPropagation(); + try { + const storage = KGProjectStorage.getInstance(); + await storage.restore(projectName); + await fetchProjects(viewMode); + } catch (error) { + console.error('Error restoring project:', error); + window.alert(`Failed to restore project: ${error}`); + } + }; + + const handlePermanentDelete = async (e: React.MouseEvent, projectName: string) => { + e.stopPropagation(); + const confirmed = window.confirm( + `Are you sure you want to permanently delete "${projectName}"?\n\nThis operation cannot be undone.` + ); + if (!confirmed) return; + + try { + const storage = KGProjectStorage.getInstance(); + await storage.delete(projectName); + await fetchProjects(viewMode); + + // If the deleted project is the currently open one, create a new project + if (currentProjectName && projectName === currentProjectName) { + onCreateNewProject(); + } + } catch (error) { + console.error('Error permanently deleting project:', error); + window.alert(`Failed to permanently delete project: ${error}`); + } + }; + + const handleViewModeChange = (mode: ViewMode) => { + setViewMode(mode); + setFilter(''); + }; + + const SortIcon: React.FC<{ field: SortField }> = ({ field }) => { + if (sortField !== field) return null; + return sortDirection === 'asc' ? : ; + }; + + const content = ( +
+
e.stopPropagation()} + style={{ + left: `${position.x}px`, + top: `${position.y}px`, + width: `${size.width}px`, + height: `${size.height}px`, + zIndex: 2001, + }} + > + {/* Header */} +
handleMouseDown(e, 'drag')}> + +
Open Project
+
+ + {/* Filter + view toggle */} +
+
+ setFilter(e.target.value)} + autoFocus + /> +
+ + +
+
+
+ + {/* Trash hint */} + {viewMode === 'trash' && ( +
+ Deleted projects are automatically removed after 30 days. +
+ )} + + {/* Sort header */} +
+ handleSortClick('name')} + > + Name + + handleSortClick('createdAt')} + > + Created + + handleSortClick('updatedAt')} + > + Updated + +
+ + {/* Project list */} + {isLoading ? ( +
Loading projects...
+ ) : filteredProjects.length === 0 ? ( +
+ {projects.length === 0 + ? (viewMode === 'trash' ? 'Trash is empty' : 'No saved projects') + : 'No projects match the filter'} +
+ ) : ( +
+ {filteredProjects.map((project) => ( +
handleOpen(project.name) : undefined} + > +
+
{project.name}
+
+ Created {formatDate(project.createdAt)} · Updated {formatDate(project.updatedAt)} + {viewMode === 'trash' && project.deletedAt && ( + <> · Deleted {formatDate(project.deletedAt)} + )} +
+
+
+ {viewMode === 'projects' ? ( + <> + + + + + ) : ( + <> + + + + )} +
+
+ ))} +
+ )} + + {/* Resize handle */} +
handleMouseDown(e, 'resize')}> + +
+
+
+ ); + + return createPortal(content, document.body); +}; + +export default OpenProjectModal; diff --git a/src/components/common/index.ts b/src/components/common/index.ts index 3d8c0ea..b0dc2f8 100644 --- a/src/components/common/index.ts +++ b/src/components/common/index.ts @@ -1,4 +1,5 @@ export { default as KGDropdown } from './KGDropdown'; export { default as Playhead } from './Playhead'; export { default as FileImportModal } from './FileImportModal'; -export { default as LoadingOverlay } from './LoadingOverlay'; \ No newline at end of file +export { default as LoadingOverlay } from './LoadingOverlay'; +export { default as OpenProjectModal } from './OpenProjectModal'; \ No newline at end of file diff --git a/src/core/io/KGProjectStorage.ts b/src/core/io/KGProjectStorage.ts index 3fc296d..0ef41f1 100644 --- a/src/core/io/KGProjectStorage.ts +++ b/src/core/io/KGProjectStorage.ts @@ -4,6 +4,7 @@ import { KGProject } from '../KGProject'; import { upgradeProjectToLatest } from '../project-upgrader/KGProjectUpgrader'; import { isValidProjectName } from '../../util/projectNameUtil'; import { OPFS_CONSTANTS } from '../../constants/coreConstants'; +import { KGAudioRegion } from '../region/KGAudioRegion'; export class DuplicateEntryError extends Error { constructor(name: string) { @@ -12,10 +13,11 @@ export class DuplicateEntryError extends Error { } } -interface ProjectMeta { +export interface ProjectMeta { name: string; createdAt: number; updatedAt: number; + deletedAt?: number | null; } /** @@ -154,6 +156,137 @@ export class KGProjectStorage { return names.sort(); } + /** + * List all projects with metadata (name, createdAt, updatedAt). + * Reads each project's meta.json without loading the full project data. + * @param deleted - if true, return only soft-deleted projects; if false (default), return only non-deleted projects. + */ + public async listWithMeta(deleted: boolean = false): Promise { + this.ensureInitialized(); + + const results: ProjectMeta[] = []; + for await (const entry of this.projectsDirHandle!.values()) { + if (entry.kind === 'directory') { + try { + const dirHandle = await this.projectsDirHandle!.getDirectoryHandle(entry.name); + const metaJson = await this.readFile(dirHandle, OPFS_CONSTANTS.METADATA_FILE); + const meta = JSON.parse(metaJson) as ProjectMeta; + const isDeleted = !!meta.deletedAt; + if (isDeleted === deleted) { + results.push(meta); + } + } catch { + // Skip folders without a valid meta.json (e.g. temporary unsaved projects) + } + } + } + return results.sort((a, b) => b.updatedAt - a.updatedAt); + } + + /** + * Soft-delete a project by setting deletedAt in its meta.json. + */ + public async softDelete(name: string): Promise { + this.ensureInitialized(); + const projectDir = await this.projectsDirHandle!.getDirectoryHandle(name); + const meta = await this.readMeta(projectDir, name); + meta.deletedAt = Date.now(); + await this.writeFile(projectDir, OPFS_CONSTANTS.METADATA_FILE, JSON.stringify(meta, null, 2)); + } + + /** + * Restore a soft-deleted project by removing deletedAt from its meta.json. + */ + public async restore(name: string): Promise { + this.ensureInitialized(); + const projectDir = await this.projectsDirHandle!.getDirectoryHandle(name); + const meta = await this.readMeta(projectDir, name); + delete meta.deletedAt; + await this.writeFile(projectDir, OPFS_CONSTANTS.METADATA_FILE, JSON.stringify(meta, null, 2)); + } + + /** + * Duplicate a project under a new name, copying all files including media. + */ + public async duplicate(sourceName: string, targetName: string): Promise { + this.ensureInitialized(); + + if (!isValidProjectName(targetName)) { + throw new Error(`Invalid project name "${targetName}".`); + } + + // Load the source project + const project = await this.load(sourceName); + if (!project) { + throw new Error(`Project "${sourceName}" not found.`); + } + + // Save to new location with fresh timestamps + project.setName(targetName); + await this.save(targetName, project, false); + + // Copy media files + await this.copyMediaFiles(sourceName, targetName); + } + + /** + * Permanently delete all soft-deleted projects older than the given age in milliseconds. + */ + public async purgeDeletedOlderThan(ageMs: number): Promise { + this.ensureInitialized(); + const cutoff = Date.now() - ageMs; + const deleted = await this.listWithMeta(true); + for (const meta of deleted) { + if (meta.deletedAt && meta.deletedAt < cutoff) { + await this.delete(meta.name); + } + } + } + + /** + * Remove orphan media files that are not referenced by any track in the project. + */ + public async cleanupOrphanMedia(name: string, project: KGProject): Promise { + this.ensureInitialized(); + + try { + const projectDir = await this.projectsDirHandle!.getDirectoryHandle(name); + let mediaDir: FileSystemDirectoryHandle; + try { + mediaDir = await projectDir.getDirectoryHandle(OPFS_CONSTANTS.MEDIA_DIR); + } catch { + return; // No media directory — nothing to clean up + } + + // Collect all referenced audio file IDs from the project + const referencedIds = new Set(); + for (const track of project.getTracks()) { + for (const region of track.getRegions()) { + if (region instanceof KGAudioRegion) { + const fileId = region.getAudioFileId(); + if (fileId) referencedIds.add(fileId); + } + } + } + + // Iterate media files and remove orphans + const orphans: string[] = []; + for await (const entry of mediaDir.values()) { + if (entry.kind === 'file' && !referencedIds.has(entry.name)) { + orphans.push(entry.name); + } + } + + for (const orphan of orphans) { + await mediaDir.removeEntry(orphan); + console.log(`Removed orphan media file "${orphan}" from project "${name}"`); + } + } catch (error) { + // Non-critical — log but don't throw + console.warn(`Error cleaning up orphan media for project "${name}":`, error); + } + } + /** * Delete a project and all its files. */ @@ -452,4 +585,16 @@ export class KGProjectStorage { const file = await fileHandle.getFile(); return file.text(); } + + private async readMeta( + projectDir: FileSystemDirectoryHandle, + name: string, + ): Promise { + try { + const raw = await this.readFile(projectDir, OPFS_CONSTANTS.METADATA_FILE); + return JSON.parse(raw) as ProjectMeta; + } catch { + return { name, createdAt: 0, updatedAt: 0 }; + } + } } From 4917e540488ec754129cf3f239f59e2cb90ca421 Mon Sep 17 00:00:00 2001 From: Xiaohan-Tian <157918347+Xiaohan-Tian@users.noreply.github.com> Date: Fri, 10 Apr 2026 13:47:37 -0700 Subject: [PATCH 06/13] feat: enhanced emulated bash terminal (by using browser's input box pop-up loop) --- src/core/KGDebugger.ts | 53 ++++++++++++++++++++++++++++++++++++++++++ src/main.tsx | 6 +++-- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/src/core/KGDebugger.ts b/src/core/KGDebugger.ts index 40027c4..6fc188a 100644 --- a/src/core/KGDebugger.ts +++ b/src/core/KGDebugger.ts @@ -30,6 +30,7 @@ export class KGDebugger { 'testToolCall(jsonInput)', 'inputChatBox(content, interval?)', 'opfs(command)', + 'startShell()', ]); } @@ -346,6 +347,7 @@ export class KGDebugger { console.log(" testToolCall(input) - Execute tool call(s) from JSON and show results"); console.log(" inputChatBox(content, interval?) - Type into ChatBox textarea and submit with Enter"); console.log(" opfs(command) - OPFS file browser (pwd, ls, cd, cat, dl, rm)"); + console.log(" startShell() - Start interactive OPFS shell (prompt-based loop)"); console.log(" help() - Show this help"); console.log(""); console.log("💡 Usage tips:"); @@ -449,6 +451,57 @@ export class KGDebugger { } } + /** + * Start an interactive OPFS shell using browser prompt() dialogs. + * Each prompt shows the current working directory. Type commands and click OK. + * Click Cancel or type 'exit'/'quit' to end the session. + */ + public async startShell(): Promise { + console.log('📟 OPFS Interactive Shell'); + console.log(' Commands: pwd, ls, cd , cat , dl , rm '); + console.log(' Type "exit" or click Cancel to quit.\n'); + + let lastOutput = ''; + + while (true) { + const cwd = '/' + this.opfsCwd.join('/'); + const promptText = lastOutput + ? `${lastOutput}\n\nopfs:${cwd}$ ` + : `opfs:${cwd}$ `; + const input = prompt(promptText); + + if (input === null) break; + + const trimmed = input.trim(); + if (trimmed === '') continue; + if (trimmed === 'exit' || trimmed === 'quit') break; + + // Capture console output during command execution + const captured: string[] = []; + const origLog = console.log; + const origError = console.error; + console.log = (...args: unknown[]) => { + origLog(...args); + captured.push(args.map(String).join(' ')); + }; + console.error = (...args: unknown[]) => { + origError(...args); + captured.push(args.map(String).join(' ')); + }; + + try { + await this.opfs(trimmed); + } finally { + console.log = origLog; + console.error = origError; + } + + lastOutput = captured.join('\n'); + } + + console.log('📟 Shell exited.'); + } + // --- OPFS Shell --- /** Current working directory path segments (relative to OPFS root) */ diff --git a/src/main.tsx b/src/main.tsx index 13b6272..c3caa3c 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -17,8 +17,10 @@ await KGMidiInput.instance().initialize(); // Attach debugger to global window in development mode if (import.meta.env.DEV) { - (window as unknown as { KGDebugger: KGDebugger }).KGDebugger = KGDebugger.instance(); - console.log('🔧 KGDebugger attached to window - try: KGDebugger.help()'); + const dbg = KGDebugger.instance(); + (window as unknown as { KGDebugger: KGDebugger; sh: () => Promise }).KGDebugger = dbg; + (window as unknown as { sh: () => Promise }).sh = () => dbg.startShell(); + console.log('🔧 KGDebugger attached to window - try: KGDebugger.help() or sh()'); } // Start audio context on first user interaction From 139684b413ceb034715eb566aecd33de649308b6 Mon Sep 17 00:00:00 2001 From: Xiaohan-Tian <157918347+Xiaohan-Tian@users.noreply.github.com> Date: Fri, 10 Apr 2026 18:17:36 -0700 Subject: [PATCH 07/13] =?UTF-8?q?feat:=20add=20bar=20width=20multiplier=20?= =?UTF-8?q?(1x=E2=80=938x=20horizontal=20zoom)=20for=20track=20grid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Toolbar.css | 46 +++++++++++++++++++ src/components/Toolbar.tsx | 39 ++++++++++++++++ src/constants/uiConstants.ts | 1 + src/core/KGProject.ts | 17 ++++++- .../project-upgrader/KGProjectUpgrader.ts | 5 ++ src/core/project-upgrader/upgradeToV5.ts | 13 ++++++ src/stores/projectStore.ts | 38 ++++++++++++--- src/test/utils/mock-data.ts | 3 +- 8 files changed, 153 insertions(+), 9 deletions(-) create mode 100644 src/core/project-upgrader/upgradeToV5.ts diff --git a/src/components/Toolbar.css b/src/components/Toolbar.css index 6e7441c..e3a8b5c 100644 --- a/src/components/Toolbar.css +++ b/src/components/Toolbar.css @@ -153,3 +153,49 @@ width: 100px; left: 0; } + +/* Clickable zoom styling */ +.current-zoom { + font-family: 'Courier New', 'Monaco', 'Menlo', 'Ubuntu Mono', monospace; + font-weight: normal; + letter-spacing: 0.5px; + cursor: pointer; + transition: background-color 0.2s ease; + padding: 2px 4px; + border-radius: 2px; +} + +.current-zoom:hover { + background-color: #4a4a4a; + color: #fff; +} + +.zoom-slider-popup { + position: absolute; + top: 100%; + left: 50%; + transform: translateX(-50%); + background-color: #2d2d2d; + border: 1px solid #444; + border-radius: 3px; + padding: 8px 12px; + z-index: 10000; + display: flex; + align-items: center; + gap: 8px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); + white-space: nowrap; + margin-top: 2px; +} + +.zoom-slider-popup input[type="range"] { + width: 120px; +} + +.zoom-slider-label { + font-family: 'Courier New', 'Monaco', 'Menlo', 'Ubuntu Mono', monospace; + font-size: 12px; + color: #e0e0e0; + min-width: 20px; + text-align: center; +} diff --git a/src/components/Toolbar.tsx b/src/components/Toolbar.tsx index 476c372..ab71b56 100644 --- a/src/components/Toolbar.tsx +++ b/src/components/Toolbar.tsx @@ -36,6 +36,7 @@ const Toolbar: React.FC = () => { isPlaying, startPlaying, stopPlaying, setPlayheadPosition, currentTime, setBpm, setTimeSignature, setKeySignature, maxBars, setMaxBars, + barWidthMultiplier, setBarWidthMultiplier, isLooping, toggleLoop, canUndo, canRedo, undoDescription, redoDescription, undo, redo, toggleChatBox, toggleSettings, cleanupProjectState, @@ -57,9 +58,25 @@ const Toolbar: React.FC = () => { // State for import modal const [showImportModal, setShowImportModal] = React.useState(false); + // State for zoom slider popup + const [showZoomSlider, setShowZoomSlider] = React.useState(false); + const zoomSliderRef = React.useRef(null); + // State for open project modal const [showOpenProject, setShowOpenProject] = React.useState(false); + // Close zoom slider on click outside + React.useEffect(() => { + if (!showZoomSlider) return; + const handleClickOutside = (e: MouseEvent) => { + if (zoomSliderRef.current && !zoomSliderRef.current.contains(e.target as Node)) { + setShowZoomSlider(false); + } + }; + document.addEventListener('mousedown', handleClickOutside); + return () => document.removeEventListener('mousedown', handleClickOutside); + }, [showZoomSlider]); + // Key signature options const keySignatureOptions = Object.keys(KEY_SIGNATURE_MAP) as KeySignature[]; @@ -790,6 +807,28 @@ const Toolbar: React.FC = () => {
+
+ setShowZoomSlider(!showZoomSlider)} + style={{ cursor: 'pointer' }} + > + {barWidthMultiplier}x + + {showZoomSlider && ( +
+ setBarWidthMultiplier(parseInt(e.target.value))} + /> + {barWidthMultiplier}x +
+ )} +
{currentTime}
diff --git a/src/constants/uiConstants.ts b/src/constants/uiConstants.ts index 6eb9ded..32796dc 100644 --- a/src/constants/uiConstants.ts +++ b/src/constants/uiConstants.ts @@ -18,6 +18,7 @@ export const DEBUG_MODE = { // Toolbar related constants export const TOOLBAR_CONSTANTS = { + BASE_BAR_WIDTH: 40, // matches --track-grid-bar-width default in variables.css }; // Region related constants diff --git a/src/core/KGProject.ts b/src/core/KGProject.ts index 787f1c4..8c421a2 100644 --- a/src/core/KGProject.ts +++ b/src/core/KGProject.ts @@ -44,11 +44,15 @@ export class KGProject { @WithDefault([0, 0]) private loopingRange: [number, number] = [0, 0]; // [startBar, endBar] - bar indices (0-based) + @Expose() + @WithDefault(1) + private barWidthMultiplier: number = 1; + @Expose() @WithDefault(0) private projectStructureVersion: number = 0; - public static readonly CURRENT_PROJECT_STRUCTURE_VERSION: number = 4; + public static readonly CURRENT_PROJECT_STRUCTURE_VERSION: number = 5; @Expose() @Type(() => KGTrack, { @@ -64,7 +68,7 @@ export class KGProject { private tracks: KGTrack[] = []; // Constructor - constructor(name: string = "Untitled Project", maxBars: number = 32, currentBars: number = 0, bpm: number = 125, timeSignature: TimeSignature = { numerator: 4, denominator: 4 }, keySignature: KeySignature = "C major", selectedMode: string = "ionian", isLooping: boolean = false, loopingRange: [number, number] = [0, 0], tracks: KGTrack[] = [], projectStructureVersion: number = KGProject.CURRENT_PROJECT_STRUCTURE_VERSION) { + constructor(name: string = "Untitled Project", maxBars: number = 32, currentBars: number = 0, bpm: number = 125, timeSignature: TimeSignature = { numerator: 4, denominator: 4 }, keySignature: KeySignature = "C major", selectedMode: string = "ionian", isLooping: boolean = false, loopingRange: [number, number] = [0, 0], barWidthMultiplier: number = 1, tracks: KGTrack[] = [], projectStructureVersion: number = KGProject.CURRENT_PROJECT_STRUCTURE_VERSION) { this.name = name; this.maxBars = maxBars; this.currentBars = currentBars; @@ -74,6 +78,7 @@ export class KGProject { this.selectedMode = selectedMode; this.isLooping = isLooping; this.loopingRange = loopingRange; + this.barWidthMultiplier = barWidthMultiplier; this.tracks = tracks; this.projectStructureVersion = projectStructureVersion; } @@ -167,5 +172,13 @@ export class KGProject { public setLoopingRange(loopingRange: [number, number]): void { this.loopingRange = loopingRange; } + + public getBarWidthMultiplier(): number { + return this.barWidthMultiplier; + } + + public setBarWidthMultiplier(barWidthMultiplier: number): void { + this.barWidthMultiplier = barWidthMultiplier; + } } diff --git a/src/core/project-upgrader/KGProjectUpgrader.ts b/src/core/project-upgrader/KGProjectUpgrader.ts index 1bf5f6a..e7cd9dc 100644 --- a/src/core/project-upgrader/KGProjectUpgrader.ts +++ b/src/core/project-upgrader/KGProjectUpgrader.ts @@ -3,6 +3,7 @@ import { upgradeToV1 } from './upgradeToV1'; import { upgradeToV2 } from './upgradeToV2'; import { upgradeToV3 } from './upgradeToV3'; import { upgradeToV4 } from './upgradeToV4'; +import { upgradeToV5 } from './upgradeToV5'; /** * Upgrade the given project to the latest structure version, one version at a time. @@ -38,6 +39,10 @@ export function upgradeProjectToLatest(project: KGProject): KGProject { workingProject = upgradeToV4(workingProject); break; } + case 5: { + workingProject = upgradeToV5(workingProject); + break; + } default: { // If an upgrader is missing, throw to prevent loading incompatible structures throw new Error(`No upgrader found for project structure version ${nextVersion}`); diff --git a/src/core/project-upgrader/upgradeToV5.ts b/src/core/project-upgrader/upgradeToV5.ts new file mode 100644 index 0000000..49200e1 --- /dev/null +++ b/src/core/project-upgrader/upgradeToV5.ts @@ -0,0 +1,13 @@ +import { KGProject } from '../KGProject'; + +export function upgradeToV5(project: KGProject): KGProject { + try { + const current = project.getBarWidthMultiplier?.(); + if (current === undefined || current === null) { + project.setBarWidthMultiplier(1); + } + } finally { + project.setProjectStructureVersion(5); + } + return project; +} diff --git a/src/stores/projectStore.ts b/src/stores/projectStore.ts index 451a439..3175783 100644 --- a/src/stores/projectStore.ts +++ b/src/stores/projectStore.ts @@ -16,6 +16,7 @@ import { KGAudioFileStorage } from '../core/io/KGAudioFileStorage'; import { ConfigManager } from '../core/config/ConfigManager'; import { upgradeProjectToLatest } from '../core/project-upgrader/KGProjectUpgrader'; import { toggleLoop } from '../util/loopUtil'; +import { TOOLBAR_CONSTANTS } from '../constants/uiConstants'; import * as Tone from 'tone'; /** @@ -34,6 +35,16 @@ function updateMaxBarsCSS(maxBars: number): void { document.documentElement.style.setProperty('--max-number-of-bars', maxBars.toString()); } +/** + * Update CSS custom property for track grid bar width based on multiplier + */ +function updateBarWidthMultiplierCSS(multiplier: number): void { + document.documentElement.style.setProperty( + '--track-grid-bar-width', + `${TOOLBAR_CONSTANTS.BASE_BAR_WIDTH * multiplier}px` + ); +} + // Define the store state interface interface ProjectState { // State @@ -42,6 +53,7 @@ interface ProjectState { tracks: KGTrack[]; currentStatus: string; maxBars: number; + barWidthMultiplier: number; timeSignature: TimeSignature; bpm: number; keySignature: KeySignature; @@ -104,6 +116,7 @@ interface ProjectState { toggleLoop: () => void; setBpm: (bpm: number) => void; setMaxBars: (maxBars: number) => void; + setBarWidthMultiplier: (multiplier: number) => void; setTimeSignature: (timeSignature: TimeSignature) => void; setKeySignature: (keySignature: KeySignature) => void; setSelectedMode: (selectedMode: string) => void; @@ -157,6 +170,8 @@ export const useProjectStore = create((set, get) => { updateTimeSignatureCSS(currentProject.getTimeSignature()); // Initialize CSS variable for max bars on store creation updateMaxBarsCSS(currentProject.getMaxBars()); + // Initialize CSS variable for bar width multiplier on store creation + updateBarWidthMultiplierCSS(currentProject.getBarWidthMultiplier()); // Get initial ChatBox state from config const configManager = ConfigManager.instance(); @@ -240,6 +255,7 @@ export const useProjectStore = create((set, get) => { tracks: currentProject.getTracks() as KGTrack[], currentStatus: KGCore.instance().getStatus() || 'Unknown', maxBars: currentProject.getMaxBars(), + barWidthMultiplier: currentProject.getBarWidthMultiplier(), timeSignature: currentProject.getTimeSignature(), bpm: currentProject.getBpm(), keySignature: currentProject.getKeySignature(), @@ -669,11 +685,11 @@ export const useProjectStore = create((set, get) => { } } - // Update CSS variable for time signature numerator + // Update CSS variables updateTimeSignatureCSS(timeSignature); - // Update CSS variable for max bars updateMaxBarsCSS(maxBars); - + updateBarWidthMultiplierCSS(projectToLoad.getBarWidthMultiplier()); + // Log project loading info console.log(`Project max bars: ${maxBars}`); console.log(`Setup audio synths for ${tracks.length} tracks`); @@ -685,6 +701,7 @@ export const useProjectStore = create((set, get) => { savedProjectName: savedName ?? projectToLoad.getName(), tracks: [...tracks], maxBars, + barWidthMultiplier: projectToLoad.getBarWidthMultiplier(), timeSignature, bpm, keySignature, @@ -781,16 +798,23 @@ export const useProjectStore = create((set, get) => { } }, + setBarWidthMultiplier: (multiplier: number) => { + const project = KGCore.instance().getCurrentProject(); + project.setBarWidthMultiplier(multiplier); + set({ barWidthMultiplier: multiplier }); + updateBarWidthMultiplierCSS(multiplier); + }, + setTimeSignature: (timeSignature: TimeSignature) => { try { // Create and execute the change project property command const command = new ChangeProjectPropertyCommand({ timeSignature }); KGCore.instance().executeCommand(command); - + // Update the store state set({ timeSignature }); updateTimeSignatureCSS(timeSignature); - + console.log(`Set time signature to ${timeSignature.numerator}/${timeSignature.denominator}`); } catch (error) { console.error('Error setting time signature:', error); @@ -985,15 +1009,17 @@ export const useProjectStore = create((set, get) => { projectName: project.getName(), tracks: [...project.getTracks()] as KGTrack[], // Force new array reference - key for re-rendering! maxBars: project.getMaxBars(), + barWidthMultiplier: project.getBarWidthMultiplier(), timeSignature: project.getTimeSignature(), bpm: project.getBpm(), keySignature: project.getKeySignature(), selectedMode: project.getSelectedMode() }); - + // Sync CSS variables that affect layout updateTimeSignatureCSS(project.getTimeSignature()); updateMaxBarsCSS(project.getMaxBars()); + updateBarWidthMultiplierCSS(project.getBarWidthMultiplier()); // Sync all related state const actions = get(); diff --git a/src/test/utils/mock-data.ts b/src/test/utils/mock-data.ts index c7607e3..4b0adcc 100644 --- a/src/test/utils/mock-data.ts +++ b/src/test/utils/mock-data.ts @@ -123,8 +123,9 @@ export const createMockProject = (overrides: Partial<{ 'ionian', // selectedMode false, // isLooping [0, 0], // loopingRange + 1, // barWidthMultiplier defaults.tracks, // tracks - 3 // projectStructureVersion + 5 // projectStructureVersion ) return project From 39401b39c6e7c880dbc6b941900add45fd6835ca Mon Sep 17 00:00:00 2001 From: Xiaohan-Tian <157918347+Xiaohan-Tian@users.noreply.github.com> Date: Fri, 10 Apr 2026 18:27:32 -0700 Subject: [PATCH 08/13] doc: updated help.md --- public/chat/help.md | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/public/chat/help.md b/public/chat/help.md index d895e56..28a69a7 100644 --- a/public/chat/help.md +++ b/public/chat/help.md @@ -17,8 +17,8 @@ Navigate to **Settings ⚙️ → General → LLM Provider**. Depending on your 1. Obtain an OpenAI API Key from [**OpenAI**](https://platform.openai.com/account/api-keys). You may need to create an account and add a payment method to generate an API Key. 2. In **Settings ⚙️ → General → LLM Provider**, select **OpenAI** as your provider. 3. Enter your API Key in **OpenAI → Key**. -4. Select your preferred model from the **OpenAI → Model** dropdown. For optimal performance, we recommend `gpt-5.2` or `gpt-5-mini`. -5. Optionally, choose whether to enable Flex Mode in **OpenAI → Flex Mode**. Flex Mode offers discounted pricing, but may result in slower response times. +4. Select your preferred model from the **OpenAI → Model** dropdown. For a good balance between performance and cost, we recommend `gpt-5.4-mini`. +5. Optionally, choose whether to enable Flex Mode in **OpenAI → Flex Mode**. Flex Mode offers discounted pricing, but may result in slower response times or server-side errors. --- @@ -32,10 +32,10 @@ OpenRouter is a platform that provides unified access to a wide range of languag 4. Browse available models on the [**OpenRouter Models Page**](https://openrouter.ai/models). Use the "Prompt Pricing" filter to identify free models. **Note:** Each model provider may have different data retention and privacy policies. Please review these policies before use. 5. Enter your chosen model name in **OpenAI Compatible Server → Model**. Recommended model series include: - - `Anthropic: claude-4-sonnet` (`anthropic/claude-sonnet-4`: [Link](https://openrouter.ai/anthropic/claude-sonnet-4)) - - `Qwen: qwen3-30b-a3b` (FREE MODEL: `qwen/qwen3-30b-a3b:free`: [Link](https://openrouter.ai/qwen/qwen3-30b-a3b:free)) - - `Qwen: qwen3-235b-a22b` (FREE MODEL: `qwen/qwen3-235b-a22b:free`: [Link](https://openrouter.ai/qwen/qwen3-235b-a22b:free)) -6. Input the base URL `https://openrouter.ai/api/v1` of the OpenAI Compatible Server in **OpenAI Compatible Server → Base URL**. + - `Anthropic: Claude Sonnet 4.6` (`anthropic/claude-sonnet-4.6`: [Link](https://openrouter.ai/anthropic/claude-sonnet-4.6)) — best balance of quality and cost for the Claude series + - `Qwen: Qwen3.5-35B-A3B` (`qwen/qwen3.5-35b-a3b`: [Link](https://openrouter.ai/qwen/qwen3.5-35b-a3b)) — recommended open source model + - `Qwen: Qwen3.6 Plus` (FREE MODEL: `qwen/qwen3.6-plus:free`: [Link](https://openrouter.ai/qwen/qwen3.6-plus:free)) — recommended free model; note that free model providers may collect your data, check the model page for details +6. Input the base URL `https://openrouter.ai/api/v1` **OpenAI Compatible Server → Base URL**. ### Basic DAW Operations @@ -56,6 +56,13 @@ OpenRouter is a platform that provides unified access to a wide range of languag - Move/resize: drag note body to move selected notes; drag edges to resize. - Close the piano roll with X or ESC. +- Intelligent Chord Assistant + - Enable chord guide from the piano roll toolbar: select T (Tonic), S (Subdominant), or D (Dominant) function. + - Hover over any key to see context-aware chord suggestions highlighted in red, matching your selected key signature and mode. + - Press Tab to cycle through different chord voicings for the same harmonic function. + - Double-click (or Ctrl/Cmd+click) on a highlighted chord to create all notes at once. + - Chord length automatically matches your last edited note for consistent rhythm. + - Snapping and Quantize - Set snapping from the NO SNAP menu (top‑right). - Quantize timing with Qua. Pos. (start) and Qua. Len. (length). @@ -69,7 +76,7 @@ OpenRouter is a platform that provides unified access to a wide range of languag ### Note -Due to security reasons, if you are using K.G.Studio from a non-local hosted environment, we won't persist your API Key in your browser's IndexedDB in order to prevent potential XSS attack, you will need to input your API Key every time you start K.G.Studio. +For security, when running from a non-local host we do not persist your API key in IndexedDB by default (to reduce XSS risk). You'll be prompted to enter it each time you start K.G.Studio. To opt-in to persistence on non-local hosts, enable "Persist API Keys on Non-Localhost" in Settings (not recommended for shared/production environments). ### Disclaimer From 1670679c61d5cb32c915a1dd31a93c39328fc50f Mon Sep 17 00:00:00 2001 From: Xiaohan-Tian <157918347+Xiaohan-Tian@users.noreply.github.com> Date: Fri, 10 Apr 2026 20:17:31 -0700 Subject: [PATCH 09/13] feat: add audio region trimming with non-destructive clip offset --- src/components/track/RegionItem.tsx | 41 ++++--- src/components/track/TrackGridPanel.tsx | 100 +++++++++++++----- src/core/KGProject.ts | 2 +- src/core/audio-interface/KGAudioInterface.ts | 23 +++- .../commands/region/ResizeRegionCommand.ts | 44 ++++++-- .../project-upgrader/KGProjectUpgrader.ts | 5 + src/core/project-upgrader/upgradeToV6.ts | 21 ++++ src/core/region/KGAudioRegion.ts | 16 ++- 8 files changed, 192 insertions(+), 60 deletions(-) create mode 100644 src/core/project-upgrader/upgradeToV6.ts diff --git a/src/components/track/RegionItem.tsx b/src/components/track/RegionItem.tsx index 1526026..8091236 100644 --- a/src/components/track/RegionItem.tsx +++ b/src/components/track/RegionItem.tsx @@ -54,7 +54,7 @@ const RegionItem: React.FC = ({ audioBuffer }) => { // Get selection state and time signature from store - const { selectedRegionIds, timeSignature } = useProjectStore(); + const { selectedRegionIds, timeSignature, bpm } = useProjectStore(); const isSelected = selectedRegionIds.includes(id); const [cursor, setCursor] = useState('pointer'); const [resizeEdge, setResizeEdge] = useState('none'); @@ -229,10 +229,28 @@ const RegionItem: React.FC = ({ // Get channel data (use first channel) const channelData = audioBuffer.getChannelData(0); - const samples = channelData.length; + const totalSamples = channelData.length; + const sampleRate = audioBuffer.sampleRate; - // Downsample to canvas width - const samplesPerPixel = Math.max(1, Math.floor(samples / width)); + // Calculate visible portion based on clip offset + const clipStartOffsetSeconds = audioRegion ? audioRegion.getClipStartOffsetSeconds() : 0; + const clipStartSample = Math.floor(clipStartOffsetSeconds * sampleRate); + + // Calculate visible duration from region length in beats + const secondsPerBeat = 60 / bpm; + const regionLengthBeats = audioRegion ? audioRegion.getLength() : 0; + const visibleDurationSeconds = regionLengthBeats * secondsPerBeat; + const visibleSamples = Math.floor(visibleDurationSeconds * sampleRate); + + // Clamp to buffer boundaries + const renderStartSample = Math.max(0, Math.min(clipStartSample, totalSamples)); + const renderEndSample = Math.min(renderStartSample + visibleSamples, totalSamples); + const renderSampleCount = renderEndSample - renderStartSample; + + if (renderSampleCount <= 0) return; + + // Downsample visible portion to canvas width + const samplesPerPixel = Math.max(1, Math.floor(renderSampleCount / width)); const centerY = height / 2; ctx.strokeStyle = 'rgba(255, 255, 255, 0.7)'; @@ -240,8 +258,8 @@ const RegionItem: React.FC = ({ ctx.beginPath(); for (let x = 0; x < width; x++) { - const startSample = Math.floor(x * samplesPerPixel); - const endSample = Math.min(startSample + samplesPerPixel, samples); + const startSample = renderStartSample + Math.floor(x * samplesPerPixel); + const endSample = Math.min(startSample + samplesPerPixel, renderEndSample); let min = 0; let max = 0; @@ -289,7 +307,7 @@ const RegionItem: React.FC = ({ } else { renderNotesOnCanvas(); } - }, [midiRegion, audioRegion, audioBuffer, timeSignature, id, noteUpdateTrigger]); + }, [midiRegion, audioRegion, audioBuffer, timeSignature, bpm, id, noteUpdateTrigger]); // Re-render canvas when region content size changes useEffect(() => { @@ -310,7 +328,7 @@ const RegionItem: React.FC = ({ resizeObserver.unobserve(regionContentRef.current); } }; - }, [midiRegion, audioRegion, audioBuffer, timeSignature]); + }, [midiRegion, audioRegion, audioBuffer, timeSignature, bpm]); // Handle mouse movement to detect edge proximity const handleMouseMove = (e: React.MouseEvent) => { @@ -325,13 +343,6 @@ const RegionItem: React.FC = ({ return; } - // Audio regions: move only, no resize - if (audioRegion) { - setCursor('grab'); - setResizeEdge('none'); - return; - } - const regionElement = e.currentTarget; const rect = regionElement.getBoundingClientRect(); diff --git a/src/components/track/TrackGridPanel.tsx b/src/components/track/TrackGridPanel.tsx index 7045516..97cc8c7 100644 --- a/src/components/track/TrackGridPanel.tsx +++ b/src/components/track/TrackGridPanel.tsx @@ -4,7 +4,7 @@ import { KGMidiRegion } from '../../core/region/KGMidiRegion'; import TrackGridItem from './TrackGridItem'; import { Playhead } from '../common'; import type { RegionUI } from '../interfaces'; -import { DEBUG_MODE } from '../../constants'; +import { DEBUG_MODE, REGION_CONSTANTS } from '../../constants'; import { KGMainContentState } from '../../core/state/KGMainContentState'; import { isModifierKeyPressed } from '../../util/osUtil'; import { CreateRegionCommand, ResizeRegionCommand, MoveRegionCommand } from '../../core/commands'; @@ -159,47 +159,91 @@ const TrackGridPanel: React.FC = ({ if (DEBUG_MODE.TRACK_GRID_PANEL) { console.log(`Finished resizing region ${regionId} to barNumber ${finalBarNumber}, length ${finalLength}`); } - + // Find the region const region = regions.find(r => r.id === regionId); if (!region) return; - + // Calculate new start and length in beats const beatsPerBar = timeSignature.numerator; - const newStartBeat = (finalBarNumber - 1) * beatsPerBar; - const newLengthInBeats = finalLength * beatsPerBar; - + let clampedBarNumber = finalBarNumber; + let clampedLength = finalLength; + // Find the track that contains this region const track = tracks.find(t => t.getId().toString() === region.trackId); if (!track) return; - + // Update the region in the track's model const trackRegions = track.getRegions(); - const midiRegion = trackRegions.find(r => r.getId() === regionId) as KGMidiRegion | undefined; - - if (midiRegion) { - const oldStartBeat = midiRegion.getStartFromBeat(); + const coreRegion = trackRegions.find(r => r.getId() === regionId); + + if (coreRegion) { + const oldStartBeat = coreRegion.getStartFromBeat(); const oldBarNumber = region.barNumber; - + if (DEBUG_MODE.TRACK_GRID_PANEL) { - console.log(`Updating KGRegion model - Before: startBeat=${oldStartBeat}, length=${midiRegion.getLength()}`); + console.log(`Updating KGRegion model - Before: startBeat=${oldStartBeat}, length=${coreRegion.getLength()}`); console.log(`Bar numbers - old: ${oldBarNumber}, new: ${finalBarNumber}`); } - + + // Clamp audio region resize to audio file boundaries + let newClipStartOffsetSeconds: number | undefined; + if (coreRegion instanceof KGAudioRegion) { + const bpm = KGCore.instance().getCurrentProject().getBpm(); + const secondsPerBeat = 60 / bpm; + const clipOffset = coreRegion.getClipStartOffsetSeconds(); + const audioDuration = coreRegion.getAudioDurationSeconds(); + + // Left edge changed — calculate new clip offset + if (clampedBarNumber !== oldBarNumber) { + const newStartBeat = (clampedBarNumber - 1) * beatsPerBar; + const beatDelta = newStartBeat - oldStartBeat; + const secondsDelta = beatDelta * secondsPerBeat; + const unclampedClipOffset = clipOffset + secondsDelta; + + if (unclampedClipOffset < 0) { + // Dragged past audio start — snap to earliest allowed position + const maxLeftExtensionBeats = clipOffset / secondsPerBeat; + const minStartBeat = oldStartBeat - maxLeftExtensionBeats; + clampedBarNumber = Math.ceil(minStartBeat / beatsPerBar) + 1; + const oldEndBarNumber = oldBarNumber + (coreRegion.getLength() / beatsPerBar); + clampedLength = oldEndBarNumber - clampedBarNumber; + newClipStartOffsetSeconds = 0; + } else { + newClipStartOffsetSeconds = Math.min(unclampedClipOffset, audioDuration); + } + } + + // Right edge — clamp length so it doesn't exceed remaining audio + const effectiveClipOffset = newClipStartOffsetSeconds ?? clipOffset; + const maxDurationSeconds = audioDuration - effectiveClipOffset; + const maxLengthBars = (maxDurationSeconds / secondsPerBeat) / beatsPerBar; + if (clampedLength > maxLengthBars) { + clampedLength = Math.floor(maxLengthBars); + if (clampedLength < REGION_CONSTANTS.MIN_REGION_LENGTH) { + clampedLength = REGION_CONSTANTS.MIN_REGION_LENGTH; + } + } + } + + const newStartBeat = (clampedBarNumber - 1) * beatsPerBar; + const newLengthInBeats = clampedLength * beatsPerBar; + // Use command pattern to update the region position and length (note adjustments handled inside command) try { const command = ResizeRegionCommand.fromBarCoordinates( regionId, - finalBarNumber, - finalLength, - timeSignature + clampedBarNumber, + clampedLength, + timeSignature, + newClipStartOffsetSeconds ); - + KGCore.instance().executeCommand(command); if (DEBUG_MODE.TRACK_GRID_PANEL) { console.log(`Executed ResizeRegionCommand: region ${regionId} resized using command pattern`); - + // Verify the command worked const updatedRegion = track.getRegions().find(r => r.getId() === regionId); console.log(`Verified region in track: ${updatedRegion ? 'found' : 'not found'}, startBeat=${updatedRegion?.getStartFromBeat()}, length=${updatedRegion?.getLength()}`); @@ -208,15 +252,15 @@ const TrackGridPanel: React.FC = ({ console.error('Error resizing region:', error); return; } - } - - // Update the region in the parent component with expected model values - if (onRegionUpdated) { - onRegionUpdated( - regionId, - { barNumber: finalBarNumber, length: finalLength }, - { startBeat: newStartBeat, length: newLengthInBeats } - ); + + // Update the region in the parent component with expected model values + if (onRegionUpdated) { + onRegionUpdated( + regionId, + { barNumber: clampedBarNumber, length: clampedLength }, + { startBeat: newStartBeat, length: newLengthInBeats } + ); + } } }; diff --git a/src/core/KGProject.ts b/src/core/KGProject.ts index 8c421a2..83f8151 100644 --- a/src/core/KGProject.ts +++ b/src/core/KGProject.ts @@ -52,7 +52,7 @@ export class KGProject { @WithDefault(0) private projectStructureVersion: number = 0; - public static readonly CURRENT_PROJECT_STRUCTURE_VERSION: number = 5; + public static readonly CURRENT_PROJECT_STRUCTURE_VERSION: number = 6; @Expose() @Type(() => KGTrack, { diff --git a/src/core/audio-interface/KGAudioInterface.ts b/src/core/audio-interface/KGAudioInterface.ts index dfda13a..17ccbbb 100644 --- a/src/core/audio-interface/KGAudioInterface.ts +++ b/src/core/audio-interface/KGAudioInterface.ts @@ -506,6 +506,10 @@ export class KGAudioInterface { return; } + // Clip offset: where playback starts within the audio file + const clipStartOffsetSeconds = audioRegion.getClipStartOffsetSeconds(); + const audioDurationSeconds = audioRegion.getAudioDurationSeconds(); + // Skip regions that start before playback start position if (regionStartBeat < startPosition) { // Region starts before playhead — calculate offset into the audio file @@ -523,6 +527,12 @@ export class KGAudioInterface { effectiveRemainingSeconds = Math.min(remainingSeconds, maxDurationSeconds); } + // Cap at available audio after clip offset + effectiveRemainingSeconds = Math.min( + effectiveRemainingSeconds, + audioDurationSeconds - clipStartOffsetSeconds - offsetSeconds + ); + if (effectiveRemainingSeconds > 0 && playerBus.hasBuffer(audioFileId)) { // Resume slightly after the current transport boundary and // compensate the source offset/duration. Scheduling exactly @@ -533,7 +543,7 @@ export class KGAudioInterface { regionEndBeat ); const extraOffsetSeconds = (safeResumeBeat - startPosition) * secondsPerBeat; - const adjustedOffsetSeconds = offsetSeconds + extraOffsetSeconds; + const adjustedOffsetSeconds = clipStartOffsetSeconds + offsetSeconds + extraOffsetSeconds; const adjustedRemainingSeconds = Math.max( 0, effectiveRemainingSeconds - extraOffsetSeconds @@ -562,7 +572,12 @@ export class KGAudioInterface { } const audioFileId = audioRegion.getAudioFileId(); - let effectiveDurationSeconds = audioRegion.getAudioDurationSeconds(); + // Effective duration: region length in seconds, capped at available audio after clip offset + const regionLengthSeconds = region.getLength() * secondsPerBeat; + let effectiveDurationSeconds = Math.min( + regionLengthSeconds, + audioDurationSeconds - clipStartOffsetSeconds + ); if (!playerBus.hasBuffer(audioFileId)) { console.warn(`No audio buffer loaded for ${audioFileId}`); @@ -579,13 +594,13 @@ export class KGAudioInterface { const regionStartTime = this.beatsToToneTime(regionStartBeat); console.log( - `Scheduling audio region "${region.getName()}" at beat ${regionStartBeat}, duration: ${effectiveDurationSeconds}s` + `Scheduling audio region "${region.getName()}" at beat ${regionStartBeat}, clipOffset: ${clipStartOffsetSeconds}s, duration: ${effectiveDurationSeconds}s` ); const eventId = Tone.Transport.schedule((time) => { const hasSoloedTracks = this.hasSoloedTracks(); if (playerBus.shouldPlayWithSolo(hasSoloedTracks)) { - playerBus.schedulePlayback(time + playbackDelay, audioFileId, 0, effectiveDurationSeconds); + playerBus.schedulePlayback(time + playbackDelay, audioFileId, clipStartOffsetSeconds, effectiveDurationSeconds); } }, regionStartTime); diff --git a/src/core/commands/region/ResizeRegionCommand.ts b/src/core/commands/region/ResizeRegionCommand.ts index ae9bf83..ccd02d4 100644 --- a/src/core/commands/region/ResizeRegionCommand.ts +++ b/src/core/commands/region/ResizeRegionCommand.ts @@ -2,6 +2,7 @@ import { KGCommand } from '../KGCommand'; import { KGCore } from '../../KGCore'; import { KGRegion } from '../../region/KGRegion'; import { KGMidiRegion } from '../../region/KGMidiRegion'; +import { KGAudioRegion } from '../../region/KGAudioRegion'; import { KGMidiNote } from '../../midi/KGMidiNote'; /** @@ -15,7 +16,7 @@ export class ResizeRegionCommand extends KGCommand { private originalStartFromBeat: number = 0; private originalLength: number = 0; private targetRegion: KGRegion | null = null; - + // Store note adjustments for undo private noteAdjustments: Array<{ noteId: string; @@ -23,11 +24,16 @@ export class ResizeRegionCommand extends KGCommand { originalEndBeat: number; }> = []; - constructor(regionId: string, newStartFromBeat: number, newLength: number) { + // Audio region clip offset support + private newClipStartOffsetSeconds?: number; + private originalClipStartOffsetSeconds: number = 0; + + constructor(regionId: string, newStartFromBeat: number, newLength: number, newClipStartOffsetSeconds?: number) { super(); this.regionId = regionId; this.newStartFromBeat = newStartFromBeat; this.newLength = newLength; + this.newClipStartOffsetSeconds = newClipStartOffsetSeconds; } execute(): void { @@ -57,10 +63,10 @@ export class ResizeRegionCommand extends KGCommand { this.originalStartFromBeat = targetRegion.getStartFromBeat(); this.originalLength = targetRegion.getLength(); - // Handle note adjustments if start position changes (left-edge resize) + // Handle note adjustments if start position changes (left-edge resize) for MIDI regions if (this.newStartFromBeat !== this.originalStartFromBeat && targetRegion instanceof KGMidiRegion) { const beatOffset = this.newStartFromBeat - this.originalStartFromBeat; - + // Store original note positions and adjust notes to maintain absolute positions const notes = targetRegion.getNotes(); notes.forEach(note => { @@ -70,15 +76,24 @@ export class ResizeRegionCommand extends KGCommand { originalStartBeat: note.getStartBeat(), originalEndBeat: note.getEndBeat() }); - + // Adjust note positions to maintain absolute position note.setStartBeat(note.getStartBeat() - beatOffset); note.setEndBeat(note.getEndBeat() - beatOffset); }); - + console.log(`Adjusted ${notes.length} notes by offset ${-beatOffset} beats to maintain absolute positions`); } + // Handle clip offset for audio regions + if (targetRegion instanceof KGAudioRegion) { + this.originalClipStartOffsetSeconds = targetRegion.getClipStartOffsetSeconds(); + if (this.newClipStartOffsetSeconds !== undefined) { + targetRegion.setClipStartOffsetSeconds(this.newClipStartOffsetSeconds); + console.log(`Updated audio clip offset: ${this.originalClipStartOffsetSeconds} → ${this.newClipStartOffsetSeconds}`); + } + } + // Apply the resize targetRegion.setStartFromBeat(this.newStartFromBeat); targetRegion.setLength(this.newLength); @@ -95,7 +110,7 @@ export class ResizeRegionCommand extends KGCommand { // Restore note positions if they were adjusted if (this.noteAdjustments.length > 0 && this.targetRegion instanceof KGMidiRegion) { const notes = this.targetRegion.getNotes(); - + // Restore each note to its original position this.noteAdjustments.forEach(adjustment => { const note = notes.find(n => n.getId() === adjustment.noteId); @@ -104,10 +119,16 @@ export class ResizeRegionCommand extends KGCommand { note.setEndBeat(adjustment.originalEndBeat); } }); - + console.log(`Restored ${this.noteAdjustments.length} notes to their original positions`); } + // Restore clip offset for audio regions + if (this.targetRegion instanceof KGAudioRegion && this.newClipStartOffsetSeconds !== undefined) { + this.targetRegion.setClipStartOffsetSeconds(this.originalClipStartOffsetSeconds); + console.log(`Restored audio clip offset: ${this.newClipStartOffsetSeconds} → ${this.originalClipStartOffsetSeconds}`); + } + // Restore original region values this.targetRegion.setStartFromBeat(this.originalStartFromBeat); this.targetRegion.setLength(this.originalLength); @@ -184,12 +205,13 @@ export class ResizeRegionCommand extends KGCommand { regionId: string, newBarNumber: number, newLengthInBars: number, - timeSignature: { numerator: number; denominator: number } + timeSignature: { numerator: number; denominator: number }, + newClipStartOffsetSeconds?: number ): ResizeRegionCommand { const beatsPerBar = timeSignature.numerator; const newStartFromBeat = (newBarNumber - 1) * beatsPerBar; const newLength = newLengthInBars * beatsPerBar; - - return new ResizeRegionCommand(regionId, newStartFromBeat, newLength); + + return new ResizeRegionCommand(regionId, newStartFromBeat, newLength, newClipStartOffsetSeconds); } } \ No newline at end of file diff --git a/src/core/project-upgrader/KGProjectUpgrader.ts b/src/core/project-upgrader/KGProjectUpgrader.ts index e7cd9dc..1ab940d 100644 --- a/src/core/project-upgrader/KGProjectUpgrader.ts +++ b/src/core/project-upgrader/KGProjectUpgrader.ts @@ -4,6 +4,7 @@ import { upgradeToV2 } from './upgradeToV2'; import { upgradeToV3 } from './upgradeToV3'; import { upgradeToV4 } from './upgradeToV4'; import { upgradeToV5 } from './upgradeToV5'; +import { upgradeToV6 } from './upgradeToV6'; /** * Upgrade the given project to the latest structure version, one version at a time. @@ -43,6 +44,10 @@ export function upgradeProjectToLatest(project: KGProject): KGProject { workingProject = upgradeToV5(workingProject); break; } + case 6: { + workingProject = upgradeToV6(workingProject); + break; + } default: { // If an upgrader is missing, throw to prevent loading incompatible structures throw new Error(`No upgrader found for project structure version ${nextVersion}`); diff --git a/src/core/project-upgrader/upgradeToV6.ts b/src/core/project-upgrader/upgradeToV6.ts new file mode 100644 index 0000000..0676fe6 --- /dev/null +++ b/src/core/project-upgrader/upgradeToV6.ts @@ -0,0 +1,21 @@ +import { KGProject } from '../KGProject'; +import { KGAudioRegion } from '../region/KGAudioRegion'; + +export function upgradeToV6(project: KGProject): KGProject { + try { + // Ensure all audio regions have clipStartOffsetSeconds initialized + for (const track of project.getTracks()) { + for (const region of track.getRegions()) { + if (region instanceof KGAudioRegion) { + const current = region.getClipStartOffsetSeconds?.(); + if (current === undefined || current === null) { + region.setClipStartOffsetSeconds(0); + } + } + } + } + } finally { + project.setProjectStructureVersion(6); + } + return project; +} diff --git a/src/core/region/KGAudioRegion.ts b/src/core/region/KGAudioRegion.ts index d5b49a9..853ab5a 100644 --- a/src/core/region/KGAudioRegion.ts +++ b/src/core/region/KGAudioRegion.ts @@ -22,6 +22,10 @@ export class KGAudioRegion extends KGRegion { @WithDefault(0) protected audioDurationSeconds: number = 0; + @Expose() + @WithDefault(0) + protected clipStartOffsetSeconds: number = 0; + constructor( id: string, trackId: string, @@ -31,13 +35,15 @@ export class KGAudioRegion extends KGRegion { length: number = 0, audioFileId: string = '', audioFileName: string = '', - audioDurationSeconds: number = 0 + audioDurationSeconds: number = 0, + clipStartOffsetSeconds: number = 0 ) { super(id, trackId, trackIndex, name, startFromBeat, length); this.__type = 'KGAudioRegion'; this.audioFileId = audioFileId; this.audioFileName = audioFileName; this.audioDurationSeconds = audioDurationSeconds; + this.clipStartOffsetSeconds = clipStartOffsetSeconds; } // Getters @@ -66,6 +72,14 @@ export class KGAudioRegion extends KGRegion { this.audioDurationSeconds = audioDurationSeconds; } + public getClipStartOffsetSeconds(): number { + return this.clipStartOffsetSeconds; + } + + public setClipStartOffsetSeconds(clipStartOffsetSeconds: number): void { + this.clipStartOffsetSeconds = clipStartOffsetSeconds; + } + // Override getCurrentType to return specific subclass type public override getCurrentType(): string { return 'KGAudioRegion'; From d94b53dcf502e51959d4fc938184c30b842e45e6 Mon Sep 17 00:00:00 2001 From: Xiaohan-Tian <157918347+Xiaohan-Tian@users.noreply.github.com> Date: Fri, 10 Apr 2026 20:57:34 -0700 Subject: [PATCH 10/13] feat: add snap-to-grid toggle for track grid regions and playhead --- src/components/MainContent.tsx | 8 +++++--- src/components/Toolbar.tsx | 24 +++++++++++++++++++++--- src/components/track/RegionItem.tsx | 2 +- src/components/track/TrackGridItem.tsx | 22 +++++++++++++--------- src/components/track/TrackGridPanel.tsx | 7 +++++-- src/core/state/KGMainContentState.ts | 9 +++++++++ 6 files changed, 54 insertions(+), 18 deletions(-) diff --git a/src/components/MainContent.tsx b/src/components/MainContent.tsx index c56e09c..8ef912d 100644 --- a/src/components/MainContent.tsx +++ b/src/components/MainContent.tsx @@ -13,6 +13,7 @@ import type { RegionUI } from './interfaces'; import { DEBUG_MODE, BAR_NUMBERS_CONSTANTS } from '../constants'; import { useRegionOperations } from '../hooks/useRegionOperations'; import { regionDeleteManager } from '../util/regionDeleteUtil'; +import { KGMainContentState } from '../core/state/KGMainContentState'; import { ChangeLoopSettingsCommand } from '../core/commands'; interface MainContentProps { @@ -135,7 +136,7 @@ const MainContent: React.FC = ({ if (region instanceof KGMidiRegion || region instanceof KGAudioRegion) { // Calculate bar number and length from beats const beatsPerBar = timeSignature.numerator; - const barNumber = Math.floor(region.getStartFromBeat() / beatsPerBar) + 1; + const barNumber = (region.getStartFromBeat() / beatsPerBar) + 1; const length = region.getLength() / beatsPerBar; // Create a RegionUI object @@ -517,8 +518,9 @@ const MainContent: React.FC = ({ getComputedStyle(document.documentElement).getPropertyValue('--track-grid-bar-width') ) || 40; - // Find the closest bar start (using Math.round for nearest bar) - const barIndex = Math.round(relativeX / barWidth); + // Find the closest bar start; honor snapping toggle + const snap = KGMainContentState.instance().isSnappingEnabled(); + const barIndex = snap ? Math.round(relativeX / barWidth) : relativeX / barWidth; // Ensure we don't go below 0 const clampedBarIndex = Math.max(0, barIndex); diff --git a/src/components/Toolbar.tsx b/src/components/Toolbar.tsx index ab71b56..a754aa2 100644 --- a/src/components/Toolbar.tsx +++ b/src/components/Toolbar.tsx @@ -12,7 +12,7 @@ import { FaUndo, FaRedo, FaMousePointer, FaStepBackward, FaPlay, FaPause, FaComments, FaSync, FaFolderOpen, FaSave, FaDownload, FaUpload, FaPlus, - FaCog + FaCog, FaMagnet } from 'react-icons/fa'; import { KGProject, type KeySignature } from '../core/KGProject'; import { plainToInstance } from 'class-transformer'; @@ -48,6 +48,7 @@ const Toolbar: React.FC = () => { // State for main content tools const [activeMainTool, setActiveMainTool] = React.useState<'pointer' | 'pencil'>('pointer'); + const [isSnapping, setIsSnapping] = React.useState(true); // State for key signature dropdown const [showKeySignatureDropdown, setShowKeySignatureDropdown] = React.useState(false); @@ -569,6 +570,16 @@ const Toolbar: React.FC = () => { } }; + // Handle snapping toggle + const handleSnappingToggle = () => { + const newValue = !isSnapping; + setIsSnapping(newValue); + KGMainContentState.instance().setSnapping(newValue); + if (DEBUG_MODE.TOOLBAR) { + console.log(`Snapping ${newValue ? 'enabled' : 'disabled'}`); + } + }; + // Handle copy button click const handleCopyClick = () => { if (DEBUG_MODE.TOOLBAR) { @@ -774,13 +785,20 @@ const Toolbar: React.FC = () => { > - +
diff --git a/src/components/track/RegionItem.tsx b/src/components/track/RegionItem.tsx index 8091236..7930edb 100644 --- a/src/components/track/RegionItem.tsx +++ b/src/components/track/RegionItem.tsx @@ -307,7 +307,7 @@ const RegionItem: React.FC = ({ } else { renderNotesOnCanvas(); } - }, [midiRegion, audioRegion, audioBuffer, timeSignature, bpm, id, noteUpdateTrigger]); + }, [midiRegion, audioRegion, audioBuffer, timeSignature, bpm, id, noteUpdateTrigger, barNumber, length]); // Re-render canvas when region content size changes useEffect(() => { diff --git a/src/components/track/TrackGridItem.tsx b/src/components/track/TrackGridItem.tsx index 96b8004..3b518e8 100644 --- a/src/components/track/TrackGridItem.tsx +++ b/src/components/track/TrackGridItem.tsx @@ -268,20 +268,23 @@ const TrackGridItem: React.FC = ({ // If the mouse was moved and we have current values, calculate the new values if (mouseMoved.current && currentResizeWidth.current !== null && currentResizeLeft.current !== null) { + const snap = KGMainContentState.instance().isSnappingEnabled(); + if (resizeAction === 'end') { - // End resize: round length to nearest bar - newLength = Math.max(REGION_CONSTANTS.MIN_REGION_LENGTH, Math.round(currentResizeWidth.current / barWidth)); + // End resize: snap length to nearest bar, or use raw value + const rawLength = currentResizeWidth.current / barWidth; + newLength = Math.max(REGION_CONSTANTS.MIN_REGION_LENGTH, snap ? Math.round(rawLength) : rawLength); } else if (resizeAction === 'start') { - // Start resize: round bar number and adjust length accordingly + // Start resize: snap bar number, or use raw value const rawBarNumber = currentResizeLeft.current / barWidth + 1; - newBarNumber = Math.max(1, Math.round(rawBarNumber)); - + newBarNumber = Math.max(1, snap ? Math.round(rawBarNumber) : rawBarNumber); + // Calculate the difference from the initial position const barDiff = initialBarNumberRef.current! - newBarNumber; - + // Adjust length to maintain the end position newLength = initialLengthRef.current! + barDiff; - + // Ensure minimum length if (newLength < REGION_CONSTANTS.MIN_REGION_LENGTH) { newLength = REGION_CONSTANTS.MIN_REGION_LENGTH; @@ -434,9 +437,10 @@ const TrackGridItem: React.FC = ({ // If the mouse was moved, calculate the final position if (mouseMoved.current && currentDragLeft.current !== null && currentDragTop.current !== null) { - // Calculate the new bar number and round to nearest integer + // Calculate the new bar number; snap to nearest integer when snapping is on + const snap = KGMainContentState.instance().isSnappingEnabled(); const rawBarNumber = (currentDragLeft.current / barWidth) + 1; - finalBarNumber = Math.max(1, Math.round(rawBarNumber)); + finalBarNumber = Math.max(1, snap ? Math.round(rawBarNumber) : rawBarNumber); // Calculate the closest track based on vertical position if (allTracks && allTracks.length > 0 && gridContainerRef.current) { diff --git a/src/components/track/TrackGridPanel.tsx b/src/components/track/TrackGridPanel.tsx index 97cc8c7..dad1391 100644 --- a/src/components/track/TrackGridPanel.tsx +++ b/src/components/track/TrackGridPanel.tsx @@ -193,6 +193,7 @@ const TrackGridPanel: React.FC = ({ const secondsPerBeat = 60 / bpm; const clipOffset = coreRegion.getClipStartOffsetSeconds(); const audioDuration = coreRegion.getAudioDurationSeconds(); + const snap = KGMainContentState.instance().isSnappingEnabled(); // Left edge changed — calculate new clip offset if (clampedBarNumber !== oldBarNumber) { @@ -205,7 +206,9 @@ const TrackGridPanel: React.FC = ({ // Dragged past audio start — snap to earliest allowed position const maxLeftExtensionBeats = clipOffset / secondsPerBeat; const minStartBeat = oldStartBeat - maxLeftExtensionBeats; - clampedBarNumber = Math.ceil(minStartBeat / beatsPerBar) + 1; + clampedBarNumber = snap + ? Math.ceil(minStartBeat / beatsPerBar) + 1 + : (minStartBeat / beatsPerBar) + 1; const oldEndBarNumber = oldBarNumber + (coreRegion.getLength() / beatsPerBar); clampedLength = oldEndBarNumber - clampedBarNumber; newClipStartOffsetSeconds = 0; @@ -219,7 +222,7 @@ const TrackGridPanel: React.FC = ({ const maxDurationSeconds = audioDuration - effectiveClipOffset; const maxLengthBars = (maxDurationSeconds / secondsPerBeat) / beatsPerBar; if (clampedLength > maxLengthBars) { - clampedLength = Math.floor(maxLengthBars); + clampedLength = snap ? Math.floor(maxLengthBars) : maxLengthBars; if (clampedLength < REGION_CONSTANTS.MIN_REGION_LENGTH) { clampedLength = REGION_CONSTANTS.MIN_REGION_LENGTH; } diff --git a/src/core/state/KGMainContentState.ts b/src/core/state/KGMainContentState.ts index 8350f7f..ca38d8f 100644 --- a/src/core/state/KGMainContentState.ts +++ b/src/core/state/KGMainContentState.ts @@ -6,6 +6,7 @@ export class KGMainContentState { private static _instance: KGMainContentState | null = null; private activeTool: string = "pointer"; + private snapping: boolean = true; private constructor() { console.log("KGMainContentState initialized"); @@ -26,4 +27,12 @@ export class KGMainContentState { public setActiveTool(tool: string): void { this.activeTool = tool; } + + public isSnappingEnabled(): boolean { + return this.snapping; + } + + public setSnapping(enabled: boolean): void { + this.snapping = enabled; + } } \ No newline at end of file From d4864426e37e57e925237357780c7b58b4792335 Mon Sep 17 00:00:00 2001 From: Xiaohan-Tian <157918347+Xiaohan-Tian@users.noreply.github.com> Date: Sat, 11 Apr 2026 12:18:30 -0700 Subject: [PATCH 11/13] feat: add bounce-to-WAV export with offline rendering via Tone.Offline --- src/App.tsx | 28 ++ src/components/Toolbar.tsx | 21 +- src/components/common/LoadingOverlay.css | 1 + .../audio-interface/KGOfflineRenderer.test.ts | 147 ++++++ src/core/audio-interface/KGOfflineRenderer.ts | 446 ++++++++++++++++++ .../audio-interface/KGToneSamplerFactory.ts | 2 +- 6 files changed, 643 insertions(+), 2 deletions(-) create mode 100644 src/core/audio-interface/KGOfflineRenderer.test.ts create mode 100644 src/core/audio-interface/KGOfflineRenderer.ts diff --git a/src/App.tsx b/src/App.tsx index 4f7fae2..9fea06f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -12,6 +12,8 @@ import { SettingsPanel } from './components/settings'; import LoadingOverlay from './components/common/LoadingOverlay'; import { useEffect as useEffectReact, useState, useRef } from 'react'; import { KGToneBuffersPool } from './core/audio-interface/KGToneBuffersPool'; +import { KGOfflineRenderer } from './core/audio-interface/KGOfflineRenderer'; +import type { RenderingEvent } from './core/audio-interface/KGOfflineRenderer'; import { KGCore } from './core/KGCore'; import { ConfigManager } from './core/config/ConfigManager'; import { validateFunctionalChordsJSON } from './util/scaleUtil'; @@ -144,6 +146,9 @@ function App() { {/* Migration Loading Overlay */} + + {/* Bounce/Render Overlay */} +
); } @@ -232,3 +237,26 @@ const MigrationOverlayContainer: React.FC = () => { /> ); }; + +// Bounce/render overlay — shown during offline WAV rendering +const BounceOverlayContainer: React.FC = () => { + const [isRendering, setIsRendering] = useState(false); + + useEffectReact(() => { + const renderer = KGOfflineRenderer.instance(); + const listener = (evt: RenderingEvent) => { + setIsRendering(evt.type === 'start'); + }; + renderer.addRenderingListener(listener); + return () => { + renderer.removeRenderingListener(listener); + }; + }, []); + + return ( + + ); +}; diff --git a/src/components/Toolbar.tsx b/src/components/Toolbar.tsx index a754aa2..30e3831 100644 --- a/src/components/Toolbar.tsx +++ b/src/components/Toolbar.tsx @@ -22,6 +22,7 @@ import { regionDeleteManager } from '../util/regionDeleteUtil'; import { handleCopyOperation, handlePasteOperation } from '../util/copyPasteUtil'; import { convertProjectToMidi, convertMidiToProject } from '../util/midiUtil'; import { KEY_SIGNATURE_MAP } from '../constants/coreConstants'; +import { KGOfflineRenderer } from '../core/audio-interface/KGOfflineRenderer'; import KGDropdown from './common/KGDropdown'; import FileImportModal from './common/FileImportModal'; import OpenProjectModal from './common/OpenProjectModal'; @@ -82,7 +83,7 @@ const Toolbar: React.FC = () => { const keySignatureOptions = Object.keys(KEY_SIGNATURE_MAP) as KeySignature[]; // Export options - const exportOptions = ["Export to KGStudio file", "Export to MIDI file"]; + const exportOptions = ["Export to KGStudio file", "Export to MIDI file", "Export to WAV"]; const handleProjectNameClick = () => { const newName = prompt("Enter project name:", projectName); @@ -202,6 +203,8 @@ const Toolbar: React.FC = () => { handleExportKGStudio(); } else if (exportType === "Export to MIDI file") { handleExportMIDI(); + } else if (exportType === "Export to WAV") { + handleBounceToWav(); } setShowExportDropdown(false); @@ -285,6 +288,22 @@ const Toolbar: React.FC = () => { } }; + const handleBounceToWav = async () => { + if (DEBUG_MODE.TOOLBAR) { + console.log("bouncing to WAV"); + } + + try { + const currentProject = KGCore.instance().getCurrentProject(); + await KGOfflineRenderer.instance().bounceToWav(currentProject, projectName); + setStatus(`Project "${projectName}" exported as WAV file`); + } catch (error) { + console.error("Error bouncing to WAV:", error); + setStatus(`Error exporting WAV: ${error}`); + window.alert(`Failed to export project as WAV: ${error}`); + } + }; + const handleImportProject = () => { if (DEBUG_MODE.TOOLBAR) { console.log("user clicked import button"); diff --git a/src/components/common/LoadingOverlay.css b/src/components/common/LoadingOverlay.css index 56de905..fbc209b 100644 --- a/src/components/common/LoadingOverlay.css +++ b/src/components/common/LoadingOverlay.css @@ -3,6 +3,7 @@ position: fixed; inset: 0; background-color: rgba(0, 0, 0, 0.4); + backdrop-filter: blur(4px); z-index: 20000; display: flex; align-items: center; diff --git a/src/core/audio-interface/KGOfflineRenderer.test.ts b/src/core/audio-interface/KGOfflineRenderer.test.ts new file mode 100644 index 0000000..fa8b39d --- /dev/null +++ b/src/core/audio-interface/KGOfflineRenderer.test.ts @@ -0,0 +1,147 @@ +import { describe, it, expect } from 'vitest'; +import { encodeWav } from './KGOfflineRenderer'; + +/** + * Create a minimal AudioBuffer-like object for testing. + * In the jsdom test environment, AudioBuffer is not available, + * so we create a plain object that matches the interface used by encodeWav. + */ +function createMockAudioBuffer( + options: { numberOfChannels: number; sampleRate: number; length: number }, + channelData?: Float32Array[] +): AudioBuffer { + const channels = channelData ?? Array.from({ length: options.numberOfChannels }, () => + new Float32Array(options.length) + ); + return { + numberOfChannels: options.numberOfChannels, + sampleRate: options.sampleRate, + length: options.length, + duration: options.length / options.sampleRate, + getChannelData: (ch: number) => channels[ch], + } as unknown as AudioBuffer; +} + +describe('encodeWav', () => { + it('should produce a valid RIFF/WAV header for stereo 44100Hz', () => { + const audioBuffer = createMockAudioBuffer({ + numberOfChannels: 2, + sampleRate: 44100, + length: 100, + }); + + const result = encodeWav(audioBuffer); + const view = new DataView(result); + + // RIFF header + expect(String.fromCharCode(view.getUint8(0), view.getUint8(1), view.getUint8(2), view.getUint8(3))).toBe('RIFF'); + expect(String.fromCharCode(view.getUint8(8), view.getUint8(9), view.getUint8(10), view.getUint8(11))).toBe('WAVE'); + + // File size field: total - 8 + const dataSize = 100 * 2 * 2; // 100 frames * 2 channels * 2 bytes + expect(view.getUint32(4, true)).toBe(44 + dataSize - 8); + + // fmt sub-chunk + expect(String.fromCharCode(view.getUint8(12), view.getUint8(13), view.getUint8(14), view.getUint8(15))).toBe('fmt '); + expect(view.getUint32(16, true)).toBe(16); // PCM sub-chunk size + expect(view.getUint16(20, true)).toBe(1); // audio format = PCM + expect(view.getUint16(22, true)).toBe(2); // channels + expect(view.getUint32(24, true)).toBe(44100); // sample rate + expect(view.getUint32(28, true)).toBe(44100 * 4); // byte rate (sampleRate * blockAlign) + expect(view.getUint16(32, true)).toBe(4); // block align (channels * bytesPerSample) + expect(view.getUint16(34, true)).toBe(16); // bits per sample + + // data sub-chunk + expect(String.fromCharCode(view.getUint8(36), view.getUint8(37), view.getUint8(38), view.getUint8(39))).toBe('data'); + expect(view.getUint32(40, true)).toBe(dataSize); + }); + + it('should produce correct header for mono 48000Hz', () => { + const audioBuffer = createMockAudioBuffer({ + numberOfChannels: 1, + sampleRate: 48000, + length: 50, + }); + + const result = encodeWav(audioBuffer); + const view = new DataView(result); + + expect(view.getUint16(22, true)).toBe(1); // 1 channel + expect(view.getUint32(24, true)).toBe(48000); // sample rate + expect(view.getUint16(32, true)).toBe(2); // block align (1 * 2) + expect(view.getUint32(28, true)).toBe(48000 * 2); // byte rate + expect(view.getUint32(40, true)).toBe(50 * 2); // data size + }); + + it('should have correct total buffer size', () => { + const audioBuffer = createMockAudioBuffer({ + numberOfChannels: 2, + sampleRate: 44100, + length: 200, + }); + + const result = encodeWav(audioBuffer); + // 44 header + 200 frames * 2 channels * 2 bytes + expect(result.byteLength).toBe(44 + 200 * 2 * 2); + }); + + it('should correctly convert float32 samples to int16', () => { + const left = new Float32Array([0, 1, -1, 0.5, -0.5]); + const right = new Float32Array([0, -1, 1, -0.5, 0.5]); + + const audioBuffer = createMockAudioBuffer( + { numberOfChannels: 2, sampleRate: 44100, length: 5 }, + [left, right] + ); + + const result = encodeWav(audioBuffer); + const view = new DataView(result); + + // Sample data starts at offset 44, interleaved L/R as int16 LE + // Sample 0: L=0 → 0, R=0 → 0 + expect(view.getInt16(44, true)).toBe(0); + expect(view.getInt16(46, true)).toBe(0); + + // Sample 1: L=1.0 → 32767, R=-1.0 → -32768 + expect(view.getInt16(48, true)).toBe(32767); + expect(view.getInt16(50, true)).toBe(-32768); + + // Sample 2: L=-1.0 → -32768, R=1.0 → 32767 + expect(view.getInt16(52, true)).toBe(-32768); + expect(view.getInt16(54, true)).toBe(32767); + + // Sample 3: L=0.5 → ~16383, R=-0.5 → ~-16384 + expect(view.getInt16(56, true)).toBeCloseTo(16383, -1); + expect(view.getInt16(58, true)).toBeCloseTo(-16384, -1); + }); + + it('should clamp values outside [-1, 1]', () => { + const data = new Float32Array([1.5, -1.5]); + + const audioBuffer = createMockAudioBuffer( + { numberOfChannels: 1, sampleRate: 44100, length: 2 }, + [data] + ); + + const result = encodeWav(audioBuffer); + const view = new DataView(result); + + // 1.5 clamped to 1.0 → 32767 + expect(view.getInt16(44, true)).toBe(32767); + // -1.5 clamped to -1.0 → -32768 + expect(view.getInt16(46, true)).toBe(-32768); + }); + + it('should handle zero-length audio', () => { + const audioBuffer = createMockAudioBuffer({ + numberOfChannels: 2, + sampleRate: 44100, + length: 0, + }); + + const result = encodeWav(audioBuffer); + expect(result.byteLength).toBe(44); // header only + const view = new DataView(result); + expect(view.getUint32(40, true)).toBe(0); // data size = 0 + }); +}); diff --git a/src/core/audio-interface/KGOfflineRenderer.ts b/src/core/audio-interface/KGOfflineRenderer.ts new file mode 100644 index 0000000..5269b6e --- /dev/null +++ b/src/core/audio-interface/KGOfflineRenderer.ts @@ -0,0 +1,446 @@ +import * as Tone from 'tone'; +import type { KGProject } from '../KGProject'; +import type { KGMidiNote } from '../midi/KGMidiNote'; +import type { KGAudioRegion } from '../region/KGAudioRegion'; +import { FLUIDR3_INSTRUMENT_MAP } from '../../constants/generalMidiConstants'; +import { pitchToNoteNameString } from '../../util/midiUtil'; +import { KGToneBuffersPool } from './KGToneBuffersPool'; +import { KGToneSamplerFactory } from './KGToneSamplerFactory'; +import { KGAudioInterface } from './KGAudioInterface'; + +export interface RenderOptions { + sampleRate?: number; // default 44100 + channels?: number; // default 2 (stereo) + tailSeconds?: number; // extra seconds after last note for release/reverb (default 2) +} + +export interface RenderingEvent { + type: 'start' | 'end' | 'error'; + message?: string; +} + +/** + * KGOfflineRenderer - Singleton for bouncing/rendering a project to audio. + * Uses Tone.Offline() to render faster-than-realtime via OfflineAudioContext. + */ +export class KGOfflineRenderer { + private static _instance: KGOfflineRenderer | null = null; + + private _isRendering = false; + private renderingListeners: Array<(_evt: RenderingEvent) => void> = []; + + private constructor() { + console.log('KGOfflineRenderer initialized'); + } + + public static instance(): KGOfflineRenderer { + if (!KGOfflineRenderer._instance) { + KGOfflineRenderer._instance = new KGOfflineRenderer(); + } + return KGOfflineRenderer._instance; + } + + // ===== EVENT LISTENERS ===== + + public addRenderingListener(listener: (_evt: RenderingEvent) => void): void { + this.renderingListeners.push(listener); + } + + public removeRenderingListener(listener: (_evt: RenderingEvent) => void): void { + this.renderingListeners = this.renderingListeners.filter(l => l !== listener); + } + + private emitRenderingEvent(evt: RenderingEvent): void { + for (const listener of this.renderingListeners) { + try { listener(evt); } catch { /* swallow */ } + } + } + + public get isRendering(): boolean { + return this._isRendering; + } + + // ===== PUBLIC API ===== + + /** + * Render the project to a ToneAudioBuffer using Tone.Offline. + */ + public async renderToBuffer(project: KGProject, options?: RenderOptions): Promise { + const sampleRate = options?.sampleRate ?? 44100; + const channels = options?.channels ?? 2; + const tailSeconds = options?.tailSeconds ?? 2; + + // Calculate render duration in seconds + const bpm = project.getBpm(); + const secondsPerBeat = 60 / bpm; + const timeSignature = project.getTimeSignature(); + const beatsPerBar = timeSignature.numerator; + + let renderStartBeat = 0; + let renderEndBeat: number; + + const isLooping = project.getIsLooping(); + // Looping range is determined up-front; non-looping range is computed + // after collecting track data (see below). + if (isLooping) { + const [startBar, endBarOriginal] = project.getLoopingRange(); + const endBar = (startBar === 0 && endBarOriginal === 0) ? project.getMaxBars() : endBarOriginal; + renderStartBeat = startBar * beatsPerBar; + renderEndBeat = (endBar + 1) * beatsPerBar; // +1 because endBar is inclusive + } else { + // Placeholder — will be refined after track data collection + renderEndBeat = project.getMaxBars() * beatsPerBar; + } + + // Determine solo state from the live audio buses + const audioInterface = KGAudioInterface.instance(); + + // Collect track info we'll need inside the offline callback + const tracks = project.getTracks(); + + // Pre-collect all the data we need before entering the offline context + const midiTrackData: Array<{ + trackId: string; + instrumentName: string; + volume: number; + muted: boolean; + solo: boolean; + regions: Array<{ + startBeat: number; + notes: Array<{ startBeat: number; endBeat: number; durationBeats: number; pitch: number; velocity: number }>; + }>; + }> = []; + + const audioTrackData: Array<{ + trackId: string; + volume: number; + muted: boolean; + solo: boolean; + regions: Array<{ + startBeat: number; + lengthBeats: number; + audioFileId: string; + clipStartOffsetSeconds: number; + audioDurationSeconds: number; + rawBuffer: AudioBuffer; + }>; + }> = []; + + let hasSoloedTracks = false; + + for (const track of tracks) { + const trackId = track.getId().toString(); + + if (track.getType() === 'MIDI') { + const midiTrack = track as unknown as { getInstrument: () => string }; + const instrumentName = String(midiTrack.getInstrument()); + + // Get live bus state for volume/mute/solo via public getters + const volume = audioInterface.getTrackVolume(trackId); + const muted = audioInterface.getTrackMuted(trackId); + const solo = audioInterface.getTrackSolo(trackId); + if (solo) hasSoloedTracks = true; + + const regions: typeof midiTrackData[0]['regions'] = []; + for (const region of track.getRegions()) { + if (region.getCurrentType() === 'KGMidiRegion') { + const midiRegion = region as unknown as { getNotes: () => KGMidiNote[] }; + if (midiRegion.getNotes) { + const notes = midiRegion.getNotes().map(note => ({ + startBeat: note.getStartBeat() + region.getStartFromBeat(), + endBeat: note.getEndBeat() + region.getStartFromBeat(), + durationBeats: note.getEndBeat() - note.getStartBeat(), + pitch: note.getPitch(), + velocity: note.getVelocity(), + })); + regions.push({ startBeat: region.getStartFromBeat(), notes }); + } + } + } + + midiTrackData.push({ trackId, instrumentName, volume, muted, solo, regions }); + } else if (track.getType() === 'Wave') { + const volume = audioInterface.getTrackVolume(trackId); + const muted = audioInterface.getTrackMuted(trackId); + const solo = audioInterface.getTrackSolo(trackId); + if (solo) hasSoloedTracks = true; + + const regions: typeof audioTrackData[0]['regions'] = []; + for (const region of track.getRegions()) { + if (region.getCurrentType() === 'KGAudioRegion') { + const audioRegion = region as unknown as KGAudioRegion; + const audioFileId = audioRegion.getAudioFileId(); + const rawBuffer = audioInterface.getAudioBuffer(trackId, audioFileId); + if (rawBuffer) { + regions.push({ + startBeat: region.getStartFromBeat(), + lengthBeats: region.getLength(), + audioFileId, + clipStartOffsetSeconds: audioRegion.getClipStartOffsetSeconds(), + audioDurationSeconds: audioRegion.getAudioDurationSeconds(), + rawBuffer, + }); + } + } + } + + audioTrackData.push({ trackId, volume, muted, solo, regions }); + } + } + + // For non-looping mode, tighten the render range to the actual content + if (!isLooping) { + let contentStart = Infinity; + let contentEnd = 0; + + for (const t of midiTrackData) { + for (const r of t.regions) { + for (const n of r.notes) { + if (n.startBeat < contentStart) contentStart = n.startBeat; + if (n.endBeat > contentEnd) contentEnd = n.endBeat; + } + } + } + for (const t of audioTrackData) { + for (const r of t.regions) { + if (r.startBeat < contentStart) contentStart = r.startBeat; + const regionEnd = r.startBeat + r.lengthBeats; + if (regionEnd > contentEnd) contentEnd = regionEnd; + } + } + + if (contentEnd > 0) { + renderStartBeat = contentStart; + renderEndBeat = contentEnd; + } + // else: no content found, keep the full project range as fallback + } + + const durationSeconds = (renderEndBeat - renderStartBeat) * secondsPerBeat + tailSeconds; + + console.log(`Offline render: ${durationSeconds}s (beats ${renderStartBeat}-${renderEndBeat}), ${sampleRate}Hz, ${channels}ch`); + + // Run offline render + const buffer = await Tone.Offline(async (context) => { + // Master gain routed to offline destination + const masterGain = new Tone.Gain(1).toDestination(); + + // Set BPM and time signature on offline transport + context.transport.bpm.value = bpm; + context.transport.timeSignature = [timeSignature.numerator, timeSignature.denominator]; + + // ---- Create MIDI track samplers ---- + const samplerPromises: Promise[] = []; + + for (const trackInfo of midiTrackData) { + if (!shouldPlay(trackInfo, hasSoloedTracks)) continue; + + const promise = (async () => { + try { + // Get cached buffers from pool + const audioBuffers = await KGToneBuffersPool.instance().getToneAudioBuffers(trackInfo.instrumentName); + const pitchRange = FLUIDR3_INSTRUMENT_MAP[trackInfo.instrumentName]?.pitchRange || [21, 108]; + const urlMap = KGToneSamplerFactory.instance().convertBuffersToUrls(audioBuffers, pitchRange); + + // Create sampler inside offline context + const sampler = await new Promise((resolve, reject) => { + const timeout = setTimeout(() => reject(new Error(`Offline sampler timeout: ${trackInfo.instrumentName}`)), 30000); + const s = new Tone.Sampler({ + urls: urlMap, + onload: () => { clearTimeout(timeout); resolve(s); }, + onerror: (err) => { clearTimeout(timeout); reject(err); }, + }); + }); + + // Apply volume + const volumeDb = trackInfo.volume > 0 ? 20 * Math.log10(trackInfo.volume) : -Infinity; + sampler.volume.value = volumeDb; + sampler.connect(masterGain); + + // Schedule all notes for this track + for (const regionInfo of trackInfo.regions) { + for (const note of regionInfo.notes) { + // Skip notes outside render range + if (note.startBeat >= renderEndBeat || note.endBeat <= renderStartBeat) continue; + + const offsetBeat = note.startBeat - renderStartBeat; + const noteStartTime = offsetBeat * secondsPerBeat; + const noteDuration = note.durationBeats * secondsPerBeat; + const noteName = pitchToNoteNameString(note.pitch); + const velocity = note.velocity / 127; + + context.transport.schedule((time) => { + sampler.triggerAttackRelease(noteName, noteDuration, time, velocity); + }, noteStartTime); + } + } + } catch (error) { + console.error(`Offline render: failed to create sampler for ${trackInfo.instrumentName}:`, error); + } + })(); + + samplerPromises.push(promise); + } + + // ---- Create audio track gain nodes and schedule regions ---- + for (const trackInfo of audioTrackData) { + if (!shouldPlay(trackInfo, hasSoloedTracks)) continue; + + const trackGain = new Tone.Gain(trackInfo.volume); + trackGain.connect(masterGain); + + for (const regionInfo of trackInfo.regions) { + const regionStartBeat = regionInfo.startBeat; + const regionEndBeat = regionStartBeat + regionInfo.lengthBeats; + + // Skip regions outside render range + if (regionStartBeat >= renderEndBeat || regionEndBeat <= renderStartBeat) continue; + + const clipStartOffsetSeconds = regionInfo.clipStartOffsetSeconds; + const audioDurationSeconds = regionInfo.audioDurationSeconds; + const regionLengthSeconds = regionInfo.lengthBeats * secondsPerBeat; + const effectiveDurationSeconds = Math.min(regionLengthSeconds, audioDurationSeconds - clipStartOffsetSeconds); + + if (effectiveDurationSeconds <= 0) continue; + + const offsetBeat = regionStartBeat - renderStartBeat; + const regionStartTime = Math.max(0, offsetBeat * secondsPerBeat); + + // Create buffer source NOW while the offline context is still active. + // Schedule callbacks fire during rendering after Tone.js restores the + // main context, so creating nodes there would bind them to the wrong context. + const toneBuffer = new Tone.ToneAudioBuffer(regionInfo.rawBuffer); + const source = new Tone.ToneBufferSource(toneBuffer); + source.connect(trackGain); + + context.transport.schedule((time) => { + source.start(time, clipStartOffsetSeconds, effectiveDurationSeconds); + }, regionStartTime); + } + } + + // Wait for all samplers to load + await Promise.all(samplerPromises); + + // Start offline transport + context.transport.start(0); + }, durationSeconds, channels, sampleRate); + + console.log(`Offline render complete: ${buffer.duration}s, ${buffer.numberOfChannels}ch`); + return buffer; + } + + /** + * Render the project and download as a WAV file. + */ + public async bounceToWav(project: KGProject, fileName?: string, options?: RenderOptions): Promise { + if (this._isRendering) { + console.warn('Already rendering, ignoring bounce request'); + return; + } + + this._isRendering = true; + this.emitRenderingEvent({ type: 'start', message: 'Bouncing to WAV...' }); + + try { + const toneBuffer = await this.renderToBuffer(project, options); + const audioBuffer = toneBuffer.get() as AudioBuffer; + const wavData = encodeWav(audioBuffer); + + // Trigger download + const blob = new Blob([wavData], { type: 'audio/wav' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = `${fileName ?? 'bounce'}.wav`; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + URL.revokeObjectURL(url); + + this.emitRenderingEvent({ type: 'end', message: 'Bounce complete' }); + console.log('WAV bounce complete'); + } catch (error) { + console.error('Bounce to WAV failed:', error); + this.emitRenderingEvent({ type: 'error', message: String(error) }); + throw error; + } finally { + this._isRendering = false; + } + } +} + +// ===== HELPERS ===== + +function shouldPlay(trackInfo: { muted: boolean; solo: boolean }, hasSoloedTracks: boolean): boolean { + if (trackInfo.muted) return false; + if (hasSoloedTracks) return trackInfo.solo; + return true; +} + +// ===== WAV ENCODER ===== + +/** + * Encode an AudioBuffer as a 16-bit PCM WAV file. + * Returns the complete WAV file as an ArrayBuffer. + */ +export function encodeWav(audioBuffer: AudioBuffer): ArrayBuffer { + const numChannels = audioBuffer.numberOfChannels; + const sampleRate = audioBuffer.sampleRate; + const numFrames = audioBuffer.length; + const bitsPerSample = 16; + const bytesPerSample = bitsPerSample / 8; + const blockAlign = numChannels * bytesPerSample; + const dataSize = numFrames * blockAlign; + const headerSize = 44; + const totalSize = headerSize + dataSize; + + const buffer = new ArrayBuffer(totalSize); + const view = new DataView(buffer); + + // Collect channel data + const channels: Float32Array[] = []; + for (let ch = 0; ch < numChannels; ch++) { + channels.push(audioBuffer.getChannelData(ch)); + } + + // RIFF header + writeString(view, 0, 'RIFF'); + view.setUint32(4, totalSize - 8, true); // file size - 8 + writeString(view, 8, 'WAVE'); + + // fmt sub-chunk + writeString(view, 12, 'fmt '); + view.setUint32(16, 16, true); // sub-chunk size (16 for PCM) + view.setUint16(20, 1, true); // audio format (1 = PCM) + view.setUint16(22, numChannels, true); + view.setUint32(24, sampleRate, true); + view.setUint32(28, sampleRate * blockAlign, true); // byte rate + view.setUint16(32, blockAlign, true); + view.setUint16(34, bitsPerSample, true); + + // data sub-chunk + writeString(view, 36, 'data'); + view.setUint32(40, dataSize, true); + + // Interleave and convert float32 [-1, 1] to int16 + let offset = headerSize; + for (let i = 0; i < numFrames; i++) { + for (let ch = 0; ch < numChannels; ch++) { + const sample = channels[ch][i]; + // Clamp to [-1, 1] then scale to int16 range + const clamped = Math.max(-1, Math.min(1, sample)); + const int16 = clamped < 0 ? clamped * 0x8000 : clamped * 0x7FFF; + view.setInt16(offset, int16, true); + offset += bytesPerSample; + } + } + + return buffer; +} + +function writeString(view: DataView, offset: number, str: string): void { + for (let i = 0; i < str.length; i++) { + view.setUint8(offset + i, str.charCodeAt(i)); + } +} diff --git a/src/core/audio-interface/KGToneSamplerFactory.ts b/src/core/audio-interface/KGToneSamplerFactory.ts index 944f9c9..676434d 100644 --- a/src/core/audio-interface/KGToneSamplerFactory.ts +++ b/src/core/audio-interface/KGToneSamplerFactory.ts @@ -78,7 +78,7 @@ export class KGToneSamplerFactory { * Convert ToneAudioBuffers to the URL format expected by Tone.Sampler * This creates a mapping from note names to the actual audio buffers */ - private convertBuffersToUrls(audioBuffers: Tone.ToneAudioBuffers, range: number[] = [21, 118]): { [key: string]: Tone.ToneAudioBuffer } { + public convertBuffersToUrls(audioBuffers: Tone.ToneAudioBuffers, range: number[] = [21, 118]): { [key: string]: Tone.ToneAudioBuffer } { const urls: { [key: string]: Tone.ToneAudioBuffer } = {}; // Note names in order (using flats instead of sharps where applicable) From d16553e659006cea8b0df1177d4985e27e24cc71 Mon Sep 17 00:00:00 2001 From: Xiaohan-Tian <157918347+Xiaohan-Tian@users.noreply.github.com> Date: Sat, 11 Apr 2026 12:30:15 -0700 Subject: [PATCH 12/13] feat: added bouncing to MP3 feature --- package-lock.json | 7 ++ package.json | 1 + src/App.tsx | 10 +- src/components/Toolbar.tsx | 20 +++- src/core/audio-interface/KGOfflineRenderer.ts | 91 +++++++++++++++++++ 5 files changed, 123 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9ebe900..fba7196 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "K.G.Studio", "version": "0.9.0-build.20260406", "dependencies": { + "@breezystack/lamejs": "^1.2.7", "class-transformer": "^0.5.1", "idb": "^8.0.3", "jszip": "^3.10.1", @@ -391,6 +392,12 @@ "node": ">=18" } }, + "node_modules/@breezystack/lamejs": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@breezystack/lamejs/-/lamejs-1.2.7.tgz", + "integrity": "sha512-6wc7ck65ctA75Hq7FYHTtTvGnYs6msgdxiSUICQ+A01nVOWg6rqouZB8IdyteRlfpYYiFovkf67dIeOgWIUzTA==", + "license": "LGPL-3.0" + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", diff --git a/package.json b/package.json index 50c926f..d2611a1 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "test:run": "vitest run" }, "dependencies": { + "@breezystack/lamejs": "^1.2.7", "class-transformer": "^0.5.1", "idb": "^8.0.3", "jszip": "^3.10.1", diff --git a/src/App.tsx b/src/App.tsx index 9fea06f..365fb93 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -238,14 +238,14 @@ const MigrationOverlayContainer: React.FC = () => { ); }; -// Bounce/render overlay — shown during offline WAV rendering +// Bounce/render overlay — shown during offline WAV/MP3 rendering const BounceOverlayContainer: React.FC = () => { - const [isRendering, setIsRendering] = useState(false); + const [renderMessage, setRenderMessage] = useState(null); useEffectReact(() => { const renderer = KGOfflineRenderer.instance(); const listener = (evt: RenderingEvent) => { - setIsRendering(evt.type === 'start'); + setRenderMessage(evt.type === 'start' ? (evt.message ?? 'Rendering...') : null); }; renderer.addRenderingListener(listener); return () => { @@ -255,8 +255,8 @@ const BounceOverlayContainer: React.FC = () => { return ( ); }; diff --git a/src/components/Toolbar.tsx b/src/components/Toolbar.tsx index 30e3831..f0fe8e8 100644 --- a/src/components/Toolbar.tsx +++ b/src/components/Toolbar.tsx @@ -83,7 +83,7 @@ const Toolbar: React.FC = () => { const keySignatureOptions = Object.keys(KEY_SIGNATURE_MAP) as KeySignature[]; // Export options - const exportOptions = ["Export to KGStudio file", "Export to MIDI file", "Export to WAV"]; + const exportOptions = ["Export to KGStudio file", "Export to MIDI file", "Export to WAV", "Export to MP3"]; const handleProjectNameClick = () => { const newName = prompt("Enter project name:", projectName); @@ -205,6 +205,8 @@ const Toolbar: React.FC = () => { handleExportMIDI(); } else if (exportType === "Export to WAV") { handleBounceToWav(); + } else if (exportType === "Export to MP3") { + handleBounceToMp3(); } setShowExportDropdown(false); @@ -304,6 +306,22 @@ const Toolbar: React.FC = () => { } }; + const handleBounceToMp3 = async () => { + if (DEBUG_MODE.TOOLBAR) { + console.log("bouncing to MP3"); + } + + try { + const currentProject = KGCore.instance().getCurrentProject(); + await KGOfflineRenderer.instance().bounceToMp3(currentProject, projectName); + setStatus(`Project "${projectName}" exported as MP3 file`); + } catch (error) { + console.error("Error bouncing to MP3:", error); + setStatus(`Error exporting MP3: ${error}`); + window.alert(`Failed to export project as MP3: ${error}`); + } + }; + const handleImportProject = () => { if (DEBUG_MODE.TOOLBAR) { console.log("user clicked import button"); diff --git a/src/core/audio-interface/KGOfflineRenderer.ts b/src/core/audio-interface/KGOfflineRenderer.ts index 5269b6e..6f5af03 100644 --- a/src/core/audio-interface/KGOfflineRenderer.ts +++ b/src/core/audio-interface/KGOfflineRenderer.ts @@ -7,11 +7,13 @@ import { pitchToNoteNameString } from '../../util/midiUtil'; import { KGToneBuffersPool } from './KGToneBuffersPool'; import { KGToneSamplerFactory } from './KGToneSamplerFactory'; import { KGAudioInterface } from './KGAudioInterface'; +import { Mp3Encoder } from '@breezystack/lamejs'; export interface RenderOptions { sampleRate?: number; // default 44100 channels?: number; // default 2 (stereo) tailSeconds?: number; // extra seconds after last note for release/reverb (default 2) + mp3Kbps?: number; // MP3 bitrate in kbps (default 192) } export interface RenderingEvent { @@ -368,6 +370,44 @@ export class KGOfflineRenderer { this._isRendering = false; } } + /** + * Render the project and download as an MP3 file. + */ + public async bounceToMp3(project: KGProject, fileName?: string, options?: RenderOptions): Promise { + if (this._isRendering) { + console.warn('Already rendering, ignoring bounce request'); + return; + } + + this._isRendering = true; + this.emitRenderingEvent({ type: 'start', message: 'Bouncing to MP3...' }); + + try { + const toneBuffer = await this.renderToBuffer(project, options); + const audioBuffer = toneBuffer.get() as AudioBuffer; + const mp3Data = encodeMp3(audioBuffer, options?.mp3Kbps ?? 192); + + // Trigger download + const blob = new Blob(mp3Data, { type: 'audio/mp3' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = `${fileName ?? 'bounce'}.mp3`; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + URL.revokeObjectURL(url); + + this.emitRenderingEvent({ type: 'end', message: 'Bounce complete' }); + console.log('MP3 bounce complete'); + } catch (error) { + console.error('Bounce to MP3 failed:', error); + this.emitRenderingEvent({ type: 'error', message: String(error) }); + throw error; + } finally { + this._isRendering = false; + } + } } // ===== HELPERS ===== @@ -444,3 +484,54 @@ function writeString(view: DataView, offset: number, str: string): void { view.setUint8(offset + i, str.charCodeAt(i)); } } + +// ===== MP3 ENCODER ===== + +/** + * Convert float32 sample to Int16. + */ +function floatToInt16(sample: number): number { + const clamped = Math.max(-1, Math.min(1, sample)); + return clamped < 0 ? clamped * 0x8000 : clamped * 0x7FFF; +} + +/** + * Encode an AudioBuffer as MP3 using lamejs. + * Returns an array of Int8Array chunks (suitable for Blob constructor). + */ +export function encodeMp3(audioBuffer: AudioBuffer, kbps: number = 192): Uint8Array[] { + const numChannels = audioBuffer.numberOfChannels; + const sampleRate = audioBuffer.sampleRate; + const numFrames = audioBuffer.length; + const encoder = new Mp3Encoder(numChannels, sampleRate, kbps); + + const chunkSize = 1152; // MPEG frame size + const mp3Chunks: Uint8Array[] = []; + + const leftFloat = audioBuffer.getChannelData(0); + const rightFloat = numChannels > 1 ? audioBuffer.getChannelData(1) : leftFloat; + + for (let i = 0; i < numFrames; i += chunkSize) { + const end = Math.min(i + chunkSize, numFrames); + const leftChunk = new Int16Array(end - i); + const rightChunk = new Int16Array(end - i); + + for (let j = 0; j < leftChunk.length; j++) { + leftChunk[j] = floatToInt16(leftFloat[i + j]); + rightChunk[j] = floatToInt16(rightFloat[i + j]); + } + + const mp3buf = encoder.encodeBuffer(leftChunk, rightChunk); + if (mp3buf.length > 0) { + mp3Chunks.push(mp3buf); + } + } + + // Flush remaining data + const tail = encoder.flush(); + if (tail.length > 0) { + mp3Chunks.push(tail); + } + + return mp3Chunks; +} From d082c9cfb5f834989c807ff9a42f37fb98a9f474 Mon Sep 17 00:00:00 2001 From: Xiaohan-Tian <157918347+Xiaohan-Tian@users.noreply.github.com> Date: Sat, 11 Apr 2026 12:54:10 -0700 Subject: [PATCH 13/13] fix: missing tool calling info in the exported conversation JSON and MD --- src/components/ChatBox.tsx | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/components/ChatBox.tsx b/src/components/ChatBox.tsx index 6fe7a06..c2736b4 100644 --- a/src/components/ChatBox.tsx +++ b/src/components/ChatBox.tsx @@ -83,6 +83,8 @@ const ChatBox: React.FC = ({ isVisible }) => { id: m.id, role: m.role, content: m.content, + ...(m.tool_calls ? { tool_calls: m.tool_calls } : {}), + ...(m.tool_call_id ? { tool_call_id: m.tool_call_id } : {}), timestamp: formatLocalDateTime(new Date(m.timestamp)) })); const json = JSON.stringify(exportMessages, null, 2); @@ -99,15 +101,27 @@ const ChatBox: React.FC = ({ isVisible }) => { const res = await fetch(templateUrl); const template = await res.text(); - const sections = agentMessages - .filter(m => m.role === 'user' || m.role === 'assistant') - .map((m) => { - const roleLabel = m.role === 'assistant' ? 'Assistant' : 'User'; + const sections = agentMessages.map((m) => { + let roleLabel: string; + if (m.role === 'assistant') roleLabel = 'Assistant'; + else if (m.role === 'tool') roleLabel = 'Tool Result'; + else roleLabel = 'User'; + const ts = formatLocalDateTime(new Date(m.timestamp)); + + let content = m.content ?? ''; + // For assistant messages with tool_calls but no text, show tool call info + if (m.role === 'assistant' && m.tool_calls && m.tool_calls.length > 0) { + const toolCallsText = m.tool_calls.map(tc => + `**Tool call: ${tc.function.name}**\n\`\`\`json\n${tc.function.arguments}\n\`\`\`` + ).join('\n\n'); + content = content ? `${content}\n\n${toolCallsText}` : toolCallsText; + } + return template .replace('{role}', roleLabel) .replace('{timestamp}', ts) - .replace('{content}', m.content ?? ''); + .replace('{content}', content); }); const markdown = sections.join('\n');