原文搬運(yùn)?。?!鏈接:https://cran.r-project.org/web/packages/gm/vignettes/cn.html
本文要介紹 R 包 gm,你可以用它來(lái)寫音樂(lè)。
具體來(lái)說(shuō),gm 有兩大特點(diǎn):
第一,它提供了一套簡(jiǎn)單高階的語(yǔ)言,你可以用這個(gè)語(yǔ)言來(lái)描述音樂(lè),它會(huì)將你的描述轉(zhuǎn)化成樂(lè)譜和音頻。這個(gè)過(guò)程中,你不需要考慮無(wú)關(guān)的技術(shù)細(xì)節(jié)。
第二,gm 可以在 R Markdown 文檔和 R Jupyter 筆記本中使用,它會(huì)自動(dòng)將生成的音樂(lè)嵌入在生成的文本之中。
先來(lái)看一個(gè)簡(jiǎn)單的例子。
小例子
# 加載 gm
library(gm)
# 創(chuàng)建 Music 對(duì)象
m <-
# 初始化 Music 對(duì)象
Music() +
# 加上 4/4 拍號(hào)
Meter(4, 4) +
# 加上一條包含四個(gè)音的聲部
Line(list("C5", "D5", "E5", "F5"), list(1, 1, 1, 1))
# 轉(zhuǎn)化成樂(lè)譜和音頻
show(m, c("score", "audio"))

級(jí)別不夠,音頻插入不了,大家可以自己試試代碼。
相信這個(gè)例子足夠讓你感受 gm 的簡(jiǎn)單和直觀。深入之前,先來(lái)看看如何下載。
下載
從 CRAN 上下載:
install.packages("gm")
從 Github 上下載開(kāi)發(fā)版:
# 請(qǐng)先下載 devtools 如果沒(méi)有的話
# install.packages("devtools")
devtools::install_github("flujoo/gm")
你還需要下載 MuseScore,它是一款開(kāi)源免費(fèi)的打譜軟件。
設(shè)置
MuseScore 有默認(rèn)的安裝路徑,如果你安裝到其它路徑,請(qǐng)?jiān)?.Renviron 文件中設(shè)置:
第一,打開(kāi) .Renviron 文件??梢杂妹睿?/p>
usethis::edit_r_environ()
第二,在其中加入:
MUSESCORE_PATH=<MuseScore 可執(zhí)行文件的路徑>
比如:
MUSESCORE_PATH="C:/Program Files (x86)/MuseScore 3/bin/MuseScore3.exe"
第三,重啟 R 以激活更改。
深入一點(diǎn)
使用 gm 時(shí),我們通常需要初始化一個(gè) Music 對(duì)象:
m <- Music()
在這個(gè)空的 Music 對(duì)象之上,我們可以加上其它的成分,比如加上拍號(hào):
m <- m + Meter(4, 4)
加上聲部:
m <- m + Line(pitches = list("C5"), durations = list("whole"))
我們可以直接打印 m 來(lái)查看其結(jié)構(gòu):
m
#> Music
#>
#> Line 1
#>
#> * as part 1 staff 1 voice 1
#> * of length 1
#> * of pitch C5
#> * of duration 4
#>
#> Meter 4/4
當(dāng)然,更直觀的方式是將其轉(zhuǎn)化成樂(lè)譜查看:
show(m)

gm 的語(yǔ)法有點(diǎn)像 ggplot2,你可以不斷添加成分,然后查看,然后再添加,不斷反復(fù)。
我們還可以加上拍速記號(hào):
m <- m + Tempo(120)
show(m)

加上新的聲部:
m <- m + Line(
pitches = list("C3", "G3"),
durations = list("half", "half")
)
show(m)

這個(gè)過(guò)程可以繼續(xù),但我們?cè)诖舜蜃 ?/p>
算法作曲
gm 的一個(gè)有趣應(yīng)用是算法作曲,也就是用算法來(lái)生成音樂(lè)。下面是一個(gè)例子:
pitches <- as.list(c(64, 65, 69, 71, 72, 76))
durations <- rep(list(1), length(pitches))
m <- Music() + Meter(4, 4) + Tempo(120)
for (i in 0:8) {
m <- m + Line(pitches, durations, offset = 0.5 * i)
}
show(m, to = c("score", "audio"))

上面的代碼生成了九條聲部,所有聲部的音符都是相同的,區(qū)別是每條聲部加入的時(shí)間都比前一條聲部慢一點(diǎn),因此形成了有趣的回音效果。
更多內(nèi)容
你可以查看完整的文檔了解更多功能。
gm值得擁有!
年會(huì)、總結(jié)的時(shí)候,你就再也不用媽媽擔(dān)心了!
多才多藝的你可以大顯身手?。?!