Working version with note names

This commit is contained in:
Aria 2025-08-22 11:25:13 -05:00
parent 938c92fda2
commit b08890bd9e
3 changed files with 75 additions and 46 deletions

View file

@ -70,10 +70,7 @@ describe('tonal', () => {
});
it('snaps notes (upwards) to scale', () => {
const inputNotes = ['Cb', 'Eb', 'G', 'A#', 'Bb'];
let expectedNotes = ['B2', 'E3', 'G3', 'B3', 'B3'];
// Notes are converted to midi by scale
expectedNotes = expectedNotes.map((note) => noteToMidi(note));
const expectedNotes = ['B2', 'E3', 'G3', 'B3', 'B3'];
expect(
note(seq(inputNotes))
@ -81,6 +78,26 @@ describe('tonal', () => {
.firstCycleValues.map((h) => h.note),
).toEqual(expectedNotes);
});
it('snaps notes to the correct octave', () => {
const inputNotes = ['Cb0', 'Eb4', 'G1', 'A#19', 'Bb8'];
const expectedNotes = ['B#0', 'D#4', 'G#1', 'A#19', 'A#8'];
expect(
note(seq(inputNotes))
.scale('A# minor') // A#, B#, C#, D#, E#, F#, G#
.firstCycleValues.map((h) => h.note),
).toEqual(expectedNotes);
});
it('handles scale names provided with colons', () => {
const inputNotes = ['Cb', 'E', 'G', 'A#', 'Bb'];
const expectedNotes = ['A#2', 'D#3', 'G#3', 'A#3', 'A#3'];
expect(
note(seq(inputNotes))
.scale('F#:pentatonic') // F#, G#, A#, C#, and D#
.firstCycleValues.map((h) => h.note),
).toEqual(expectedNotes);
});
});
describe('transpose', () => {
it('transposes note numbers with interval numbers', () => {