创建简单和弦进行的算法

2024-06-08

我正在制作一个程序,根据 C 大调音阶的随机基本和弦进行生成随机简单的旋律。

从这个音阶生成 4 个三和弦的和弦进行的好方法是什么?从音阶中生成 4 个完全随机的三元组(从 7 个现有的三元组中)通常听起来不太好。

我需要一种方法来生成听起来不错或不错的和弦进行,但我不想简单地从现有的进行池中随机选择一个进行。我仍然希望程序自己生成这 4 个三和弦,使用一些简单的算法来确保生成的级数听起来不错。

(正如我所说,这 4 个三和弦将分别取自 C 大调音阶的 7 个三和弦)。

请注意:这个问题与我之前关于创建旋律创建算法的方法的问题并不重复。这是关于寻找一种生成和弦进行的方法。生成旋律是另一个主题。

感谢您的帮助

编辑:关于如何知道一个三和弦在另一个三和弦旁边听起来是否合适的一般指南也很棒。


听起来你需要将其分为几个阶段:

  • 首先,从该密钥的所有可能性中随机生成一个三元组
  • 其次,应用一个或多个过滤器来消除那些“听起来不合适”的过滤器(*)。
  • 继续下去,直到获得 4 个通过所有过滤器的三元组。

我认为这个解决方案最终可能也会令人愉快地工作——你可以慢慢地建立一个过滤器集合,每个过滤器都做一件简单的事情——但是把它们放在一起,你会逐渐弄清楚什么是“体面”的定义。

