Skip to content

Release v0.4.0#10

Merged
crescent-stdio merged 29 commits intomainfrom
release/0.4.0
Dec 6, 2025
Merged

Release v0.4.0#10
crescent-stdio merged 29 commits intomainfrom
release/0.4.0

Conversation

@crescent-stdio
Copy link
Owner

Added

  • Multi-instrument MIDI support with GM program detection and auto soundfont mapping
  • Per-track controls for visibility, mute, volume, sustain, and waveform/piano-roll toggles
  • Track-aware instrument icons, palettes, and color handling for multi-track MIDI files

Changed

  • Updated player, visualization, and loop controls to handle multi-track state across audio and UI
  • Refreshed file list and wave list UI to expose per-track toggles and multi-file controls
  • Improved MIDI parser and sampler manager to keep track metadata consistent across playback and rendering

…ck visibility management and instrument family mapping.
…nt and adding a track accordion for multi-track files, improving user experience in the settings UI.
…ume adjustments and enhancing the multi-track accordion UI for better user interaction.
…acking and improving track mute functionality.
…oundfont selection based on instrument family.
…ness variation based on track index, improving user experience in the multi-track accordion UI.
…etadata, enabling tooltip display of track names in the piano roll UI.
…e callbacks for file add requests to support VS Code integration, and implement drag-and-drop functionality for audio files.
… filenames with extensions and adding debug logging for file additions.
…update CHANGELOG for version 0.4.0; move acknowledgments to NOTICE file; clean up LICENSE; enhance README with multi-instrument MIDI support details.
@crescent-stdio crescent-stdio self-assigned this Dec 6, 2025
@crescent-stdio crescent-stdio added enhancement An improvement to an existing feature. feature A new feature or request labels Dec 6, 2025
@crescent-stdio crescent-stdio merged commit 49f19c5 into main Dec 6, 2025
5 checks passed
@crescent-stdio crescent-stdio deleted the release/0.4.0 branch December 6, 2025 14:23
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This release adds comprehensive multi-instrument MIDI support to the Wave-Roll application, enabling users to work with complex multi-track MIDI files. The PR introduces General MIDI program detection, per-track visibility/mute/volume controls, automatic soundfont mapping, and enhanced UI elements to manage multiple tracks within a single MIDI file.

Key Changes:

  • Added GM instrument family detection and auto soundfont routing for multi-instrument playback
  • Implemented per-track controls (visibility, mute, volume, sustain, auto-instrument toggle)
  • Enhanced UI with track accordions, instrument icons, and color-coded track indicators

Reviewed changes

Copilot reviewed 43 out of 45 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
wave-roll-logo.png Added new PNG logo asset for branding
test/multi-midi-manager.test.ts Added comprehensive tests for track visibility filtering and GM instrument mapping
test/instrument-icons.test.ts Added tests for instrument icon registry and fallback handling
src/lib/core/visualization/piano-roll/utils/color-calculator.ts Added HSL color conversion and track variant color generation
src/lib/core/visualization/piano-roll/types-internal.ts Extended FileInfo to include track metadata for tooltips
src/lib/core/visualization/piano-roll/piano-roll.ts Updated tooltip rendering to show track names, fixed canvas responsive layout
src/lib/core/utils/midi/types.ts Added InstrumentFamily type and TrackInfo interface for multi-instrument support
src/lib/core/state/types.ts Added uniformTrackColor visual state option
src/lib/core/state/default.ts Set default uniformTrackColor to false
src/lib/core/playback/core-playback-engine.ts Reformatted code and added preload logic for auto-instrument samplers
src/lib/core/parsers/midi-parser.ts Added GM program detection, instrument family mapping, and per-track metadata extraction
src/lib/core/midi/types.ts Extended MidiFileEntry with per-track visibility, mute, volume, and auto-instrument state
src/lib/core/midi/multi-midi-manager.ts Implemented track-level control methods and filtered note visibility by track
src/lib/core/midi/file-entry.ts Added VS Code webview detection to preserve file extensions
src/lib/core/controls/loop-controls.ts Fixed icon reference and formatting improvements
src/lib/core/audio/unified-audio-controller.ts Added preloadAutoInstrumentSamplers method and reformatted code
src/lib/core/audio/managers/sampler-manager.ts Implemented program-based sampler cache with lazy loading and track-aware playback
src/lib/core/audio/managers/midi-player-group.ts Added program sampler support, pending player states, and track-level volume/mute handling
src/lib/core/audio/gm-instruments.ts Added GM instrument names, soundfont URLs, and helper functions
src/lib/components/ui/types.ts Added file drop control, VS Code integration callbacks, and data file handling
src/lib/components/ui/settings/sections/wave-list.ts Converted to drag-and-drop zone UI with visual feedback
src/lib/components/ui/settings/sections/solo-appearance.ts Code formatting improvements
src/lib/components/ui/settings/sections/file-list.ts Added track accordions, uniform color toggle, and drag-and-drop zone
src/lib/components/ui/settings/modal/index.ts Updated modal title from "Tracks" to "Files"
src/lib/components/ui/file/toggle-manager.ts Updated button text from "Tracks" to "Files"
src/lib/components/ui/file/components/file-toggle-item.ts Added track accordion with per-track controls and instrument icons
src/lib/components/ui/controls/settings.ts Updated comment referencing modal title
src/index.ts Added WaveRollPlayer export for external consumption

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +27 to +28
/** Common SVG attributes for consistent styling */
const SVG_ATTRS = `width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="pointer-events: none;"`;
Copy link

Copilot AI Dec 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unused variable SVG_ATTRS.

Suggested change
/** Common SVG attributes for consistent styling */
const SVG_ATTRS = `width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="pointer-events: none;"`;

Copilot uses AI. Check for mistakes.
const sw = Math.max(1, baseStroke);

// Base grid coordinates
const w = 24;
Copy link

Copilot AI Dec 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unused variable w.

Suggested change
const w = 24;

Copilot uses AI. Check for mistakes.

// Base grid coordinates
const w = 24;
const h = 24;
Copy link

Copilot AI Dec 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unused variable h.

Suggested change
const h = 24;

Copilot uses AI. Check for mistakes.
case "square": {
const d = r / Math.SQRT2;
return `<rect x="${cx - d}" y="${cy - d}" width="${2 * d}" height="${2 * d}" fill="${fill}" stroke="${stroke}" stroke-width="${sw}"/>`;
const d = r / Math.SQRT2; // Make square fit within the circle radius area approx
Copy link

Copilot AI Dec 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unused variable d.

Suggested change
const d = r / Math.SQRT2; // Make square fit within the circle radius area approx

Copilot uses AI. Check for mistakes.
import {
DEFAULT_SAMPLE_MAP,
AUDIO_CONSTANTS,
AudioPlayerState,
Copy link

Copilot AI Dec 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unused import AudioPlayerState.

Suggested change
AudioPlayerState,

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement An improvement to an existing feature. feature A new feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant