feat: implemented playback looping; fixed an linter error in Toolbar.tsx

This commit is contained in:
Xiaohan-Tian
2026-01-23 15:34:26 -08:00
parent b767d2176f
commit 1c8361d45b
3 changed files with 22 additions and 12 deletions
+6 -2
View File
@@ -448,8 +448,6 @@ const MainContent: React.FC<MainContentProps> = ({
setActiveRegionId(null); setActiveRegionId(null);
}; };
/** /**
* Add keyboard event listener for region deletion * Add keyboard event listener for region deletion
* Handles Backspace (Windows) and Delete (Mac) keys to delete selected regions * Handles Backspace (Windows) and Delete (Mac) keys to delete selected regions
@@ -622,6 +620,12 @@ const MainContent: React.FC<MainContentProps> = ({
originalSettings.loopingRange[1] !== currentLoopingRange[1]; originalSettings.loopingRange[1] !== currentLoopingRange[1];
if (settingsChanged) { if (settingsChanged) {
// Stop playback if currently playing (get fresh state from store)
const { isPlaying: currentIsPlaying, stopPlaying: currentStopPlaying } = useProjectStore.getState();
if (currentIsPlaying) {
currentStopPlaying();
}
// Revert to original state first (since we updated in real-time) // Revert to original state first (since we updated in real-time)
core.getCurrentProject().setIsLooping(originalSettings.isLooping); core.getCurrentProject().setIsLooping(originalSettings.isLooping);
core.getCurrentProject().setLoopingRange(originalSettings.loopingRange); core.getCurrentProject().setLoopingRange(originalSettings.loopingRange);
+1 -1
View File
@@ -246,7 +246,7 @@ const Toolbar: React.FC = () => {
const midiData = convertProjectToMidi(currentProject); const midiData = convertProjectToMidi(currentProject);
// Create a downloadable blob // Create a downloadable blob
const blob = new Blob([midiData], { type: 'audio/midi' }); const blob = new Blob([midiData.buffer as ArrayBuffer], { type: 'audio/midi' });
// Create a temporary download link // Create a temporary download link
const url = URL.createObjectURL(blob); const url = URL.createObjectURL(blob);
+7 -1
View File
@@ -573,7 +573,13 @@ export const useProjectStore = create<ProjectState>((set, get) => {
}, },
toggleLoop: () => { toggleLoop: () => {
const { isLooping, loopingRange, maxBars } = get(); const { isLooping, loopingRange, maxBars, isPlaying, stopPlaying } = get();
// Stop playback if currently playing
if (isPlaying) {
stopPlaying();
}
toggleLoop(isLooping, loopingRange, maxBars); toggleLoop(isLooping, loopingRange, maxBars);
}, },