【问题标题】:Algorithm for music imitation? [closed]音乐模仿的算法? [关闭]
【发布时间】:2009-07-24 15:36:44
【问题描述】:

我对自动音乐制作很感兴趣。我正在考虑一个程序,它输入大量的 1 小节琶音(为简单起见,= 固定长度的音符序列)并根据它学到的内容生成自己的序列。

首先,我知道我可以使用字母(digram?trigram?)frequency analysis,仅应用于音符音高,然后根据频率概率生成我的序列。

你知道有没有更高级的算法,也许是专门为音乐序列教授的?

【问题讨论】:

    标签: algorithm audio sequences


    【解决方案1】:

    关于算法组合的维基百科文章是一本极好的入门读物。它描述了一些用于算法音乐创作的模型、著名作曲家、书籍参考和算法作曲软件。

    http://en.wikipedia.org/wiki/Algorithmic_composition

    【讨论】:

    • 各种分形和排序算法听起来很悦耳。
    【解决方案2】:

    作为一名音乐家和软件工程专业的学生,​​我想我可以在这里阐明一些很酷的观点:P 我自己在这个主题上做了很多工作,并计划在未来以此为基础做出一些重大的事情。

    当你编写一个算法时,你的目标是想出一个解决方案——例如,在对问题进行排序时,它就是有一个排序列表。在算法音乐作曲中,解决方案(通常)是一首令人愉悦的歌曲或旋律,具有结构等。

    解决方案的问题(哈哈)不仅是客观的,而且解决方案是非常开放的。使用排序算法,您只有一种方法可以对列表进行排序。通过音乐创作,您可以拥有数百万首悦耳的歌曲/无论您的目标是什么。

    因此,您将需要一种算法,该算法适用于不找到明确的解决方案,而是找到最优的解决方案。我的建议是遗传算法或类似的。遗传算法很棒,因为它们可以创建一个包含各种最佳解决方案的池。

    您需要将乐曲分解为多个部分 - 为旋律设置 GA,为节奏设置 GA,为结构设置 GA,等等。并设计适合您的健身功能以满足您的需求。

    当然,这只是解决问题的一种方法;有很多,前面列出的维基百科链接是一个很好的开始。

    我建议查看: GenJam:一种即兴爵士乐遗传算法,旨在交易独奏- http://www.it.rit.edu/~jab/GenJam.html

    这本书很有启发性: http://www.springer.com/computer/information+systems/book/978-1-84628-599-8

    我想另一种有趣的方法是使用神经网络....但是给它们设置集合可能会有点问题....这需要更多的工作。

    无论如何,祝你的事业好运:P

    【讨论】:

    • 另外,学习音乐作曲和和声将有助于您设计健身功能:D
    【解决方案3】:

    对现有音乐的统计分析——好吧——平均水平。很少有任何有趣的东西,因为它倾向于重现您分析的所有共同特征。

    音乐是多维的。您可以清楚地分析您感兴趣的任何或所有维度。音高、速度、音符序列、和声进行、音量变化等等。一切。

    音乐是微妙而复杂的,所以总是有更多的东西需要分析。

    AFAIK(我儿子是作曲家)更有趣的是发明自己独特的算法来生成相当独特的音乐。

    这是我儿子指定的。它会生成一个由 48 个音乐事件组成的序列,并以此为基础。

    #!/usr/bin/env python
    """
    there are 8, 3-note sets.
    each one can occur on 3 different beats.
    each pitch of the 3 note set can be in one of 3 octaves and it can either be a harmonic or a fingered note.
    """
    import random
    
    noteSetChoices = [ "C-E-G", "C-F-A", "C-E-A", "D-F-A", "D-F-B", "D-G-B", "E-G-B", "F-A-C" ]
    beatChoices= [ "1 - - -", "- 2 - -", "- - - 4" ]
    octaveChoices= [ 1, 2, 3 ]
    techniqueChoices= [ 'Fingered', 'Harmonic' ]
    
    for n in range(48):
        note= random.choice(noteSetChoices)
        beat= random.choice(beatChoices)
        octave= random.choice( octaveChoices )
        technique= random.choice( techniqueChoices )
        print octave, note, technique, beat
    

    【讨论】:

    • 《孢子》的音乐怎么样?我很确定音乐是自动生成的。
    • 嗯,这意味着你已经知道流派经典,而且你不会从其他歌曲中提取它们。
    • @janesconference:实际上,我不知道深蹲。我是贝司手,所以懂一点;我儿子是作曲家。
    【解决方案4】:

    虽然它通常用于处理比一个小节更长的序列,但马尔可夫链是一种生成与其输入相似的音乐的简单、有效的方法。有关使用 RTcmix 生成音频的 Python 示例,请参阅我的实现 here

    它基于元级别笔记中的马尔可夫链章节,这是一本关于算法组合的优秀文本。

    【讨论】:

      【解决方案5】:

      如果您了解音乐的惯例,这真的很有帮助,因此请阅读为教人类如何创作歌曲而编写的书籍和文章。你会得到很棒的想法。

      时不时地踩一些踏板点来增加张力。在两种不同的仪器之间使用古老的呼叫响应技术。

      【讨论】:

        猜你喜欢
        • 2019-05-12
        • 2011-02-21
        • 1970-01-01
        • 2010-09-11
        • 2010-10-10
        • 1970-01-01
        • 1970-01-01
        • 2011-05-30
        • 2011-03-10
        相关资源
        最近更新 更多