Nasıl doğum günü müzik R kullanarak oynayabilir miyim?
Benim için müzik kullanarak R. R Süre olmayabilir en iyi araç bu amaç için, bu aracı olduğumu bilir ve güzel olurdu göstermek için başkalarının esnekliğini böyle bir mutlu günde.
Bunu nasıl yapabilirim?
CEVAP
Eğer bunu gerçekten yapmak istiyorsa:
library("audio")
bday_file <- tempfile()
download.file("http://www.happybirthdaymusic.info/01_happy birthday song.wav", bday_file, mode = "wb")
bday <- load.wave(bday_file)
play(bday)
3 ** ilk gerekir unutmayın. Eğer zaten belirli bir dosya varsa, bu biçimi ilk WAV dönüştürmek gerekir.
Eğer bir şey bir WAV dosyası oynarken biraz daha fazla programmery istiyorsan, burada sinüs dalgası bir dizi: melodi üreten bir versiyonu
library("dplyr")
library("audio")
notes <- c(A = 0, B = 2, C = 3, D = 5, E = 7, F = 8, G = 10)
pitch <- "D D E D G F# D D E D A G D D D5 B G F# E C5 C5 B G A G"
duration <- c(rep(c(0.75, 0.25, 1, 1, 1, 2), 2),
0.75, 0.25, 1, 1, 1, 1, 1, 0.75, 0.25, 1, 1, 1, 2)
bday <- data_frame(pitch = strsplit(pitch, " ")[[1]],
duration = duration)
bday <-
bday %>%
mutate(octave = substring(pitch, nchar(pitch)) %>%
{suppressWarnings(as.numeric(.))} %>%
ifelse(is.na(.), 4, .),
note = notes[substr(pitch, 1, 1)],
note = note grepl("#", pitch) -
grepl("b", pitch) octave * 12
12 * (note < 3),
freq = 2 ^ ((note - 60) / 12) * 440)
tempo <- 120
sample_rate <- 44100
make_sine <- function(freq, duration) {
wave <- sin(seq(0, duration / tempo * 60, 1 / sample_rate) *
freq * 2 * pi)
fade <- seq(0, 1, 50 / sample_rate)
wave * c(fade, rep(1, length(wave) - 2 * length(fade)), rev(fade))
}
bday_wave <-
mapply(make_sine, bday$freq, bday$duration) %>%
do.call("c", .)
play(bday_wave)
Nota birkaç nokta var. Varsayılan notalar için oktav A4 440 Hz (not ayarlamak için kullanılan Orkestrası) nerede 4, oktav. Oktav C3 B2 daha bir yarım ton daha yüksek, yani C ' de değişim içinde. make_sine
fade için bir neden yok sesli olmadan ve notlar başlatma ve durdurma ne zaman kalkar.
Nasıl bir yönlendirme sayfası jQuery k...
Nasıl bağımlılıkları Maven kullanarak ...
Nasıl bir yeni satır (\n) sed kullanar...
Nasıl öğe kullanarak bir jQuery KİMLİĞ...
Nasıl bir veritabanı TSQL kullanarak t...