#music #sound #scaleless

scaleless_music

一个用于构建精确和声的音乐库,不受任何音阶限制

3个版本

使用旧的Rust 2015

0.0.8 2016年11月24日
0.0.7 2016年11月14日
0.0.6 2016年8月11日

#446 in 音频

WTFPL 许可证

135KB
3K SLoC

scaleless_music

一个用于构建精确和声的音乐库,不受任何音阶限制。

Crates.io Linux & OS X build status Windows build status Dependency Status Crates.io Join the chat at https://gitter.im/tiborgats/scaleless_music

🚧 目前处于非常初级的阶段,但一旦我有空闲时间,将会进行大量改进。我非常愿意全职投入这项工作,但不知道如何筹集支持生计的资金。如果您有任何想法,请与我分享。

概览

我一直对电子乐器发出的稍微不准确的音符感到烦恼。当我想要创作一些泛音长笛音乐时,我也意识到,音乐作曲软件(MIDI编辑器)局限于西方的十二平均律音阶。它们不仅缺少泛音长笛的一些和声,而且还缺少许多存在于其他类型音乐中的和声(例如阿拉伯音乐)。因此,这个项目应运而生...

该软件的目标是按照以下完美主义原则创作音乐

  1. 音乐应只包含音符之间的和声间隔。
  2. 所有和声间隔的变化都应有可能被创建。

第一条规则意味着音乐不应包含不准确的音响。

纯间隔在音乐中很重要,因为它们自然地倾向于被人类感知为“和谐”:令人愉悦或满足。相反,不符合这一标准的间隔往往被视为不愉快或造成不满或紧张。(维基百科

第二条规则提供了使用缺少于十二平均律音阶的和声的自由。

在采用音乐音阶的情况下,实现这些条件在数学上是无法实现的。在这个新的“无音阶”概念中,音符的频率不是从固定的集合(或音阶)中选择,而是根据前一个音符与纯间隔的关系动态计算。

反例:流行的十二平均律(由MIDI使用)只包含一种纯和声间隔:八度,其中所有其他频率间隔在该系统中都是稍微不和谐的(12√2的乘积)。它也局限于一系列小间隔。要深入了解十二平均律和音乐音阶一般问题,您可以阅读有关纯律方法的信息。

声音合成

scaleless_music 使用 加性合成,并增加一条规则

  • 频率可以随时间变化,但间隔必须保持和谐。

注意:这种合成方式非常资源密集。因此,为了实时声音生成,建议使用较小的采样率(例如48kHz)和较少的泛音(以防止缓冲区欠载)。算法速度优化后,这可能会有所变化。

以后我想补充 基于样本的合成。但必须谨慎使用,因为可能存在以下问题

  • 它可能包含噪音和不和谐的间隔。
  • 它可能包含回声,录音空间的效应(这会干扰我们想要添加的空间)。

从现在开始,我计划创建一个分析录音样本的工具,找到最接近的数学表示,并构建具有类似输出的和谐声音结构。这样我们可以消除噪音,并可以选择使用精确的3D空间效果。

安装

scaleless_music 可以使用不同的声音输出后端构建

  • 无后端:cargo build
  • 使用 PortAudio:cargo build --features "be-portaudio"。如果由于某些原因 rust-portaudio 的构建失败,您可以查看它的 README 以获取进一步说明。
  • 使用 SDL2:cargo build --features "be-sdl2"
  • 使用 rsoundio (libsoundio):cargo build --features "be-rsoundio" - 尚未提供

示例

文档

待办事项

  • 线程安全
  • 基本效果,音乐结构的基本模块
    • 音符
    • 振幅函数
    • 频率函数
      • 颤音
      • 线性变化的音高(上升或下降)
    • 音符序列,节奏函数
    • 和声(混音器)
    • 正弦波平滑开始和结束,这是物理上可能的(避免在振幅上出现零时间跳跃,以避免扬声器振膜的无限加速)
  • 播放程序的速度优化
    • 基准程序
    • 并行处理,SIMD
  • 声音输出后端
  • 操作系统支持
    • Linux
    • Windows
    • OS X
    • Android
    • iOS
  • 测试覆盖率
  • 更多示例

未来工作

  • 文件格式,解析器
  • 从调性音阶(例如midi文件)格式转换为scaleless音乐结构
  • 一个寻找声音样本(来自真实乐器的)最接近的数学表示的软件
  • 编辑器,具有正确、用户友好的音乐结构可视化表示(不是乐谱)
  • 处理一些低延迟输入设备
    • MIDI键盘
  • 3D音频空间,乐器位置效果,回声
  • 很多其他东西

依赖

~0.2–3MB
~61K SLoC