2008-10-07 97 views
86

我一直在思考過程中的一段時間內容,我從來沒有看到過程音樂的實驗。我們有用於生成模型,動畫,紋理的奇妙技術,但音樂仍然是完全靜態的或者只是分層循環(例如孢子)。程序音樂生成技巧

因此,我一直在思考最佳的音樂生成技術,我很好奇其他人的想法。即使您之前沒有考慮過這個問題,您認爲哪種方式會有效?每個答案都需要一種技術,並儘可能包含示例。該技術可以使用現有的數據或完全從頭開始生成音樂,也許可以通過某種輸入(情緒,速度等等)來生成音樂。

+17

最後約實際上編程/製造/生成的音樂音樂的問題! :D – Oddmund 2008-10-08 01:12:58

回答

26

元胞自動機 - read。您可以試試here

編輯:

rakkarage已經提供的另一個資源:http://www.ibm.com/developerworks/java/library/j-camusic/

+1

沃爾夫勒姆太聰明瞭!偉大的工作,使這種事情太容易了...... – defmeta 2008-12-08 17:15:58

+0

我無法讓它在我的Ubuntu盒子上工作。 :( – Calmarius 2011-02-23 11:01:31

+0

http://www.ibm.com/developerworks/java/library/j-camusic/ – 2012-02-18 04:08:43

1

我一直在考慮該技術是建立小型音樂模式,由酒吧左右。用感覺標識符來標記這些模式,如'興奮','激烈'等。當您想爲某種情況生成音樂時,根據這些標籤選擇一些模式並選擇一個您想要播放的樂器。基於樂器,找出如何組合模式(例如,在鋼琴上,您可以將它們一起彈奏,具體取決於手的跨度,在吉他上可以連續快速彈奏音符),然後將其呈現爲PCM 。此外,您可以更改按鍵,更改速度,添加效果等。

0

回到90年代後期,微軟創建了一個名爲「交互式音樂控制」的ActiveX控件,它確實實現了您的要求。不幸的是,他們似乎放棄了這個項目。

+0

這是因爲它創建的音樂完全失敗,這是算法組合音樂的一個非常普遍的特徵。 – MusiGenesis 2008-10-08 01:18:32

+0

上述@thekidder引用的Wolfram Tones項目在不吹風的情況下非常成功。我期待着平常的rnd noodling ... – defmeta 2008-12-08 17:18:36

1

您描述的具體技術是托馬斯杜比在十年或十五年前的工作,雖然我現在不記得他叫什麼,所以我不能給你一個好的搜索術語。

但請參閱this維基百科文章和this元篩選頁面。

7

一個簡單而有效的算法是使用1/f噪聲(又稱「粉紅噪聲」)從一個比例尺中選擇持續時間和音符。這聽起來有點像音樂,可能是一個很好的起點。

一個更好的算法是使用「馬爾科夫鏈」..掃描一些示例音樂和建立一個概率表。在最簡單的情況下,C可能有20%可能跟隨A.爲了使這一點更好,請查看過去幾個註釋的順序,例如「CAB」有15%可能跟隨B,並且4%可能跟着一個Bb等等。然後,用前面選擇的音符的概率來選擇音符。這個非常簡單的算法產生了相當不錯的結果。

Markov chains for music generation

4

My software用途中應用進化理論,以 「成長」 的音樂。該過程與理查德道金斯的The Blind Watchmaker程序類似 - MusiGenesis隨機添加音樂元素,然後用戶決定是否保留每個添加的元素。這個想法就是保留你喜歡的東西,並把任何不正確的東西甩掉,你不需要任何音樂訓練就可以使用它。

界面打擊,但它是舊的 - 起訴我。

3

非無聊程序音樂世代的研究走回頭路。瀏覽電腦音樂雜誌的新舊問題 http://www.mitpressjournals.org/cmj(沒有真正的域名?)這有嚴重的技術文章的實際使用音樂合成錫匠,烙鐵騎師,位牧民和學術研究人員。這是一個蓬鬆的評論和採訪抹布,例如你可以在各大書店找到的幾個雜誌。

40

最成功的系統可能會結合幾種技術。我懷疑你會發現一種適用於各種音樂類型的旋律,和聲,節奏和低音序列的技術。例如,

Markov chains非常適合於旋律和諧波序列生成。這種方法需要分析現有的歌曲來建立鏈轉換概率。馬爾可夫鏈的真正之處在於,國家可以是任何你想要的。

  • 對於旋律產生,嘗試鍵相對音符編號(例如,如果鍵是C小調,C是0,d是1,d#將是2等)
  • 對於和諧代,嘗試將和絃的根音相關音符編號,和絃類型(大調,小調,減小,增強等)和和絃(根音,第一或第二)的反轉組合起來(

Neural networks非常適合time series prediction(預測),這意味着它們同樣適用於在對現有流行旋律/音樂進行訓練時「預測」音樂序列,和聲。最終結果將與馬爾可夫鏈方法類似。除了減少內存佔用之外,我想不出比馬爾可夫鏈方法有什麼優點。

除了音調之外,您還需要持續時間來確定生成的音符或和絃的節奏。您可以選擇將這些信息合併到馬爾可夫鏈狀態或神經網絡輸出中,或者可以單獨生成它併合並獨立的音高和持續時間序列。

Genetic algorithms可以用來演變節奏部分。一個簡單的模型可以使用二進制chromosome,其中前32位表示鼓的模式,第二個32位是圈套器,第三個32位是閉合的帽,等等。這種情況下的缺點是它們需要持續的人類反饋來評估新演變模式的適應性。

expert system可用於驗證由其他技術產生的序列。這種驗證系統的知識基礎可能可以從任何優秀的音樂理論書籍或網站中取消。嘗試Ricci Adams'musictheory.net

0

如果你深入瞭解音樂如何掛在一起的理論,Bill Sethares site有一些有趣的轉折。

0

我一直都「,從‘理論與編程語言的實踐’研究小組由哥本哈根大學尋找到做this project proposal - "8.1 - CS部門:

音樂的8.1自動收集和統計分析語料庫

對樂譜的傳統分析 由一個或多個人組成 分析節奏,和絃序列和 片的其他特徵,在一個經常 其他作品的模糊比較由 同一作曲家或其他作曲家 來自同一時期。

傳統 音樂自動分析幾乎沒有 處理樂譜,但一直專注於 信號分析和使用 機器學習技術來提取 和內分類,比如情緒或 流派。相比之下,DIKU的初步研究 旨在自動完成樂譜分析的部分內容。增加的 值是提取大量 樂譜不能輕易通過手工完成 ,不能有意義 分析了機器學習 技術 信息的潛力。

這個 - 正如我所看到的那樣 - 是您的問題的相反方向,數據生成 - 我想 - 可以用於某些程序生成音樂的實例。

3

我一直很喜歡使用iMuse系統的老式Lucasarts遊戲,它爲遊戲製作了一個永無止境的反應式配樂,並且非常具有音樂性(因爲它大部分仍然是由作曲家創作的)。你可以在這裏找到規格(包括專利): http://en.wikipedia.org/wiki/IMUSE

任天堂似乎是唯一仍然使用類似於iMuse的方法創建或影響音樂的方法。

除非你的項目是非常實驗性的,否則我不會放棄使用作曲家 - 一個真正的人類作曲家會產生比algorythm更多的音樂和可聽結果。

比較它寫一首詩:你可以很容易地產生聽起來非常前衛的nonsene詩,但複製與algorythm莎士比亞是很困難的,把它溫和地。

0

我的觀點是,生成音樂只有經過嚴格的選擇過程才能發揮作用。算法音樂先驅大衛·科普將會從他的算法(我認爲大部分是基於馬爾可夫鏈)中抽出數小時的音樂輸出來挑選出實際結果不錯的少數人。

我認爲這個選擇過程可以通過建模特定音樂風格的特徵來實現自動化。例如,一種「迪斯科」風格可以爲低音提供大量的點數,這些低音提供了背景上帶有圈套的背景和鼓部分,但是爲重度不協調的和聲減去了點數。

事實上,音樂創作過程充滿了如此多的習慣做法,以至於如果沒有特定的領域知識,他們很難建模。

10

對這些技術有超過50年的研究,往往被不熟悉計算機音樂和算法構成歷史的開發人員忽略。解決這些問題的系統研究和無數的例子可以在這裏找到:

http://www.algorithmic.net

2

這樣的一個大課題。你可以看看我的iPad應用程序,Thicket,或在morganpackard.com上的Ripple軟件。根據我的經驗,大多數動態音樂生成的學術方法都會提供聽起來很好的學術內容。我認爲在俱樂部/電子世界的邊緣會發現更成功的東西。 Monolake是我在這方面的英雄。非常可聽的東西,非常計算機生成。我自己的音樂也不錯。保羅蘭斯基的「Alphabet Book」是一個非常可聽的算法音樂的好例子,特別是考慮到他是一個學術家。

1

本書Algorithmic Composition是使用的幾種方法的好導遊:

「涉及的主題包括:馬爾可夫模型,生成文法,過渡網絡,混沌和自相似性,遺傳算法,元胞自動機,神經網絡和人工智能。」

這是一個很好的起點,在這個廣泛的主題,但它從來沒有深入描述每種方法的工作原理。它提供了一個很好的概述,但是如果你還沒有對它們有所瞭解,那麼它們還不夠。

0

我一直在爲程序音樂開發Python模塊。我只是編制了我對音符,音階和和絃結構的瞭解,然後就能夠讓它從這些約束中隨機生成內容。我確信有更多的理論和模式可以教授這樣的系統,尤其是通過更好地理解該主題的人。然後,您可以將這些系統用作遺傳算法或隨機內容生成的約束條件。

您可以參考我的實施here,尤其是隨機生成的主角示例可能對您有用。對和絃進程有深刻理解的人可以用這樣的技術創建一個歌曲結構,並在其上實現受約束的隨機旋律。我對音樂理論的理解並沒有那麼深入。

但基本上,您需要對您想要生成的音樂種類的理論進行編碼,然後將其用作某種算法的約束,以便在程序上探索該理論的範圍。

3

你看過SoundHelix(http://www.soundhelix.com)嗎?這是一個用於算法隨機音樂創作的開源Java框架,能夠產生非常整潔的音樂。您可以將SoundHelix作爲獨立應用程序,作爲嵌入在網頁中的小程序,作爲基於JNLP的小程序使用,也可以將其包含到您自己的Java程序中。與SoundHelix產生

的例子可以在這裏找到:http://www.soundhelix.com/audio-examples