2021-04-23用 R 寫音樂(lè),有趣的gm包!

原文搬運(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"))
file5351be49e1f.png

級(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)
image.png

gm 的語(yǔ)法有點(diǎn)像 ggplot2,你可以不斷添加成分,然后查看,然后再添加,不斷反復(fù)。

我們還可以加上拍速記號(hào):

m <- m + Tempo(120)
show(m)
image.png

加上新的聲部:

m <- m + Line(
  pitches = list("C3", "G3"),
  durations = list("half", "half")
)

show(m)
image.png

這個(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"))
image.png

上面的代碼生成了九條聲部,所有聲部的音符都是相同的,區(qū)別是每條聲部加入的時(shí)間都比前一條聲部慢一點(diǎn),因此形成了有趣的回音效果。

更多內(nèi)容

你可以查看完整的文檔了解更多功能。

gm值得擁有!
年會(huì)、總結(jié)的時(shí)候,你就再也不用媽媽擔(dān)心了!
多才多藝的你可以大顯身手?。?!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容