feat: Studio op.84 n.10 di Dancla tra gli esercizi
177 note (Sol3-Re6, Sol maggiore, 4/4) estratte dal MusicXML con il parser dell'app; livello 4, con test di presenza e sanità. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
da0d67864f
commit
d0d94c30fa
3 files changed
+217
-1
No files matched your search
@@ -1 +0,0 @@
|
||||
{"sessionId":"db412f81-3e15-4e3f-9010-4a026dced776","pid":79175,"procStart":"Tue Jul 21 20:39:41 2026","acquiredAt":1784666538953}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.notemusicali.exercises
|
||||
|
||||
import com.notemusicali.music.MusicalNote
|
||||
import com.notemusicali.music.NoteDuration
|
||||
import com.notemusicali.music.NoteSequence
|
||||
|
||||
data class Exercise(
|
||||
@@ -125,5 +126,195 @@ object ExerciseRepository {
|
||||
),
|
||||
),
|
||||
),
|
||||
Exercise(
|
||||
id = 6,
|
||||
title = "Studio op.84 n.10 — Dancla",
|
||||
description = "Studio per violino in Sol maggiore",
|
||||
level = 4,
|
||||
sequence = NoteSequence(
|
||||
name = "Studio op.84 n.10 — Dancla",
|
||||
notes = listOf(
|
||||
MusicalNote.fromMidi(55, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(59, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(62, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(67, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(71, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(59, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(62, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(67, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(71, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(72, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(69, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(76, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(67, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(71, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(79, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(83, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(55, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(59, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(62, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(67, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(71, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(59, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(62, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(67, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(71, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(72, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(69, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(76, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(67, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(71, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(79, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(69, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(66, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(69, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(78, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(81, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(81, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(79, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(76, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(73, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(69, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(64, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(69, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(73, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(76, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(81, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(81, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(78, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(69, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(66, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(67, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(71, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(76, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(79, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(83, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(66, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(69, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(78, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(81, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(81, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(79, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(76, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(73, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(69, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(69, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(66, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(69, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(62, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(62, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(66, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(69, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(62, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(62, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(67, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(70, NoteDuration.EIGHTH, preferFlat = true),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(62, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(67, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(70, NoteDuration.EIGHTH, preferFlat = true),
|
||||
MusicalNote.fromMidi(70, NoteDuration.EIGHTH, preferFlat = true),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(79, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(79, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(78, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(78, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(81, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(81, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(86, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(69, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(66, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(69, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(62, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(70, NoteDuration.EIGHTH, preferFlat = true),
|
||||
MusicalNote.fromMidi(67, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(70, NoteDuration.EIGHTH, preferFlat = true),
|
||||
MusicalNote.fromMidi(62, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(55, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(58, NoteDuration.EIGHTH, preferFlat = true),
|
||||
MusicalNote.fromMidi(58, NoteDuration.EIGHTH, preferFlat = true),
|
||||
MusicalNote.fromMidi(62, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(62, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(67, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(67, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(66, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(66, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(62, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(62, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(62, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(62, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(71, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(79, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(83, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(86, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(86, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(84, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(81, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(78, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(69, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(78, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(81, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(86, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(83, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(79, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(71, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(67, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(60, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(64, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(69, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(72, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(76, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(59, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(62, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(67, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(71, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(57, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(62, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(66, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(69, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(74, NoteDuration.HALF),
|
||||
MusicalNote.fromMidi(67, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(62, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(59, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(62, NoteDuration.EIGHTH),
|
||||
MusicalNote.fromMidi(55, NoteDuration.QUARTER),
|
||||
),
|
||||
beats = 4,
|
||||
beatType = 4,
|
||||
),
|
||||
),
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.notemusicali.exercises
|
||||
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertNotNull
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class ExerciseRepositoryTest {
|
||||
|
||||
@Test
|
||||
fun `dancla study op84 n10 is available as exercise`() {
|
||||
val exercise = ExerciseRepository.all.firstOrNull { it.title.contains("Dancla") }
|
||||
assertNotNull(exercise, "lo studio di Dancla deve essere tra gli esercizi")
|
||||
assertTrue(exercise.sequence.notes.size > 100, "atteso lo studio completo, trovate ${exercise.sequence.notes.size} note")
|
||||
assertEquals(4, exercise.sequence.beats)
|
||||
assertEquals(4, exercise.sequence.beatType)
|
||||
// Studio per violino: tutte le note dentro l'estensione del violino (G3..E7)
|
||||
assertTrue(exercise.sequence.notes.all { it.midiNumber in 55..100 })
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `exercise ids are unique`() {
|
||||
val ids = ExerciseRepository.all.map { it.id }
|
||||
assertEquals(ids.size, ids.toSet().size)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user