19个版本

0.4.3 2024年3月15日
0.4.2 2024年3月15日
0.3.6 2023年9月6日
0.3.1 2023年5月8日
0.1.7 2023年3月15日

#73 in 音频

Download history

928每月下载量

MIT/Apache

325KB
6.5K SLoC

pointillism

音乐作曲的库。

示例

如果您想看到点彩主义的实际应用和它的能力,请在examples文件夹中运行示例。源代码中也有许多简单的示例,展示了不同的功能。

起始示例,请参阅create文档。

注意:一些示例可能很响亮、不和谐,甚至令人震惊。请在听之前三思。

设计

点彩主义输出音频的默认方式是将样本逐个写入32位浮点.wav文件。内部计算使用64位浮点数。

为了方便,提供了Signal特质。实现此特质的类型会逐帧生成样本数据。如果类型还实现了SignalMut,则可以将其推进或重新触发。

可以使用例如eff::MapSgneff::MutSgn结构体来组合信号,以创建更复杂的信号。此外,您可以为您自己的结构体实现SignalSignalMut特质,从而获得对生成的样本的广泛控制。

命名方案

pointillism代码有很多部分,还有很多同名类型。因此,我们依赖于prelude来整齐地分类事物。

每个类型都有一个三字母命名空间,有助于对其进行分类。主要命名空间如下

命名空间 全名 内容
[buf] 缓冲区 音频缓冲区和相关特质。
[crv] 曲线 基本振荡器形状,以及构建更复杂形状的方法(未来)。
[ctr] 控制 控制结构,允许事件在指定的时间间隔发生。
[eff] 效果 对于效果,意味着改变其他信号的类型。
[map] 映射 基本映射和相关特质。
[gen] 生成器 生成信号的类型“自行”。这包括基本的振荡器,如 gen::Loopgen::Once
[sgn] 信号 信号上的特质,包括基本的 SignalSignalMut
[smp] smp 样本类型的基类型和特质,包括 smp::Monosmp::Stereo
[rtn] 路由 混合或组合不同信号的结构的路由。
[unt] 单位 音乐测量的不同单位及其相关的算术模板。

注意,当导入预定义时,特质总是被导入。这简化了一些复杂的 impl 声明,并使特质方法始终可用。

这些命名空间中的一些还包含进一步的嵌套命名空间,几乎总是三个字母。请参阅文档以获取完整的分解。

编译时

您可以将点彩画视为一个编译时模块化合成器,其中每个新的结构都是其自身的模块。

这种设计的优点是可扩展性和通用性。通过组合一些函数,相对容易地创建一个具有许多层的可高度自定义和复杂的信号。

缺点是这些合成器的类型签名变得难以控制。更重要的是,实时构建合成器非常困难。

功能

项目使用以下功能

功能 启用
hound* 将歌曲保存为WAV文件。
cpal 在专用线程中播放歌曲。
midly 读取和播放MIDI文件。
human-duration* unt::RawTime 类型的美化打印。

* 带有星号标记的功能是默认启用的。

目标

点彩画的未来目标是

  • (更好的) 算法式混响
  • 限制器、压缩器、旁路链
  • 将用此制作整张专辑 :D

免责声明

这是一个由一名学习数字信号处理的大学学生制作的热衷项目。我对它的设计、维护或用于您自己的目标不做出任何保证。

如果您只想用代码制作音乐,尤其是如果您喜欢实时反馈,那么 SuperColliderPure Data 可能是更好的替代品。

话虽如此,如果您偶然发现这个项目并制作出一些酷的东西,请告诉我!

许可证:MIT OR Apache-2.0

依赖关系

~0.7–32MB
~437K SLoC