feat: implemented playback looping; fixed an linter error in Toolbar.tsx
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user