#pure-data #audio-processing #signal-processing #music #programming-language

no-std purezen

纯数据(Pd)音频编程语言的运行时,实现为一个可扩展的音频库,允许完全控制信号处理、消息传递和图操作。纯数据是一个基于图的编程语言环境,用于创建交互式音乐和多媒体作品。

3个版本

0.0.2 2019年2月20日
0.0.1 2019年2月19日
0.0.0 2019年2月10日

#493 in 音频


neobirth中使用

LGPL-3.0

630KB
9K SLoC

C++ 6.5K SLoC // 0.3% comments Rust 2.5K SLoC // 0.3% comments

PureZen

Crate Docs Build Status LGPL 3.0 licensed Gitter Chat

纯数据(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