3个版本
使用旧的Rust 2015
0.0.8 | 2016年11月24日 |
---|---|
0.0.7 | 2016年11月14日 |
0.0.6 | 2016年8月11日 |
#446 in 音频
135KB
3K SLoC
scaleless_music
一个用于构建精确和声的音乐库,不受任何音阶限制。
🚧 目前处于非常初级的阶段,但一旦我有空闲时间,将会进行大量改进。我非常愿意全职投入这项工作,但不知道如何筹集支持生计的资金。如果您有任何想法,请与我分享。
概览
我一直对电子乐器发出的稍微不准确的音符感到烦恼。当我想要创作一些泛音长笛音乐时,我也意识到,音乐作曲软件(MIDI编辑器)局限于西方的十二平均律音阶。它们不仅缺少泛音长笛的一些和声,而且还缺少许多存在于其他类型音乐中的和声(例如阿拉伯音乐)。因此,这个项目应运而生...
该软件的目标是按照以下完美主义原则创作音乐
- 音乐应只包含音符之间的和声间隔。
- 所有和声间隔的变化都应有可能被创建。
第一条规则意味着音乐不应包含不准确的音响。
纯间隔在音乐中很重要,因为它们自然地倾向于被人类感知为“和谐”:令人愉悦或满足。相反,不符合这一标准的间隔往往被视为不愉快或造成不满或紧张。(维基百科)
第二条规则提供了使用缺少于十二平均律音阶的和声的自由。
在采用音乐音阶的情况下,实现这些条件在数学上是无法实现的。在这个新的“无音阶”概念中,音符的频率不是从固定的集合(或音阶)中选择,而是根据前一个音符与纯间隔的关系动态计算。
反例:流行的十二平均律(由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