3dtours
44e0a6d736
feat: sử dụng synth cho MIDI KEys
2026-07-26 17:36:36 +07:00
3dtours
bfb636f0bc
fix(ui): remove duplicate Synth button, fix MIDI keyboard handler
...
- Remove small Synth button between ARM and Monitor (duplicate)
- Remove empty try/catch that swallowed all MIDI handler errors
- Ensure MIDI keyboard passes synth_engine context to playNote
- Direct fallback to armed main track when no PIANO_ROLL sub-tab armed
2026-07-26 17:25:38 +07:00
3dtours
443e09b592
feat(midi): play selected instrument on armed main track via MIDI keyboard
...
When MIDI note-on received and no PIANO_ROLL sub-tab is armed,
fallback to armed track in main session. Read its synth_engine and
instrumentProgram to route audio through correct instrument.
Route to track gainNode if available.
2026-07-26 17:19:51 +07:00
3dtours
ef6fe0e718
fix(ui): search instrument names inside SoundFont, not just SF names
...
Add sfPresetSearchQuery state + search input in instrument selector
modal. Filters sfPresets by name (case-insensitive) when user types.
Clear search on SoundFont switch / modal close.
2026-07-26 17:15:50 +07:00
3dtours
c2bfeb7163
feat(ui): add Drum channel toggle button on track panel
...
- toggleTrackDrum: sets is_percussion + soundfont_bank=128
- 🥁 button in track control panel (between Solo and Record)
- Shows 'D' badge when active, routes to MIDI channel 9
- Instrument preset list shows 🥁 prefix for bank=128 presets
2026-07-26 17:11:42 +07:00
3dtours
013465f27a
fix(engine): replace pyfluidsynth high-level API with low-level CFFI
...
Export installed pyfluidsynth is actually the low-level ctypes
wrapper (fluidsynth), not the high-level FluidSynth class. The
broken call fluidsynth.FluidSynth() caused silent fallback to
oscillator synth for ALL SoundFont renders. Replace with:
new_fluid_settings / new_fluid_synth / fluid_synth_sfload /
fluid_synth_program_select / fluid_synth_write_s16_stereo.
Also fix synth time advancement: call write_s16_stereo for
silence gaps instead of just advancing a cursor.
2026-07-26 17:08:40 +07:00
3dtours
280c8f598f
fix(engine): case-insensitive SF2 lookup, add synth_engine to serialization
...
- _find_sf2_path now case-insensitive to match catalog IDs
- serializeTracksList includes synth_engine, soundfont_id, instrument_source
- deserializeTracksList restores synth_engine and soundfont_id
2026-07-26 17:00:28 +07:00
3dtours
d48262d468
feat(engine): fix SF2 path resolution, add synth_engine struct and fallback chain
...
- Fix SF2 path: search upload dir, system dir, static dir (backward compat)
- Add synth_engine struct parsing with flat field fallback
- Add 3-level fallback: selected SF -> default SF -> oscillator synth
- Write synth_engine in setTrackInstrument UI setters
- Pass synth_engine context to client SoundFontPlayer and AI gateway
2026-07-26 16:49:40 +07:00
3dtours
2ab989132b
fix(ui): wire Synth button to VST3 selection and render engine
...
- UI: setTrackInstrumentWithProgram stores instrumentId + enables MIDI type
- UI: SoundFont preset selection now passes soundfont_bank to server
- Server: render_engine reads instrument_id field (fallback instrument)
- Serialize/deserialize: soundfont_bank, soundfont_program preserved
- Rebuilt app.precompiled.js from app.jsx
2026-07-26 16:25:26 +07:00
3dtours
3e805179c2
feat: sử dụng VST3, Soundfont, pianobook
2026-07-26 16:21:32 +07:00
3dtours
89c7237379
feat: add SoundFont inspection engine + AI instrument schema
...
- SoundFontInspector (sf2utils) scans .sf2, generates full/condensed catalog
- GET /api/v1/plugins/soundfonts/catalog with lazy init + cache invalidation
- AI tool generate_multitrack_midi now requires soundfont_id/bank/program
- Condensed catalog auto-injected into AI system prompt with bank rules
- Server render: FluidSynth program_select uses bank/program + channel routing (drums→ch9)
- VST3 pedalboard path inserts CC0 bank select + program change before notes
- DecentSamplerManager loads .dspreset with CWD fix for relative sample paths
- Pianobook render branch in render_engine.py
- Client SonicSF: controllerChange, programChange, applyAITrackInstrument
- Post-AI track creation applies instrument via applyAITrackInstrument
- Background cache rescan on .sf2 upload, frontend re-fetches catalog
- libcurl4 + VST3 dirs in Dockerfile
2026-07-26 12:36:48 +07:00
3dtours
f16467eba1
fix: đã sửa lỗi back và rewind
2026-07-26 12:27:08 +07:00
3dtours
b1bbf567ab
fix(piano-roll): seek-to-start restarts playback
...
- Add seekPlaybackTo(time) that stops, updates refs, reschedules
MIDI, and restarts playback for both sub-tab and main timeline
- 'Quay lại đầu' and 'Đầu vùng chọn' buttons use seekPlaybackTo
2026-07-26 12:22:51 +07:00
3dtours
8204bc016d
fix: đã sửa lỗi stop và nút loop
2026-07-26 12:21:02 +07:00
3dtours
b0d7f35a1e
fix(piano-roll): loop only on btn + instant stop
...
- Sub-tab selection loop only active when st.isLooping is true
- End-of-playback loop uses st.isLooping, not global isLoopingSelection
- SonicSF.stopAll() sets gain 0 and stops oscillators immediately
2026-07-26 12:16:01 +07:00
3dtours
653c0747cb
fix: đã sửa lỗi click vị trí mới cho playhead
2026-07-26 12:12:48 +07:00
3dtours
4e880850f5
fix(piano-roll): playhead seek + sound cracking
...
- Piano roll ruler click during playback now seeks and continues playing
- ADSR envelope uses linearRampToValueAtTime for crack-free release
- stopAll ramps gain to 0 in 20ms before stopping oscillators
2026-07-26 12:03:29 +07:00
3dtours
1ffdec68c6
fix: ruler click 200ms timeout + default instrument attackTime 0.03 + safe ramp
2026-07-26 11:51:50 +07:00
3dtours
523a754949
fix: remove grab handle e.stopPropagation blocking ruler clicks
2026-07-26 11:48:21 +07:00
3dtours
79999065a7
fix: ruler click moves playhead, drag moves range
2026-07-26 11:45:47 +07:00
3dtours
e18b261943
fix: ruler range drag/move, default cursor, SonicSF smooth stopAll
2026-07-26 11:42:06 +07:00
3dtours
7601cc72c9
fix: ruler click playhead update using available props onStop+onPlayPause
2026-07-26 11:36:55 +07:00
3dtours
5e096b5594
fix: remove range auto-loop + gain fade-out for reschedule crackling
2026-07-26 11:34:02 +07:00
3dtours
d3a3adca8a
fix: realtime velocity with updatedNotes + ruler restart without onStop
2026-07-26 11:28:47 +07:00
3dtours
b6b1faf083
feat: realtime velocity, ruler play click, export MIDI button
2026-07-26 11:20:19 +07:00
3dtours
bf4f2a5f11
fix: đã sửa lỗi thay đổi instrument thì bị stop
2026-07-26 11:15:09 +07:00
3dtours
90ca8f484b
fix: restore isPlaying after stopAllPlayback on instrument change
2026-07-26 11:13:50 +07:00
3dtours
9717470bb6
fix: instrument change keeps loop playback alive
2026-07-26 11:10:31 +07:00
3dtours
e57f6d96d9
fix: MIDI tab real-time instrument change - restart playback
2026-07-26 11:07:37 +07:00
3dtours
5b500ebdf3
fix: remove MIDI tab loop button + Ctrl+click clear range
2026-07-26 11:03:51 +07:00
3dtours
9438f44052
fix: CC note detection with Y-aware stem matching
2026-07-26 10:59:33 +07:00
3dtours
3901af75b2
fix: đã sửa lỗi vẽ tiếp khi thay đổi pitch
2026-07-26 10:57:01 +07:00
3dtours
27d9556a9d
fix: brush draw pitch revisit by comparing lastDrawnPitch
2026-07-26 10:55:21 +07:00
3dtours
bc0c2d3279
fix: đã sửa lỗi vẽ lên và trường độ
2026-07-26 10:53:08 +07:00
3dtours
034455598d
fix: brush draw per-note duration with noteStartBeats tracking
2026-07-26 10:50:45 +07:00
3dtours
8450bd6de4
fix: brush draw only pitch change + CC velocity skip unchanged
2026-07-26 10:48:16 +07:00
3dtours
d2993eee69
fix: brush drawing smooth - track pitch + beat delta
2026-07-26 10:44:37 +07:00
3dtours
fe379c45e2
fix: brush shape draw + remove transport + loop repeat sound
2026-07-26 10:41:31 +07:00
3dtours
3ae48f2f2f
fix: đã sửa lỗi bị mất không hiển thị midi và vẽ cclane
2026-07-26 10:37:41 +07:00
3dtours
d20fafb75e
fix: velocity flicker - grid canvas useLayoutEffect sync
2026-07-26 10:29:23 +07:00
3dtours
0b7dd82407
fix: scroll speed matches mouse + CC flicker useLayoutEffect
2026-07-26 10:26:00 +07:00
3dtours
7107a0cc14
fix: brush scroll speed + CC snap + non-selected flicker
2026-07-26 10:21:31 +07:00
3dtours
8ec4b05e21
fix: brush pitch-based scroll + CC velocity per-note paint
2026-07-26 10:14:40 +07:00
3dtours
9237d01f35
fix: auto-scroll continuous + batch CC velocity for selected notes
2026-07-26 10:09:55 +07:00
3dtours
a7417b9bfa
fix: đã sửa lỗi bị mất không hiển thị midi piano grid
2026-07-26 10:05:23 +07:00
3dtours
a765998455
feat: piano roll 4 features - SNAP, velocity selected, auto-scroll, synth button
2026-07-26 09:43:19 +07:00
3dtours
bd55d035de
fix: đã sửa lỗi MIDI loop
2026-07-26 07:16:17 +07:00
3dtours
8516961d80
fix: đã sửa lỗi chọn range tự do
2026-07-25 22:52:54 +07:00
3dtours
c917db200e
fix: ruler doc-level drag, remove onMouseMove/onMouseLeave from element, comma fix
2026-07-25 22:50:16 +07:00
3dtours
e5196e79c8
fix: use refs for selectionMarquee and notes in doc-level drag handler to avoid stale closure
2026-07-25 22:37:30 +07:00