3dtours
720d80dbf9
chore: add wiki log
2026-07-27 08:53:53 +07:00
3dtours
bf0469558a
chore: add wiki log
2026-07-27 08:41:48 +07:00
3dtours
e739eb54bf
chore: add wiki log
2026-07-27 08:25:58 +07:00
3dtours
6a409b954d
chore: add wiki log
2026-07-27 08:21:26 +07:00
3dtours
5915049260
chore: add wiki log
2026-07-27 08:03:12 +07:00
3dtours
e4dadb3158
chore: add wiki log
2026-07-26 22:03:56 +07:00
3dtours
3b6f1ad05a
chore: add wiki log
2026-07-26 21:32:14 +07:00
3dtours
8155b4f2fa
chore: add wiki log
2026-07-26 21:16:55 +07:00
3dtours
1daf355dd4
chore: add loop fix log
2026-07-26 21:03:24 +07:00
3dtours
87655f4275
chore: add timeline fix log
2026-07-26 20:47:28 +07:00
3dtours
63496f27f4
chore: add final wiki log
2026-07-26 20:17:04 +07:00
3dtours
0d1ef0f895
chore: add SpessaSynth fix log to wiki
2026-07-26 18:05:54 +07:00
3dtours
3d2930dca5
chore: add SF3+SpessaSynth log to wiki
2026-07-26 17:51:48 +07:00
3dtours
bfd7146bfc
chore: add fix log to wiki
2026-07-26 17:25:46 +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
4ff2ce0b9c
chore: add drum toggle log to wiki
2026-07-26 17:11:50 +07:00
3dtours
96aa76f194
chore: add fluidsynth fix log to wiki
2026-07-26 17:08:49 +07:00
3dtours
1059f67979
chore: add bugfix log to wiki
2026-07-26 17:00:36 +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
f25a574126
build(docker): mount daw_assets host dirs into containers
...
- /home/locpham/daw_assets/vst3 -> /opt/daw_engine/vst3
- /home/locpham/daw_assets/soundfonts -> /opt/daw_engine/soundfonts
- /home/locpham/daw_assets/pianobook -> /opt/daw_engine/samples/pianobook
- Applied to web, worker, and beat services
2026-07-26 16:11:41 +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
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
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
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
49c9f019db
wiki: ruler range drag + SonicSF smooth stopAll
2026-07-26 11:42:17 +07:00
3dtours
d3c28d2fa7
wiki: fix ruler click playhead
2026-07-26 11:37:00 +07:00
3dtours
f7b499cda9
wiki: fix range auto-loop + gain fade-out
2026-07-26 11:34:08 +07:00
3dtours
724b42d506
wiki: fix realtime velocity + ruler restart
2026-07-26 11:28:54 +07:00
3dtours
7ede9bbf72
wiki: realtime velocity, ruler play, export MIDI
2026-07-26 11:20:25 +07:00
3dtours
6926c79357
wiki: instrument change loop fix
2026-07-26 11:10:41 +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
27d9556a9d
fix: brush draw pitch revisit by comparing lastDrawnPitch
2026-07-26 10:55:21 +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
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
a765998455
feat: piano roll 4 features - SNAP, velocity selected, auto-scroll, synth button
2026-07-26 09:43:19 +07:00
3dtours
5bd92ee186
fix: đã sửa lỗi chọn range trong MIDI marquee và chọn note
2026-07-25 22:34:34 +07:00
3dtours
790a5823f6
fix: đã sửa lỗi chọn range trong MIDI marquee
2026-07-25 22:18:44 +07:00
3dtours
1b711ef014
feat: piano roll transport, ARM/INPUT, AI bar range, MIDI recording
...
- Transport: play/stop/back/next/record buttons in piano roll toolbar
- ARM toggle + MIDI input device selector next to Snap to Scale
- AI bar range selector (bar X to bar Y) for Copilot MIDI generation
- handleAISend detects active piano roll tab and routes MIDI prompt
- Added selectedMidiInputId state + handleMidiInputSelect for MIDI input
2026-07-25 17:22:24 +07:00
3dtours
e0531be65b
fix: redraw canvas when section/MIDI item duration changes on resize
...
Add setCanvasRedrawCount after updateActiveTracks in resize handler
so WaveformLane re-renders with updated notes/waveform.
2026-07-25 11:33:35 +07:00
3dtours
c397545383
fix: read scrollLeft from DOM wrapper for canvas sync
...
Canvas effects now find nearest scrollable ancestor and read
scrollLeft directly, bypassing React prop latency during auto-scroll.
Applies to TempoTrackLane, WaveformLane, TimelineRuler.
2026-07-25 11:09:20 +07:00