gpt4 book ai didi

r - 如何使用 R 播放生日音乐?

转载 作者:行者123 更新时间:2023-12-03 05:11:46 25 4
gpt4 key购买 nike

我想使用 R 来播放音乐。虽然 R 可能不是实现此目的的最佳工具,但它是我熟悉的工具,并且很高兴在如此欢乐的场合向其他人展示它的灵 active 。

我怎样才能做到这一点?

最佳答案

如果你真的想这样做:

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)

请注意,您需要先install.packages("audio")。如果您已有特定文件,则需要先将其转换为 WAV 格式。

如果您想要比播放 WAV 文件更具编程性的东西,这里有一个从一系列正弦波生成曲调的版本:

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)

有几点需要注意。音符的默认 Octave 为 Octave 4,其中 A4 为 440 Hz(用于为管弦乐队调音的音符)。 Octave 在 C 处转换,因此 C3 比 B2 高一个半音。 make_sine 中淡入淡出的原因是,如果没有它,在开始和停止音符时就会听到爆音。

关于r - 如何使用 R 播放生日音乐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31782580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com