mirror of
https://github.com/9x/sheetmusictrainer.git
synced 2026-11-03 22:03:54 +01:00
Phrase mode: count-in click fix, auto-continue sections, BPM widget, live-note staff, 13 new exercises
This commit is contained in:
12
src/App.tsx
12
src/App.tsx
@@ -5,6 +5,8 @@ import { Controls } from './components/Controls';
|
||||
import { SettingsModal } from './components/SettingsModal';
|
||||
import { OpenSourceModal } from './components/OpenSourceModal';
|
||||
import { SingleNoteTrainer, type SingleNoteHandle } from './components/SingleNoteTrainer';
|
||||
import { LiveNoteStaff } from './components/LiveNoteStaff';
|
||||
import { resolveClefTranspose } from './music/InstrumentConfigs';
|
||||
import { PhraseTrainer, type PhraseHandle } from './components/PhraseTrainer';
|
||||
import { usePitchDetector } from './hooks/usePitchDetector';
|
||||
import { useSettings } from './context/useSettings';
|
||||
@@ -326,6 +328,16 @@ function App() {
|
||||
{listening ? <Mic size={28} /> : <MicOff size={28} />}
|
||||
</button>
|
||||
|
||||
<LiveNoteStaff
|
||||
midi={displayedPitch ? displayedPitch.midi : null}
|
||||
clef={(() => {
|
||||
const { clef } = resolveClefTranspose(currentInstrumentDef, settings.difficulty);
|
||||
return clef === 'grand' ? 'treble' : clef;
|
||||
})()}
|
||||
transpose={resolveClefTranspose(currentInstrumentDef, settings.difficulty).transpose}
|
||||
keySignature={settings.keySignature}
|
||||
theme={settings.theme}
|
||||
/>
|
||||
<div className={`pitch-readout ${displayedPitch ? 'active' : ''}`}>
|
||||
{displayedPitch ? (
|
||||
<>
|
||||
|
||||
Reference in New Issue
Block a user