Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
request.onload = (e) => {
let songText = request.responseText
let song
try {
song = SongParser.load(songText)
} catch (e) {
console.log(e)
return reject(`Failed to parse: ${name}`)
}
// transpose to middle c
let root = parseNote(song[0].note)
song = song.transpose(60 - root)
resolve(song)
}
it("gets notes in time range", function() {
let song = SongNoteList.newSong([
["C5", 0, 1],
["D5", 1, 1],
["E5", 3, 1],
["D5", 5, 1],
["F5", 1, 5], // overlap (1 - 6)
["F5", 1, 3], // overlap start (1 - 4)
["F5", 4, 2], // overlap end (4 - 6)
])
let range = song.notesInRange(3,5)
matchNotes(range, [
new SongNote("E5", 3, 1),
new SongNote("F5", 1, 5),
new SongNote("F5", 1, 3),
new SongNote("F5", 4, 2),
])
})
})
it("loads notes with timing", function() {
let song = SongParser.load(`
dt
m0 c5 c5 c5
m0 g5 a5 g5
ht
m1 c6
`)
matchNotes(song, [
// first measure
new SongNote("C5", 0, 0.5),
new SongNote("C5", 0.5, 0.5),
new SongNote("C5", 1.0, 0.5),
new SongNote("G5", 0, 0.5),
new SongNote("A5", 0.5, 0.5),
new SongNote("G5", 1.0, 0.5),
// second measure
new SongNote("C6", 4, 1),
])
})
it("gets notes in F MajorScale", function() {
let scale = new MajorScale("F");
// TODO: should be Bb5
expect(scale.getRange(5)).toEqual([
"F5", "G5", "A5", "Bb5", "C6", "D6", "E6", "F6"
]);
});
it("gets enharmonic spelling of notes for key", function() {
let key = new KeySignature(-3) // b e a
let notes = new MajorScale(key.name()).getRange(4).map((n) => key.enharmonic(n))
expect(notes).toEqual([
"Eb4", "F4", "G4", "Ab4", "Bb4", "C5", "D5", "Eb5"
])
})
})
let generator
if (this.state.continuousMelody && this.currentNotes) {
// reuse the same generator so the melody is smooth
generator = this.state.currentNotes.generator
generator.notes = notes // replace notes with the new set generated
generator.notesPerColumn = this.state.notesPerColumn
} else {
generator = new RandomNotes(notes, {
smoothness: 6,
notes: this.state.notesPerColumn,
hands: 1,
})
}
// create a test melody
let list = new NoteList([], { generator })
list.fillBuffer(this.state.notesPerMelody)
if (this.state.melodyDirection == "asc") {
console.warn("sorted asc")
list.sort((rowA, rowB) => parseNote(rowA[0]) - parseNote(rowB[0]))
}
if (this.state.melodyDirection == "desc") {
console.warn("sorted desc")
list.sort((rowA, rowB) => parseNote(rowB[0]) - parseNote(rowA[0]))
}
this.props.midiOutput.playNoteList(list).then(() => {
this.setState({ playing: false })
})
it("matches with singular notes, anyOctave", function () {
const notes = new NoteList([
"D5",
"C5",
])
expect(notes.matchesHead(["D5"], true)).toBe(true)
expect(notes.matchesHead(["D6"], true)).toBe(true)
expect(notes.matchesHead(["C5"], true)).toBe(false)
// singular notes wrapped in array
const notes2 = new NoteList([
["D5"],
["C5"],
])
expect(notes2.matchesHead(["D5"], true)).toBe(true)
expect(notes2.matchesHead(["D6"], true)).toBe(true)
expect(notes2.matchesHead(["C5"], true)).toBe(false)
})
it("notesSame", function() {
expect(notesSame("C5", "C6")).toBe(true);
expect(notesSame("C5", "C5")).toBe(true);
expect(notesSame("C5", "D5")).toBe(false);
expect(notesSame("C#5", "C5")).toBe(false);
expect(notesSame("Ab5", "A3")).toBe(false);
expect(notesSame("Db5", "Db6")).toBe(true);
expect(notesSame("G#5", "G#7")).toBe(true);
// wrapping
expect(notesSame("B#5", "C6")).toBe(true);
expect(notesSame("B#5", "C7")).toBe(true);
expect(notesSame("B3", "Cb5")).toBe(true);
expect(notesSame("B5", "Cb3")).toBe(true);
});
it("notesSame", function() {
expect(notesSame("C5", "C6")).toBe(true);
expect(notesSame("C5", "C5")).toBe(true);
expect(notesSame("C5", "D5")).toBe(false);
expect(notesSame("C#5", "C5")).toBe(false);
expect(notesSame("Ab5", "A3")).toBe(false);
expect(notesSame("Db5", "Db6")).toBe(true);
expect(notesSame("G#5", "G#7")).toBe(true);
// wrapping
expect(notesSame("B#5", "C6")).toBe(true);
expect(notesSame("B#5", "C7")).toBe(true);
expect(notesSame("B3", "Cb5")).toBe(true);
expect(notesSame("B5", "Cb3")).toBe(true);
});
it("notesSame", function() {
expect(notesSame("C5", "C6")).toBe(true);
expect(notesSame("C5", "C5")).toBe(true);
expect(notesSame("C5", "D5")).toBe(false);
expect(notesSame("C#5", "C5")).toBe(false);
expect(notesSame("Ab5", "A3")).toBe(false);
expect(notesSame("Db5", "Db6")).toBe(true);
expect(notesSame("G#5", "G#7")).toBe(true);
// wrapping
expect(notesSame("B#5", "C6")).toBe(true);
expect(notesSame("B#5", "C7")).toBe(true);
expect(notesSame("B3", "Cb5")).toBe(true);
expect(notesSame("B5", "Cb3")).toBe(true);
});