这个项目能做什么

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 还指出,建议熟悉基础乐理以便有效使用。