原文搬運!2粤荨氧急!鏈接:https://cran.r-project.org/web/packages/gm/vignettes/cn.html
本文要介紹 R 包 gm,你可以用它來寫音樂毫深。
具體來說吩坝,gm 有兩大特點:
第一,它提供了一套簡單高階的語言哑蔫,你可以用這個語言來描述音樂钉寝,它會將你的描述轉(zhuǎn)化成樂譜和音頻。這個過程中闸迷,你不需要考慮無關(guān)的技術(shù)細節(jié)嵌纲。
第二,gm 可以在 R Markdown 文檔和 R Jupyter 筆記本中使用腥沽,它會自動將生成的音樂嵌入在生成的文本之中逮走。
先來看一個簡單的例子。
小例子
# 加載 gm
library(gm)
# 創(chuàng)建 Music 對象
m <-
# 初始化 Music 對象
Music() +
# 加上 4/4 拍號
Meter(4, 4) +
# 加上一條包含四個音的聲部
Line(list("C5", "D5", "E5", "F5"), list(1, 1, 1, 1))
# 轉(zhuǎn)化成樂譜和音頻
show(m, c("score", "audio"))
級別不夠今阳,音頻插入不了师溅,大家可以自己試試代碼。
相信這個例子足夠讓你感受 gm 的簡單和直觀盾舌。深入之前墓臭,先來看看如何下載。
下載
從 CRAN 上下載:
install.packages("gm")
從 Github 上下載開發(fā)版:
# 請先下載 devtools 如果沒有的話
# install.packages("devtools")
devtools::install_github("flujoo/gm")
你還需要下載 MuseScore妖谴,它是一款開源免費的打譜軟件窿锉。
設(shè)置
MuseScore 有默認的安裝路徑,如果你安裝到其它路徑,請在 .Renviron 文件中設(shè)置:
第一嗡载,打開 .Renviron 文件窑多。可以用命令:
usethis::edit_r_environ()
第二洼滚,在其中加入:
MUSESCORE_PATH=<MuseScore 可執(zhí)行文件的路徑>
比如:
MUSESCORE_PATH="C:/Program Files (x86)/MuseScore 3/bin/MuseScore3.exe"
第三埂息,重啟 R 以激活更改。
深入一點
使用 gm 時判沟,我們通常需要初始化一個 Music
對象:
m <- Music()
在這個空的 Music
對象之上耿芹,我們可以加上其它的成分,比如加上拍號:
m <- m + Meter(4, 4)
加上聲部:
m <- m + Line(pitches = list("C5"), durations = list("whole"))
我們可以直接打印 m
來查看其結(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)化成樂譜查看:
show(m)
gm 的語法有點像 ggplot2吧秕,你可以不斷添加成分,然后查看迹炼,然后再添加砸彬,不斷反復(fù)。
我們還可以加上拍速記號:
m <- m + Tempo(120)
show(m)
加上新的聲部:
m <- m + Line(
pitches = list("C3", "G3"),
durations = list("half", "half")
)
show(m)
這個過程可以繼續(xù)斯入,但我們在此打住砂碉。
算法作曲
gm 的一個有趣應(yīng)用是算法作曲,也就是用算法來生成音樂刻两。下面是一個例子:
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ū)別是每條聲部加入的時間都比前一條聲部慢一點磅摹,因此形成了有趣的回音效果滋迈。
更多內(nèi)容
你可以查看完整的文檔了解更多功能。
gm值得擁有户誓!
年會饼灿、總結(jié)的時候,你就再也不用媽媽擔(dān)心了帝美!
多才多藝的你可以大顯身手0怼!悼潭!