R, 83/72 bytes
Alt approach using regexps
If we're allowed a trailing newline, 72 bytes:
function(s,n)cat(gsub("([^
]*
)",r,gsub("([^
])",r<-strrep("\\1",n),s)))
Otherwise, 83 bytes:
function(s,n)write(rep(el(strsplit(gsub("([^\n])",strrep("\\1",n),s),"\n")),e=n),1)