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
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
1a5c1eff43
fix: doc-level ruler drag, min 16bars playback, selection overlay, edge/center handles
2026-07-25 21:28:26 +07:00
3dtours
9bfcd1870c
fix: loop range playback via st.selectionStart/End + isLooping
2026-07-25 21:21:03 +07:00
3dtours
39680cb95c
fix: ruler close needed 4 parens (was 3), closing parent div properly
2026-07-25 21:14:44 +07:00
3dtours
2ce731e6a9
fix: Ctrl+S piano roll + ruler drag selection + paren balance
2026-07-25 21:09:34 +07:00
3dtours
025aba3265
fix: Ctrl+S in piano roll + ruler range selection via drag
2026-07-25 21:04:19 +07:00
3dtours
57fd110fe3
fix: add capture flag to Ctrl+S keydown handler to prevent browser save
2026-07-25 20:57:43 +07:00
3dtours
c1a3d3a6dd
feat: Ctrl+S saves current tab (piano roll, section, audio) or project + all dirty tabs
2026-07-25 20:54:23 +07:00
3dtours
f2d02a358f
fix: skip st.notes sync when draggedNote active (prevents brush flicker)
2026-07-25 20:45:24 +07:00
3dtours
ce319573ab
fix: move Ctrl+A useEffect after selectedNoteIds declaration
2026-07-25 20:39:54 +07:00
3dtours
29b682e3ba
fix: move Ctrl+A useEffect after notes declaration to avoid TDZ error
2026-07-25 20:38:53 +07:00
3dtours
f4ec769650
fix: restore useEffect sync for st.notes, remove render-phase TDZ error
2026-07-25 20:36:21 +07:00
3dtours
966e673fae
fix: replace sync useEffect with render-phase guard to prevent flicker
2026-07-25 20:31:17 +07:00
3dtours
a9f56d0fcd
fix: drag clamp, pitch anchor, Ctrl+A, marquee dir, resize snap
2026-07-25 20:30:01 +07:00
3dtours
8d83a46e08
fix: MIDI item playback respects visual duration + scale flicker guard
2026-07-25 20:14:53 +07:00
3dtours
8849f33d07
fix: extend piano roll playhead duration to 10min during recording
2026-07-25 20:03:09 +07:00
3dtours
97855f47d1
fix: add try-catch + nextMetronomeBeatRef init to startPianoRollRecording
2026-07-25 19:56:19 +07:00
3dtours
d858628a8f
fix: sync notes from st.notes + set isPlaying for playhead + metronome count-in
2026-07-25 19:53:45 +07:00
3dtours
f3ad111376
fix: set subTab buffer + fix double stop() call + realtime playhead
2026-07-25 19:48:00 +07:00
3dtours
6cc3ae6ab8
fix: use startSubTabPlayback for piano roll recording + pass recTempMidiNotes prop
2026-07-25 19:39:55 +07:00
3dtours
e6dd7ff13c
fix: realtime note display + MIDI key sound via refs
2026-07-25 18:58:30 +07:00
3dtours
da760dbb86
fix: MIDI record + key highlight on MIDI key press
2026-07-25 18:55:31 +07:00
3dtours
c3edda5c81
fix: call midiRec.start() so MIDI recorder receives messages
2026-07-25 18:44:33 +07:00
3dtours
68eb6d5261
fix: replace stale snapToScale ref with st.snapToScale
2026-07-25 18:39:47 +07:00
3dtours
513a6b082c
fix: record midi - setSelectedMidiInputId, snapToScale persist, space stops recording
2026-07-25 18:37:02 +07:00
3dtours
1151f1afa0
feat: bật tính năng ghi midi note trong piano roll tab
2026-07-25 18:36:11 +07:00
3dtours
5af8536e53
fix: add recTempMidiNotes to PianoRollTabEditor props
2026-07-25 18:31:35 +07:00
3dtours
dffb8562df
fix: piano roll recording - playhead, realtime notes, recording display
2026-07-25 18:30:16 +07:00
3dtours
9498a0d4b0
fix: piano roll record via ARM + INPUT routes to piano roll tab
2026-07-25 18:25:29 +07:00
3dtours
2c91c0156a
feat: add Omni MIDI option in piano roll INPUT select
2026-07-25 18:20:42 +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
a59a36ec90
fix: use configured AI provider for piano roll prompt, not hardcoded
...
Piano roll AI prompt now selects provider via same logic as main AI
handler (aiProviders, selectedProviderId, baseUrl, apiKey, model).
No longer hardcodes provider:'openai', model:'gpt-4o'.
2026-07-25 16:26:47 +07:00
3dtours
7dd6300500
fix: guard AI response parse against undefined textResponse
2026-07-25 16:21:59 +07:00
3dtours
5628802e08
refactor: remove piano roll AI prompt, reuse Copilot for MIDI gen
...
- Removed aiPrompt/aiLoading state and handleAIPrompt from PianoRollTabEditor
- Removed AI prompt input UI from piano roll toolbar
- handleAISend now detects active piano roll tab and routes
prompts to MIDI note generation, appends notes to the tab
2026-07-25 16:19:44 +07:00
3dtours
eaedfebdf0
fix: snap to scale now works on initial click + use refs
...
- Initial click note pitch now snaps when snapToScale is on
- Added snapToScaleRef and selectedScaleRef for stale-closure safety
- All brush-draw snap paths (mousedown + mousemove) use refs
2026-07-25 12:42:50 +07:00
3dtours
f5bc0a8810
feat: Snap to Scale toggle + remove tool buttons + no menu on erase sweep
...
- Added snapToScale state + toggle switch in piano roll toolbar
- snapPitchToScale only applies when snapToScale is true
- Removed Select/Pen/Eraser tool buttons
- Right-click drag erase sweep sets swallowContextMenuRef=true
so context menu won't appear during sweep
2026-07-25 12:39:32 +07:00
3dtours
221561d58a
fix: right-click delete no menu + scale only for brush drag
...
- Separate swallowContextMenuRef (not tied to rightClickDragRef) so
menu is skipped on right-click delete
- Initial click draw uses raw pitch, not snapPitchToScale (scale only
applies during brush-drag in mousemove)
2026-07-25 12:34:12 +07:00
3dtours
0a17cc91ea
fix: right-click delete note no longer shows context menu
...
Set rightClickDragRef.erasedNote=true on delete. handleContextMenu
checks and skips menu when true.
2026-07-25 12:30:08 +07:00
3dtours
7174773cb3
fix: separate right-click menu vs drag-erase behavior
...
Right-click on note = delete.
Right-click empty space (no drag) = context menu only (no erase sweep).
Right-click empty space + drag >5px = erase sweep (starts on mousemove).
Uses rightClickDragRef to track pending right-click state.
2026-07-25 12:28:44 +07:00
3dtours
0beb957185
fix: restore erase sweep on right-click-drag
...
Right-click on note = delete. Right-click + drag on empty space =
erase sweep. Resets on mouseup so brush works after menu closes.
2026-07-25 12:26:11 +07:00
3dtours
963a5519af
fix: click empty space always draws note regardless of tool
...
Removed tool check for drawing. Default tool back to 'select'.
Click + drag on empty piano roll = draw notes, no tool switch needed.
2026-07-25 12:24:47 +07:00