feat: added metronome feature
This commit is contained in:
@@ -59,6 +59,7 @@ interface ProjectState {
|
||||
keySignature: KeySignature;
|
||||
selectedMode: string;
|
||||
isLooping: boolean;
|
||||
isMetronomeEnabled: boolean;
|
||||
loopingRange: [number, number]; // [startBar, endBar] - bar indices (0-based)
|
||||
playheadPosition: number; // in beats
|
||||
isPlaying: boolean;
|
||||
@@ -119,6 +120,7 @@ interface ProjectState {
|
||||
startPlaying: () => Promise<void>;
|
||||
stopPlaying: () => Promise<void>;
|
||||
toggleLoop: () => void;
|
||||
toggleMetronome: () => void;
|
||||
setBpm: (bpm: number) => void;
|
||||
setMaxBars: (maxBars: number) => void;
|
||||
setBarWidthMultiplier: (multiplier: number) => void;
|
||||
@@ -269,6 +271,7 @@ export const useProjectStore = create<ProjectState>((set, get) => {
|
||||
keySignature: currentProject.getKeySignature(),
|
||||
selectedMode: currentProject.getSelectedMode(),
|
||||
isLooping: currentProject.getIsLooping(),
|
||||
isMetronomeEnabled: false,
|
||||
loopingRange: currentProject.getLoopingRange(),
|
||||
playheadPosition: KGCore.instance().getPlayheadPosition(),
|
||||
isPlaying: KGCore.instance().getIsPlaying(),
|
||||
@@ -780,6 +783,24 @@ export const useProjectStore = create<ProjectState>((set, get) => {
|
||||
toggleLoop(isLooping, loopingRange, maxBars);
|
||||
},
|
||||
|
||||
toggleMetronome: () => {
|
||||
const { isMetronomeEnabled, isPlaying, timeSignature } = get();
|
||||
const newValue = !isMetronomeEnabled;
|
||||
set({ isMetronomeEnabled: newValue });
|
||||
|
||||
const audio = KGAudioInterface.instance();
|
||||
audio.setMetronomeEnabled(newValue);
|
||||
|
||||
if (isPlaying) {
|
||||
if (newValue) {
|
||||
const currentBeat = KGCore.instance().getPlayheadPosition();
|
||||
audio.startMetronomeDuringPlayback(currentBeat, timeSignature.numerator);
|
||||
} else {
|
||||
audio.stopMetronomeDuringPlayback();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
setBpm: (bpm: number) => {
|
||||
try {
|
||||
// Create and execute the change project property command
|
||||
|
||||
Reference in New Issue
Block a user