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 |
|
#73 in 音频
928每月下载量
325KB
6.5K SLoC
pointillism
音乐作曲的库。
示例
如果您想看到点彩主义的实际应用和它的能力,请在examples
文件夹中运行示例。源代码中也有许多简单的示例,展示了不同的功能。
起始示例,请参阅create
文档。
注意:一些示例可能很响亮、不和谐,甚至令人震惊。请在听之前三思。
设计
点彩主义输出音频的默认方式是将样本逐个写入32位浮点.wav
文件。内部计算使用64位浮点数。
为了方便,提供了Signal
特质。实现此特质的类型会逐帧生成样本数据。如果类型还实现了SignalMut
,则可以将其推进或重新触发。
可以使用例如eff::MapSgn
和eff::MutSgn
结构体来组合信号,以创建更复杂的信号。此外,您可以为您自己的结构体实现Signal
和SignalMut
特质,从而获得对生成的样本的广泛控制。
命名方案
pointillism
代码有很多部分,还有很多同名类型。因此,我们依赖于prelude
来整齐地分类事物。
每个类型都有一个三字母命名空间,有助于对其进行分类。主要命名空间如下
命名空间 | 全名 | 内容 |
---|---|---|
[buf ] |
缓冲区 |
音频缓冲区和相关特质。 |
[crv ] |
曲线 |
基本振荡器形状,以及构建更复杂形状的方法(未来)。 |
[ctr ] |
控制 |
控制结构,允许事件在指定的时间间隔发生。 |
[eff ] |
效果 |
对于效果,意味着改变其他信号的类型。 |
[map ] |
映射 |
基本映射和相关特质。 |
[gen ] |
生成器 |
生成信号的类型“自行”。这包括基本的振荡器,如 gen::Loop 和 gen::Once 。 |
[sgn ] |
信号 |
信号上的特质,包括基本的 Signal 和 SignalMut 。 |
[smp ] |
smp |
样本类型的基类型和特质,包括 smp::Mono 和 smp::Stereo 。 |
[rtn ] |
路由 |
混合或组合不同信号的结构的路由。 |
[unt ] |
单位 |
音乐测量的不同单位及其相关的算术模板。 |
注意,当导入预定义时,特质总是被导入。这简化了一些复杂的 impl
声明,并使特质方法始终可用。
这些命名空间中的一些还包含进一步的嵌套命名空间,几乎总是三个字母。请参阅文档以获取完整的分解。
编译时
您可以将点彩画视为一个编译时模块化合成器,其中每个新的结构都是其自身的模块。
这种设计的优点是可扩展性和通用性。通过组合一些函数,相对容易地创建一个具有许多层的可高度自定义和复杂的信号。
缺点是这些合成器的类型签名变得难以控制。更重要的是,实时构建合成器非常困难。
功能
项目使用以下功能
功能 | 启用 |
---|---|
hound * |
将歌曲保存为WAV文件。 |
cpal |
在专用线程中播放歌曲。 |
midly |
读取和播放MIDI文件。 |
human-duration * |
unt::RawTime 类型的美化打印。 |
* 带有星号标记的功能是默认启用的。
目标
点彩画的未来目标是
- (更好的) 算法式混响
- 限制器、压缩器、旁路链
- 我 将用此制作整张专辑 :D
免责声明
这是一个由一名学习数字信号处理的大学学生制作的热衷项目。我对它的设计、维护或用于您自己的目标不做出任何保证。
如果您只想用代码制作音乐,尤其是如果您喜欢实时反馈,那么 SuperCollider 和 Pure Data 可能是更好的替代品。
话虽如此,如果您偶然发现这个项目并制作出一些酷的东西,请告诉我!
许可证:MIT OR Apache-2.0
依赖关系
~0.7–32MB
~437K SLoC