#composition #cli-interface #generate #generator #flexible #ringing #monument

bin+lib monument_cli

Monument 的 CLI 接口,一个快速灵活的作曲生成器

24 个版本 (13 个重大更新)

0.14.5 2024 年 2 月 24 日
0.14.4 2023 年 10 月 20 日
0.14.2 2023 年 9 月 9 日
0.13.4 2023 年 1 月 4 日
0.7.0 2022 年 3 月 28 日

#11#composition

Download history 1/week @ 2024-03-10 157/week @ 2024-03-31

每月 398 次下载

MIT 许可证

655KB
12K SLoC

Monument

一个快速、灵活且人性化的作曲生成器。

Monument 可以被视为计算机作曲家:你给它提供你想要的作曲的描述,它会根据你对“好”的定义生成最佳作曲。

Monument 目前处于 alpha 阶段(见已知问题)。

Monument 指南可以在这里找到。

目标

Monument 的最终目标是 尽快并以最简单的方式为你生成你想要的作曲。Monument 也应该是正确的并且性能良好的,但这应该是所有软件的目标。

请注意,这并不一定意味着生成完美的作曲,或者生成 所有可能的 作曲。Monument 保证不了这两点,但作为回报,Monument 的速度比我所知道的任何其他作曲程序都要快得多(如果有人知道任何更快的通用程序,请告诉我!)。

Monument 不是为谁准备的?

如果你想要进行穷举搜索或想要保证最优结果,那么 Monument 就不适合你 - SMC 在获取最优结果方面非常擅长。如果你想进行穷举搜索拼接,我认为你需要编写自己的生成器。祝你得到结果一切顺利,直到宇宙不可避免的“热寂”。

如果你需要一个图形用户界面,Monument 还不适合你(目前还不适合)。

如果你需要一个用户界面变化不频繁的生成器,Monument 还不适合你(目前还不适合)。

功能

  • 快速。真的很快。这具体意味着快速生成你可能想要敲钟的作曲。
  • 拼接简单:生成拼接就像添加多个方法一样简单。支持各种拼接样式,例如仅在调用时更改方法。
  • 多部分简单。例如 part_head = "134265" 将允许 134265142365(但不能是 123465134256)。
  • 常用事物的缩写 - 例如 length = "peal"length = "QP",或者添加前后旋律
    [[music]]
    run_lengths = [4, 5, 6, 7, 8]
    
  • 许多调整参数以确保Monument理解你的意图
    • 调用权重以鼓励稀疏调用。给调用一个负分,即使它错过了一点音乐也能生成稀疏调用。
    • 为特定的行进模式中的每一行添加权重。例如,鼓励男高音一起或手钟友好的课程。

计划中/进行中的功能

  • 一个图形用户界面,使作曲审查更容易。
  • 杜弗限制。例如,在音乐课程之间要求不超过3个领导。
  • 将范围要求添加到音乐计数中。例如,要求所有24个5678/8765。
  • 要求特定的课程/段。例如,要求所有*6578课程(但不一定是所有的6578)。
  • 可变分数,以鼓励在作曲的特定地方使用某些类型的音乐
  • 例如,为方法平衡、方法变化等添加更多调整参数。

已知问题

  • 三重方法如Grandsire和Stedman将产生非常奇怪的作曲。支持这些方法是完全有意的,但在它们能够很好地与Monument的敲钟模式匹配之前,还有一些问题需要回答。
  • 内存使用量很大。这是由于Monument当前搜索算法的工作方式。简而言之,Monument不断跟踪一个大的作曲前缀队列,并反复用稍微长一点的队列替换最佳前缀。存储足够大的队列需要大量的内存,而我还没有实现真正的内存限制。在此期间,将-Q <number>添加到命令的末尾将限制队列长度为<number>(默认限制为10,000,000)。

作曲很困难

最后,值得注意的是,生成作曲在一般情况下是非常困难的(实际上是NP困难)。总会有一些查询对于Monument(或任何其他生成器)来说太困难而无法完成,因此任何关于速度的承诺都是尽力而为,不是保证。

内部机制

如果你想要从高层次理解Monument的工作原理,请查看'Under the Hood'帖子。

如果你想要详细了解代码(例如,以贡献),ARCHITECTURE.md文件提供了Monument代码和内部工作的高层次概述。

依赖关系

~7–37MB
~520K SLoC