+
+
+
+ {chordDetectionOptions.sensitivity}
+
+
updateChordDetectionOption('sensitivity', Number(e.target.value))}
+ autoFocus
+ />
+
+
+
+
+ {chordDetectionOptions.stability}
+
+
updateChordDetectionOption('stability', Number(e.target.value))}
+ />
+
+
+
+
+ {chordDetectionOptions.noChordThreshold}
+
+
updateChordDetectionOption('noChordThreshold', Number(e.target.value))}
+ />
+
+
+
+ )}
{!isAlert && (
@@ -206,9 +323,9 @@ const DialogProvider: React.FC<{ children: React.ReactNode }> = ({ children }) =
)}
diff --git a/src/components/common/index.ts b/src/components/common/index.ts
index e43862f..80bde9f 100644
--- a/src/components/common/index.ts
+++ b/src/components/common/index.ts
@@ -6,5 +6,5 @@ export { default as OpenProjectModal } from './OpenProjectModal';
export { default as DialogProvider } from './DialogProvider';
export { default as TrackCreateDialog } from './TrackCreateDialog';
export { default as FloatingPopup } from './FloatingPopup';
-export { showAlert, showConfirm, showPrompt, showTimeSigPrompt } from '../../util/dialogUtil';
-export type { ConfirmOptions, PromptOptions, TimeSigResult } from '../../util/dialogUtil';
+export { showAlert, showChordDetectionOptions, showConfirm, showPrompt, showTimeSigPrompt } from '../../util/dialogUtil';
+export type { ChordDetectionOptionsResult, ConfirmOptions, PromptOptions, TimeSigResult } from '../../util/dialogUtil';
diff --git a/src/components/piano-roll/PianoRoll.tsx b/src/components/piano-roll/PianoRoll.tsx
index 1f46309..c23ad9f 100644
--- a/src/components/piano-roll/PianoRoll.tsx
+++ b/src/components/piano-roll/PianoRoll.tsx
@@ -20,14 +20,16 @@ import { ReplaceChordRegionsInRangeCommand, UpdateRegionCommand } from '../../co
import { KGAudioInterface } from '../../core/audio-interface/KGAudioInterface';
import { KGAudioFileStorage } from '../../core/io/KGAudioFileStorage';
import { getSuitableChords, noteNameToPitchClass } from '../../util/scaleUtil';
-import { showAlert } from '../../util/dialogUtil';
+import { showAlert, showChordDetectionOptions } from '../../util/dialogUtil';
import {
normalizeSpectrogramHeightResolution,
type SpectrogramHeightResolution,
} from '../../util/spectrogramUtil';
import {
+ DEFAULT_AUDIO_CHORD_DETECTION_OPTIONS,
buildAudioChordWindowsForRegion,
type AudioChordDetectionRequest,
+ type AudioChordDetectionOptions,
type DetectedAudioChord,
} from '../../util/audioChordDetection';
import type { AudioChordDetectionWorkerMessage } from '../../workers/audioChordDetectionWorker';
@@ -460,6 +462,14 @@ const PianoRoll: React.FC