Mercurial > hg > pitch-accuracy-and-interaction-in-unaccompanied-duet-singing
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()