view latex/scripts/note_example.R @ 4:3e666d0329b5 tip

updated code
author Jiajie Dai <daijiajie1@gmail.com>
date Sat, 06 Jan 2018 12:20:49 +0000
parents 6531169e6866
children
line wrap: on
line source
hz2pitch <- function(f)
{
    69 + 12 * log2(f / 440)
}

tf0 <- read.table('../data/plotdata_mmnormal_f0.txt')
names(tf0) <- c('time', 'f0')

trms <- read.table('../data/plotdata_mmnormal_rms.txt')
names(trms) <- c('time', 'rms')

data <- merge(tf0, trms, by="time")

tnotes <- read.table('../data/plotdata_mmnormal_notes.txt')[,c(1,3)]
names(tnotes) <- c('time', 'duration')

minTime <- 11.45
maxTime <- 13.8

data$pitch <- hz2pitch(data$f0)

yRange <- range(data$pitch[subset = data$time >= minTime & data$time <= maxTime])
yTicks <- round(yRange[1]:yRange[2])

pdf("../figures/note_example.pdf", width = 5.5, height= 4)
par(mar=c(4,4,0.5,0.5))
plot(hz2pitch(f0) ~ time, data = data, subset = time >= minTime & time <= maxTime, 
     pch = "+", col = "dark grey", ylab="MIDI pitch", yaxt="n")
axis(2, at=yTicks, las=2)
# abline(h=yTicks, lty=2)
abline(v=tnotes$time, lty=2)
abline(v=tnotes$time+tnotes$duration, lty=2)
for (iNote in 1:nrow(tnotes))
{
    noteon <- tnotes$time[iNote]
    noteoff <- tnotes$time[iNote] + tnotes$duration[iNote]
    ind <- data$time >= noteon & data$time <= noteoff
    pitchdata <- data$pitch[ind]
    medianpitch <- median(pitchdata)
    lines(c(noteon, noteoff), medianpitch * c(1,1), lwd = 2, lty=1)
    # fit <- lm(pitchdata~data$time[ind])
    # lines(data$time[ind], fit$fitted.values, lty=2, lwd = 2)
    # points(noteon, medianpitch, pch=19)
    # points(noteoff, medianpitch, pch=19)
}
dev.off()