自動音楽制作に興味があります。私は、多数の 1 小節のアルペジオ (= 簡単にするために固定長の音符のシーケンス) が与えられ、学習した内容に基づいて独自のシーケンスを生成するプログラムについて考えていました。
まず、文字 (ダイグラム? トライグラム?)の周波数分析を使用して、音程のみに適用し、周波数確率に基づいてシーケンスを生成できることを知っています。
あなたが知っているより高度なアルゴリズムはありますか?おそらく音楽シーケンス用に明示的に教えられていますか?
アルゴリズム作曲に関するウィキペディアの記事は、優れた入門書です。アルゴリズム音楽の作成、著名な作曲家、本の参照、およびアルゴリズム作曲ソフトウェアに使用されるモデルのいくつかについて説明します。
私自身ミュージシャンであり、ソフトウェア エンジニアリングを専攻しているので、ここでクールな光を当てることができると思います :P 私はこのテーマについて多くの作業を行ってきましたが、将来これに基づいて何か大きなものを作成する予定です。
アルゴリズムを作成するときの目標は、解決策を考え出すことです。たとえば、並べ替えの問題では、並べ替えられたリストを作成する必要があります。アルゴリズムによる作曲では、解決策は (通常) 心地よい曲やメロディー、構造などを持つことです。
解決策の問題点 (笑) は、それが客観的であるだけでなく、解決策が非常にオープンエンドであることです。並べ替えアルゴリズムでは、リストを並べ替える方法は 1 つしかありません。作曲では、目的が何であれ、何百万もの楽しい曲があります。
したがって、決定的な解決策ではなく最適な解決策を見つけるのに適したアルゴリズムが必要になります。私の提案は、遺伝的アルゴリズムまたは類似のものです。遺伝的アルゴリズムは、さまざまな最適解のプールを作成できるため、優れています。
コンポジションをパーツに分割する必要があります。メロディー用の GA、リズム用の GA、構造用の GA などがあります。そして、ニーズに合わせてフィットネス関数を設計します。
もちろん、これは問題の解決策の 1 つにすぎません。多くのものがあり、前にリストされたウィキペディアのリンクは素晴らしいスタートです.
チェックアウトすることをお勧めします: GenJam: ソロを交換するために設計された即興ジャズ遺伝的アルゴリズム- http://www.it.rit.edu/~jab/GenJam.html
そして、この本は非常に啓発的です: http://www.springer.com/computer/information+systems/book/978-1-84628-599-8
別の楽しい方法はニューラル ネットワークを使用することだと思います....しかし、それらにセットを与えることはおそらく少し問題になるでしょう....それはもっと多くの作業です。
とにかく、あなたのベンチャーで頑張ってください:P
既存のリードの統計分析は、平均的な音楽につながります。分析したものに共通するすべての機能を再現する傾向があるため、興味深いものはほとんどありません。
音楽は多次元です。興味のあるディメンションの一部またはすべてを明確に分析できます。ピッチ、テンポ、音符のシーケンス、倍音の進行、音量の変化など、何でも。すべての。
音楽は微妙で複雑なので、分析すべきことが常にあります。
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
通常、マルコフ連鎖は 1 小節よりも長いシーケンスで機能することを意図していますが、マルコフ連鎖はその入力に似た音楽を生成するためのシンプルで効果的な方法です。オーディオ生成に RTcmix を使用して Python で記述された例については、こちらの実装を参照してください。
これは、アルゴリズム構成に関する優れたテキストである Metalevelからのメモ のマルコフ連鎖の章に基づいています。
音楽の慣習を知っていると本当に助かりますので、人間に歌の作り方を教えるために書かれた本や記事を読んでください。あなたは素晴らしいアイデアを得るでしょう。
時々ペダルポイントを投げて緊張を高めます。2つの異なる機器間でのコールアンドレスポンスの古くからの手法を使用します。