这个项目能做什么
Musicpy 是一个以 Python 库形式实现的音乐编程语言。其目标是让用户用建立在乐理与算法之上的简洁、可读语法来编写音乐,并且与 Python 完全兼容,因此普通 Python 代码可以与之交互。
核心能力
- 用紧凑语法表示音符、和弦、旋律、节奏与音量。
- 进行乐理运算并设计算法作曲逻辑。
- 将 musicpy 结构导出为 MIDI 文件,并把 MIDI 文件加载回 musicpy 数据结构以进一步处理。
- 在安装可选的 musicxml 依赖后读写 MusicXML 文件。
- 直接播放音乐,play 函数可通过 wait=True 阻塞直到播放结束。
- 包含 daw 模块(可选依赖),用于处理 soundfont。
数据结构
- note、chord 与 scale 是基础类。
- note 类与整数同余,可作为 int 使用。
- chord 类的行为类似一组音符,在组合和弦进行时可被视为一组整数、一个向量或一个矩阵。
- 这些类支持算术使用,作者将其与线性代数和离散数学联系起来,也与序列主义、偶然音乐和极简主义音乐等实验风格相联系。
安装与平台说明
- 需要 Python 3.7 或更新版本;使用 pip install musicpy 安装。
- 可选附加项:pip install musicpy[musicxml]、pip install musicpy[daw],或两者一起安装。
- 可在 Windows、macOS 和 Linux 上运行。
- 在 Linux 上,pygame 必须低于 2.0.3,play 函数才能正常工作,并且需要 freepats(例如在 Ubuntu 上执行 sudo apt-get install freepats)。
- 如果没有听到声音,在 play 中设置 wait=True 可能有帮助,因为某些 IDE 不会等待播放完成。
- 在 Linux 或 macOS 上,daw 模块依赖 sf2_loader,需要额外的配置步骤。
文档与工具
- 详细教程位于项目 wiki 和 Read the Docs;wiki 会随新版本一起更新。
- 提供 wiki 的 PDF 和 Markdown 副本供下载。
- 单独的 musicpy_editor 项目提供一个编辑器,支持实时编译与执行以及一些语法糖。
示例
一个简短示例展示了尼龙弦吉他在一个和弦进行上演奏分解和弦,由和弦表达式结合运算符构建,然后传给 play,并带有 bpm 和乐器编号。
背景
作者于 2019 年 10 月开始开发 musicpy,并持续频繁更新。一个所述动机是从乐理角度表示音乐是如何构建的,而不仅仅是存储音符和速度,并为作曲 AI 提供一个乐理接口,而不是仅依赖深度学习和大型数据集。README 还指出,建议熟悉基础乐理以便有效使用。
评论
0 评分人数达到10人后显示
登录后参与讨论。