您可以使用R来创建音乐(逐个音符),例如通过MIDI或其他格式吗?

时间:2018-10-16 14:48:13

标签: r playback

我正在尝试使用R制作音乐。我发现:

  1. 软件包 musicmakeR ,该软件包已损坏。
  2. audio ,该软件包更多用于处理/播放现有的音频文件。
  3. tuneR

我认为 tuneR 可以完成我想做的所有事情,而我发现了这篇文章(Is it possible to code music in R and play it back? (Mac OS X))。该帖子中的第一个回复(来自“ rakshith1124”)似乎回答了我的问题,但是我编写的代码有误或操作系统或.wav播放器存在问题。这是我正在使用的代码:

library(tuneR)

sr <- 8000
bits <- 16
secs <- 1
amp <- 1
t <- seq(0, secs, 1/sr)

C0 <- 16.35
G3 <- 196
A5 <- 880

C0 <- floor(2^(bits-2)*(amp*sin(2*pi*C0*t)))
G3 <- floor(2^(bits-2)*(amp*sin(2*pi*G3*t)))
A5 <- floor(2^(bits-2)*(amp*sin(2*pi*A5*t)))

u <- Wave(c(C0,G3,A5), samp.rate=sr, bit=bits)

play(u)

这应该演奏三个音符(C0,G3,A5),每个音符持续一秒钟。我从https://pages.mtu.edu/~suits/notefreqs.html获得了音符的频率。脚本[play(u)]播放的.wav文件似乎在截断第一音符或其他我不理解的东西。有谁知道发生了什么,并且与此相关,是否有更好的软件包可用于音乐创作?

谢谢!

泰勒

2 个答案:

答案 0 :(得分:5)

R 包“gm”专为创作音乐而设计。 “Hello! World”示例:

library(gm)

m <- 
  # initialize a Music object
  Music() +
  # add a 4/4 time signature
  Meter(4, 4) +
  # add a musical line of four quarter notes
  Line(list("C5", "D5", "E5", "F5"), list(1, 1, 1, 1))
  
show(m)

output musical score

您可以查看其 complete guide 以获取更多示例。它在 R Markdown 文档、Jupyter Notebooks、RStudio 中生成乐谱和音频文件。

我是该软件包的作者(我被要求披露我与建议解决方案的隶属关系)。

答案 1 :(得分:1)

很酷的问题!

该代码可以在我的机器上完美再现-包括开头的奇怪“截断”声音。为什么这样正确呢?问题是您的扬声器/声卡/播放器无法再现低至16 Hz的频率(确实低)。 C0之后的其他音符似乎还不错。

另请参阅this question on SE electronics