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

Tyl*_*ore 5 r playback

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

  1. 包musicmakeR,它坏了。

  2. 打包audio,更多地用于操作/播放现有的音频文件。

  3. 包tuneR。

我认为tuneR可以做我想做的一切,我找到了这篇文章(是否可以在 R 中编码音乐并播放它?(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)
Run Code Online (Sandbox Code Playgroud)

这应该播放三个音符(C0、G3、A5),每个音符一秒钟。我从https://pages.mtu.edu/~suits/notefreqs.html得到了笔记的频率。脚本 [play (you)] 播放的 .wav 似乎截断了第一个音符或其他我不明白的东西。有谁知道发生了什么,相关地,是否有更好的软件包可用于音乐创作?

flu*_*joo 6

R 包“gm”专为创作音乐而设计。一个“你好!世界”的例子:

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)
Run Code Online (Sandbox Code Playgroud)

输出乐谱

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

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


Rom*_*man 3

很酷的问题!

\n\n

该代码在我的机器 \xe2\x80\x94 上完美再现,包括开头奇怪的“截断”声音。为什么这是正确的?问题是您的扬声器/声卡/播放器无法再现低至 16 Hz 的频率(这确实很低)。C0之后的其他音符看起来不错。

\n\n

另请参阅有关 SE electronics 的这个问题。

\n