(*) The 听起来不错定义为参考之前的三元组(如果有的话),您可以在此处编写过滤器,例如:

  • 三和弦的根音是否符合相对于先前根音的逻辑模式?;例子:

    • 简单上升
    • 简单降序
    • 上升三分之一
    • etc
  • 这个三和弦的音符与前一个三和弦至少有一个共同的音符吗?

    • 这可以找到一些听起来好听的倒装
  • 前一个三元组的“跳跃”是否“小于”某个给定的阈值?

    • 以避免在整个范围内出现不和谐的跳跃
    • 只需将三和弦的 MIDI 音符值相加并与之前的值进行比较即可轻松实现
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建简单和弦进行的算法 的相关文章

  • 如何反向for循环?

    我正在制作一个水模拟程序 我需要它通过 y x 进行 for 循环 但我需要它先检查最底部的 y 然后向上检查 这是我的等级 lvl 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 我需要
  • 棒材切割 - 动态规划

    问题陈述 棒材切割问题如下 给定一根长度为n英寸和价格表Pi for i 1 2 3 n 确定最大收益Rn可以通过切割棒并出售碎片来获得 请注意 如果价格Pn对于一根长度的杆n足够大 最佳解决方案可能根本不需要切割 考虑以下情况 n 4 图
  • 将 0 更改为 1 或反之亦然的最优雅的方式

    做接下来的事情最优雅的方式是什么 int i oneOrZero if i 0 i 1 else i 0 你可以假设i只能有 1 或 0 值 i 1 XOR https en wikipedia org wiki Exclusive or值
  • 在地图元素上使用 for_each

    我有一个映射 我想在其中对每个数据类型对象成员函数执行调用 我还知道如何在任何序列上执行此操作 但是是否可以在关联容器上执行此操作 我能找到的最接近的答案是 Boost Bind 访问 std for each 中的 std map 元素
  • 埃拉托色尼筛法的 Java 实现可以超过 n = 2^32?

    目前我有这个质数生成器 其限制为 n Sieve public class Main public static void main String args long N 2000000000 initially assume all in
  • Tarjan 算法的非递归版本

    我有以下 Tarjan 算法的 递归 实现来查找图中的强连接组件 并且工作正常 public class StronglyConnectedComponents public static List
  • 四舍五入到最接近的 2 的幂

    是否有一个单行表达式 可能是布尔值 来获取最接近的2 n给定整数的数字 示例 5 6 7 必须是 8 四舍五入到下一个更高的二的幂 参见一些小技巧 http graphics stanford edu 7Eseander bithacks
  • ASM 中从小端到大端的快速转换

    我在 C 中有一个 uint 类型数组 在检查程序是否在小端机器上运行后 我想将数据转换为大端类型 因为数据量可能会变得非常大 但总是均匀的 所以我想考虑将两个 uint 类型作为 ulong 类型 以获得更好的性能并在 ASM 中对其进行
  • 什么是日历队列?

    我正在致力于构建一个离散事件模拟器 维基百科提到有几种通用优先级队列非常适合在 DES 中使用 具体来说 它提到日历队列是一个很好的结构 我找到了一份 pdf 1988 年的 其中提到了日历队列 但在大多数情况下我找不到关于它们的任何其他内
  • 验证是否存在唯一字符串的组合

    class Details String name String age String email String location 1 如果有详细信息列表 如下所示List
  • O(log n) 总是比 O(n) 快吗

    如果有 2 种算法以不同的复杂度计算相同的结果 O log n 总是会更快吗 如果是这样请解释一下 顺便说一句 这不是作业问题 不会 如果一种算法运行在N 100另一个在 log N 100 那么对于较小的输入大小 第二个将会较慢 渐近复杂
  • Welzl 算法的迭代版本

    我正在使用 Welzl 算法来查找点云的最小外接圆 2d 或最小外接球体 3d 不幸的是 该算法具有非常高的递归深度 即输入点数 这个算法有迭代版本吗 我找不到任何并且不知道如何将递归更改为循环 我发现了一些迭代的最小包围圆 球算法 但它们
  • 如何规划庭院灯最有效的路线

    我正在尝试挂一些庭院灯 基于另一个问题 https cs stackexchange com questions 80134 christmas light route efficiency我问 我意识到我需要一种算法来解决路由检查问题 h
  • 查找预排序数组中给定值的最低索引

    嘿 我在采访中遇到了这个问题 想知道解决它的最佳方法是什么 假设给定一个已经排序的数组 并且您想要找到某个值 x 的最低索引 这是我想出的 python 伪代码 我只是想知道是否有更好的方法来实现它 def findLowestIndex
  • 拉伸数组

    我有一个形成曲线的样本向量 假设其中有 1000 个点 如果我想将其拉伸到填充 1500 个点 给出不错结果的最简单算法是什么 我正在寻找一些只有几行 C C 的东西 我总是想增加向量的大小 并且新向量可以是当前向量大小的 1 1 倍到 5
  • last.fm、groveshark、pandora 等推荐网站背后的算法是什么?

    我正在考虑启动一个基于推荐系统的项目 我需要在这方面提高自己 这看起来是网络端的热门话题 还想知道lastfm groveshark pandora 的推荐系统使用什么算法 如果您知道有关此类算法的任何书籍 网站或任何资源 请告知 看一下协
  • 检测360度转弯算法

    我成功检测到手机绕轴的 0 360 度旋转 滚动 但现在我很难设计一种有效的算法来检测一整圈 我的工作但我认为不像我想要的那样优雅和有效的算法是 private boolean detectRoll private boolean chec
  • 简单的 DAWG 创建算法?

    我需要创建一个 DAWG http en wikipedia org wiki Directed acirclic word graph http en wikipedia org wiki Directed acyclic word gr
  • 德尔福 LZMA

    我在 7 zip 网站上找到了一个 LZMA 库 但是没有用 我不使用文件 只使用流 出于某些原因 7 zip 站点上的库只将标头写入流而不压缩流 有人遇到了一些问题吗 有例子吗 知道 Delphi 的其他 LZMA 库吗 Tks 我自己没
  • 如何找到包含序列所有元素的最小长度子序列

    给定一个序列 例如S 1 8 2 1 4 1 2 9 1 8 4 我需要找到包含所有元素的最小长度子序列S 没有重复 顺序无关紧要 如何有效地找到这个子序列 注意 有 5 个不同的元素 S 1 2 4 8 9 最小长度子序列必须包含所有这

随机推荐