mlua-pulse 0.1.0

Lua-friendly music composition and audio export bindings built on tunes and mlua
Documentation
# 项目范围


## 你会学到什么


- 理解 `mlua-pulse` 为什么把“离线音频导出”放在第一位。
- 分清音乐理论、编曲 DSL、合成、效果、采样、MIDI、PCM 和播放的边界。
- 知道哪些能力属于当前项目,哪些能力不应该塞进这个 crate。
- 遇到采样、空间音频、播放、GPU 这类需求时,能判断它们是否服务于导出。

## 适合谁读


如果你要评估这个 crate 能不能放进自己的工具链,或者准备继续给项目加功能,先读本章。它也适合被用户问题打断时回头确认方向:`mlua-pulse` 不是一个实时宿主,它是一个让 Lua 描述音乐并导出文件的离线创作层。

## 前置知识


- [Wiki 总目录]../README.md
- [心智模型]mental-model.md

## 心智模型


`mlua-pulse` 的核心句子是:用 Lua 写音乐结构,用 Rust 注册和验证 API,用 `tunes` 生成声音,最后导出成稳定文件。项目的所有设计都应该服务这条链路。

```text
Lua 编曲脚本 -> pulse 模块 -> Song/Phrase/Sequence -> tunes 渲染 -> WAV/FLAC/MIDI/PCM
```

因此,音乐理论层不是为了做一套完整乐理百科,而是为了让用户能快速把 `"C4"`、`"ionian"`、`"maj7"` 变成可渲染的频率材料。合成层不是为了替代专业软音源,而是为了让示例和脚本在没有外部插件时也能导出可听的音色。采样和 MIDI 的意义也不是资产管理,而是让已有素材能放进同一条时间线。

播放 API 只是一条预览支路。它可以帮助用户本机试听,但不能成为项目的稳定性核心,因为播放依赖声卡、系统音频后端和运行环境。导出不依赖声卡,适合测试、批处理和自动化。

## 最小可运行例子


```lua
local pulse = require("pulse")

local song = pulse.song()
  :tempo(100)
  :add(
    pulse.sequence()
      :notes({pulse.note("C4"), pulse.note("E4"), pulse.note("G4")})
      :durations({0.25, 0.25, 0.5})
      :instrument("electric_piano")
      :volume(0.5)
  )

song:export_wav("output/scope-check.wav", {
  normalize = "rms",
  target_db = -18.0,
  true_peak_db = -1.0,
})
```

这个例子覆盖了项目范围内最重要的闭环:Lua API、乐理转换、编曲容器、音色选择、离线渲染和导出文件。

## 参数和边界


项目范围内的能力包括:音名、音阶、希腊调式、和弦、移调、MIDI 音符互转;`Sequence`、`Phrase`、`Song`、`DrumGrid`、`DrumMachine`;150+ 乐器、100+ 鼓声;FM、加法、波表、Karplus-Strong、颗粒合成;延迟、混响、滤波、压缩、限制、合唱、相位、EQ;50+ 生成器;采样片段;MIDI 导入导出;WAV/FLAC 导出;响度标准化;`pulse.PcmChunk` userdata 流;本机播放预览。

项目范围外的能力包括:实时插件宿主、DAW 传输同步、复杂声卡路由、完整采样库索引、在线素材市场、与导出无关的 3D 空间音频。空间音频只有在能明确改善离线导出作品时才值得重新讨论。

## 常见陷阱


最常见的偏离是把播放当成核心。播放失败不代表导出失败;CI、服务器和无声卡环境通常应该只运行导出测试。

第二个偏离是把 MIDI 当成音频。MIDI 导出不会保存采样、混响、压缩、母带响度标准化;它只保存 MIDI 文件能表达的符号事件。

第三个偏离是把响度标准化当成“自动好听”。标准化只调整最终电平,不能修复已经削波、刺耳或频段拥挤的混音。

## 进阶用法


设计新 API 时可以用一个问题筛选:它是否让 Lua 作曲更清楚,或让导出结果更可靠?如果答案是否定的,应放在宿主程序、外部工具或后续 crate 中。

对于采样系统,最有价值的是裁剪、循环、淡入淡出、音高/时间调整和稳定导出。对于 GPU,最有价值的是在长曲、密集合成或批量导出时作为可选加速请求,而不是改变音乐语义。

## 相关章节


- [心智模型]mental-model.md
- [WAV、FLAC、MIDI]../04-export/wav-flac-midi.md
- [性能]../04-export/performance.md
- [Cargo 特性]../05-rust-integration/features.md