#pcm #sound #state #channel #mod #piece

nightly mleml

MML工作的框架库

3个不稳定版本

0.2.1 2023年12月19日
0.2.0 2023年12月11日
0.1.0 2023年11月28日

#719 in 音频

每月下载量 27次

MIT许可证

80KB
1.5K SLoC

目录

  1. 简介
    1. 包含的内容
    2. 待办事项

简介

这是一个处理音乐宏语言(MML)的框架库。

可用于

  1. 简单的播放器/编译器
  2. 处理音频的复杂环境
  3. 提供资源的库

包含的内容

  • 数据类型
  • 主要特质(资源、模块、通道、混音器)
  • 一些内置资源。这些可以直接使用或作为示例。

待办事项

  • 资源应提供模式
  • 提供配置验证的帮助
  • 更多内置功能

lib.rs:

用于处理以MML(音乐宏语言)风格编写的音乐的库。

它力求足够灵活,可以

  1. 允许创建与特定平台非常相似的声音输出
  2. 允许任何类型的用途,从基本的MML编译器到类似DAW的环境。

概述

其他特质的基类是Resource,它提供了一个名称、一个描述和一个唯一ID。它还提供了配置,这是一个扁平的JSON数组,以及状态,这是一个字节切片。

每个资源至少有一个函数,除了其他输入和输出外,还接受配置和状态,并返回新的状态。这允许函数是纯的。

这些资源被定义为

  • 模块:本质上是一个函数,它接受一些数据并产生新的数据。
  • 通道:接受一些数据,并期望将其通过多个模块传递,尊重它们的配置和状态。
  • 混音器:接受声音(或声音片段)并将它们组合成一个新的声音,返回该声音以及未使用的声音片段。

Vec<Rc>扩展了Pipeline特质,增加了帮助构建有效的模块序列和检查数据类型如何以及何时更改的函数。

逻辑示例

假设程序正在接收某种指令流,其中一些可能表示需要播放一个或多个通道,程序只需生成结果音乐。

程序将创建必要的通道数量,这些通道可以从音符和混音器产生声音。然后,它将对通道的状态应用状态变化(例如,八度转换),当指令要求播放音符时,就在所需的通道上播放,然后将新创建的声音以及之前未使用的声音片段传递给混音器。混合后的声音附加到生成的音乐上,剩余的部分在下一次调用中重新使用。在通道或混音器的所有调用中,它们的输出状态都会被重新使用,就像混音器的剩余声音一样。

依赖项

~1.2–2MB
~44K SLoC