fix: passthrough công cụ từ main sang sub

This commit is contained in:
2026-07-19 11:32:48 +07:00
parent da923a7a79
commit 66b0811f55
+26 -2
View File
@@ -1869,7 +1869,31 @@
const contextMenuCopy = () => {
const track = tracks.find(t => t.id === contextMenu.trackId);
if (!track) return;
if (!track || !track.buffer) return;
const sr = track.buffer.sampleRate;
const data = track.buffer.getChannelData(0);
// Copy selected region if selection exists
if (selLeft !== null && selRight !== null && selRight > selLeft) {
const trackStart = track.startTime || 0;
const relSelLeft = Math.max(0, selLeft - trackStart);
const relSelRight = Math.max(0, selRight - trackStart);
const startSample = Math.floor(relSelLeft * sr);
const endSample = Math.min(data.length, Math.floor(relSelRight * sr));
const len = endSample - startSample;
if (len > 0) {
const ctx = getAudioContext();
const clipBuffer = ctx.createBuffer(1, len, sr);
clipBuffer.copyToChannel(data.subarray(startSample, endSample), 0);
clipboardRef.current = { buffer: clipBuffer, name: track.name, volume: track.volume, color: track.color };
closeContextMenu();
showToast('Đã sao chép vùng chọn.', 'info');
return;
}
}
// No selection: copy entire track
clipboardRef.current = {
buffer: track.buffer,
name: track.name,
@@ -1877,7 +1901,7 @@
color: track.color,
};
closeContextMenu();
showToast('Đã sao chép track vào clipboard.', 'info');
showToast('Đã sao chép toàn bộ track.', 'info');
};
const contextMenuCut = () => {