test_that("metricalization works", {
music <-
Music() +
Meter(3, 4) +
Line(80) +
Line(90, bar = 2, as = "segment") +
Line(100, as = "voice")
notes <- music[["notes"]]
lines <- music[["lines"]]
meters <- music[["meters"]]
notes <- indicate_graces(notes, music[["graces"]])
notes <- delimit_notes(notes, lines, meters)
lines <- delimit_lines(lines, notes)
notes <- group_tuplets(notes)
notes <- indicate_tuplets(notes)
lines <- sort_lines(lines)
notes <- metricalize(notes, lines, meters)
out <- notes[, c("start_bar", "start_offset", "end_bar", "end_offset")]
row.names(out) <- NULL
expected <- data_frame(
start_bar = as.integer(c(1, 1, 2, 2, 1)),
start_offset = c(0, 1, 0, 1, 0),
end_bar = as.integer(c(1, 1, 2, 2, 1)),
end_offset = c(1, 3, 1, 3, 1)
)
expect_identical(unclass(out), unclass(expected))
})
test_that("chord metricalization works", {
music <-
Music() +
Meter(3, 4) +
Line(
list(90, 93:91, 94, 95:96),
list(1, "w", 4, 4),
bar = 2, offset = 0.5
) +
Grace(1)
notes <- music[["notes"]]
lines <- music[["lines"]]
meters <- music[["meters"]]
notes <- indicate_graces(notes, music[["graces"]])
notes <- delimit_notes(notes, lines, meters)
lines <- delimit_lines(lines, notes)
notes <- group_tuplets(notes)
notes <- indicate_tuplets(notes)
lines <- sort_lines(lines)
out <- metricalize(notes, lines, meters)
row.names(out) <- NULL
expected <- data_frame(
line = rep(1L, 18),
i = as.integer(c(
NA, NA, # Fillings before the Line
1, # Grace note
rep(2, 3), rep(2, 3), # First chord
3, 3, # Note
rep(4, 2), rep(4, 4), # Second chord
NA # Fillings after the Line
)),
j = as.integer(c(
NA, NA,
NA,
1:3, 1:3,
NA, NA,
1:2, 1:2, 1:2,
NA
)),
pitch = rep(NA_character_, 18),
midi = as.integer(c(
NA, NA,
90,
rep(93:91, 2),
rep(94, 2),
rep(95:96, 3),
NA
)),
duration = rep(NA_character_, 18),
length = c(
3, 0.5,
1,
rep(2.5, 3), rep(1.5, 3),
1.5, 2.5,
rep(0.5, 2), rep(3, 2), rep(0.5, 2),
2.5
),
grace = c(FALSE, FALSE, TRUE, rep(FALSE, 15)),
start_bar = as.integer(c(
1, 2,
NA,
rep(2, 3), rep(3, 3),
3, 4,
rep(4, 2), rep(5, 2), rep(6, 2),
6
)),
start_offset = c(
0, 0,
NA,
rep(0.5, 3), rep(0, 3),
1.5, 0,
rep(2.5, 2), rep(0, 2), rep(0, 2),
0.5
),
end_bar = as.integer(c(
1, 2,
NA,
rep(2, 3), rep(3, 3),
3, 4,
rep(4, 2), rep(5, 2), rep(6, 2),
6
)),
end_offset = c(
3, 0.5,
NA,
rep(3, 3), rep(1.5, 3),
3, 2.5,
rep(3, 2), rep(3, 2), rep(0.5, 2),
3
),
group = rep(0L, 18)
)
# In case of `data.frame()` rather than `tibble()` being used
expected[["tuplet_start"]] <- rep(list(NULL), 18)
expected[["tuplet_stop"]] <- rep(list(NULL), 18)
expect_identical(out, expected)
})
test_that("metricalization of adjacent chords works", {
music <-
Music() +
Meter(3, 4) +
Line(list(71:72, 73:74, 75:76, 77:78), rep(4, 4)) +
Grace(2)
notes <- music[["notes"]]
lines <- music[["lines"]]
meters <- music[["meters"]]
notes <- indicate_graces(notes, music[["graces"]])
notes <- delimit_notes(notes, lines, meters)
lines <- delimit_lines(lines, notes)
notes <- group_tuplets(notes)
notes <- indicate_tuplets(notes)
lines <- sort_lines(lines)
notes <- metricalize(notes, lines, meters)
out <- notes[["length"]]
expected <- c(3, 3, 1, 1, 4, 4, 2, 2, 2, 2, 1, 1, 3, 3)
expect_identical(out, expected)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.