3个版本
0.0.2 | 2019年2月20日 |
---|---|
0.0.1 | 2019年2月19日 |
0.0.0 | 2019年2月10日 |
#493 in 音频
在neobirth中使用
630KB
9K SLoC
纯数据(Pd)音频编程语言的运行时,实现为一个可扩展的音频库,允许完全控制信号处理、消息传递和图操作。
使用Rust编写,旨在针对嵌入式(即no_std
)平台。由C++编写的ZenGarden改编而来。
状态
正在将ZenGarden从C++翻译过来,Rust crate的基本结构已经就位。但是,重要的核心领域对象尚未翻译(包括与DSP相关的所有内容),因此尚未准备好使用。
概念
以下四种类型提供了访问纯Zen的主接口
pd::Context
(进行中):拥有所有纯Zen引擎内存的核心类型pd::Graph
(进行中):message::Object
图(和子图)- pd::Message:用于发送命令和触发声音的控制消息
- message::Object:在
pd::Graph
中发送/接收消息的对象
前三种与信号图的组织方式有关。后者表示发送到、由图处理和从图中发出的离散消息。
pd::Context
表示纯数据的一个唯一且独立的实例。可以将其视为纯数据的控制台窗口。上下文由其块大小、采样率和输入输出通道数定义。上下文是完全独立的,消息和对象之间不能交换。
图是由对象及其之间的连接组成的集合。一个 pd::Graph
是一个 message::Object
对象,因此一个 pd::Graph
可以包含其他 pd::Graph
对象(即子图)。
pd::Message
代表任何 Pd 消息,无论是 bang 消息还是由各种浮点数、符号或 bang 组成的列表。每个 pd::Message
都有时间戳,并且至少包含一个元素,可能还包含任何数量和任何组合的原语。
PureZen 消息始终是类型化基本类型的列表。
图附件
注意:这个功能可能不会很快得到支持,但我们确实想保留它!
每当 Pd 中的信号图发生任何变化时,音频线程必须等待重新配置完成。对于像删除连接这样的小变化,这可能非常快,可以避免音频缓冲区欠载。
对于较大的变化,例如添加需要大量初始化的对象,或者添加复杂抽象的大量更改,音频欠载几乎是肯定的。
PureZen 通过允许在另一个线程上创建新的对象或图,并在方便的时候将其附加到上下文来解决此问题。由于图已经实例化,附加过程相对较快,因此可以在不引起任何音频中断的情况下完成。
图附件通常涉及注册全局发送者和接收者,并确保现有对象知道新对象。同样,可以从上下文中分离出图,使其留在内存中但处于休眠状态。
行为准则
我们遵守 贡献者守则,并要求您也这样做。
有关更多信息,请参阅 CODE_OF_CONDUCT.md。
许可证
版权 © 2009-2019 NeoBirth 开发者,Reality Jockey,Ltd.
PureZen 根据 LGPL 3.0 许可,这意味着
- 您必须表明您正在使用 PureZen 库(ZenGarden 的分支)。
- 如果您扩展了库(不包括外部库),则必须使该代码公开。
- 您可以将此库用于任何应用程序,包括商业应用程序。
依赖项
~2.5MB
~55K SLoC