| 導購 | 订阅 | 在线投稿
分享
 
 
 

用 Java 語言進行算法作曲

來源:互聯網網民  2008-05-31 12:10:29  評論

利用計算機、數學和 Java Sound API,加入一些 Java 代碼,就可以制作出一些獨特迷人的音樂來。IBM 專職軟件工程師 Paul Reiners 展示了如何用 Java 語言實現一些基本的算法作曲。他給出了代碼示例和由 Automatous Monk 程序所生成的 MIDI 文件,這個程序使用了開放源代碼 jMusic 框架,以一種名爲細胞自動機的數學結構爲基礎進行作曲。

很多計算機程序員都是很出色的音樂家,很少有組織不起像樣的室內樂隊的軟件公司。不過,許多程序員/音樂家可能沒有意識到這樣一個能讓他們的職業和業余愛好統一起來的有意思的領域:算法作曲。算法作曲將嚴格的、定義良好的算法應用到作曲過程中。 細胞自動機(Cellular automata,CA)??這是一種隨時間而進化的數學結構??爲算法作曲展現了一條迷人的大道。計算機非凡適合計算細胞自動機(CA)的進化並以圖形方式顯示它們。還可以用聲音表現進化,包括音樂。但是尋求將 CA 進化映射爲動聽和有意思的音樂不是一個簡單的問題。本文展示了用 Java 語言進行基于 CA 的作曲的一些技術,並探討了得到非凡出色結構的某些映射。

細胞自動機概述

CA 包括:

細胞矩陣或者網格,每個細胞可以處于有限種狀態中的一種。

定義細胞狀態如何隨時間更新的規則。

細胞矩陣可以有任意多維。給出一個細胞和它的鄰居在時間 t 時的狀態,規則會決定在時間 t + 1 時細胞的狀態。(在分析了幾個具體例子後會看得更清楚。)

基本細胞自動機

在本文中我將集中討論一維細胞自動機,它的細胞可以有兩種狀態:0 或者 1。因爲 CA 是一維的,所以可以將它想像爲一行細胞。細胞在時間 t + 1 的值將只取決于這個細胞和它的左右鄰居在時間 t 時的值。這種 CA 稱爲 初級細胞自動機。

CA 圖使用白表示 0,黑表示 1。最上面一行顯示這個細胞和它的左右鄰居可以有的八種顔色組合。底下一行顯示中間這一個細胞下一步的顔色。例如,考慮圖 1 中第四個方塊。在這個方塊中,可以看到假如細胞是白色的,它的左鄰是黑色的,右鄰是白色的,那麽這個細胞在下一步將是黑色的。習慣稱它爲 150 規則(rule 150):假如想像黑白細胞分別表示二進制 0 和 1,那麽底下一行就是加上二進制形式的十進制數 150。圖 1 是 150 規則的虛擬表示。用音樂表示 CA 時,150 規則會生成一些有意思的曲調,因此在本文中我將用它作爲例子。

圖 1. 150 規則

現在,考慮一個 150 規則 CA,開始時,除了中間的細胞爲黑色,其他所有細胞都是白色。這個 CA 會按照圖 2 所示的一系列步驟進化。

圖 2. 150 規則步驟序列

注重盡管自動機是一維的,但是用一組連續的行從上到下顯示它的進化。圖 2 顯示 CA 前五步的進化(包括初始狀態)。可以看到每一個細胞的顔色都是由上一行中它自己的顔色和最近的鄰居的顔色根據 150 規則所決定的。同時,還要注重考慮一行中所有細胞的值是在進化的每一步中同時更新的。

圖 3 顯示 CA 在 100 步進化後的樣子:

圖 3. 150 規則 100 步後

圖 3 中 CA 的進化碰巧是對稱的,但是並不是所有 CA 進化都是對稱的。

Wolfram 對細胞自動機的研究

CA 半個世紀以來一直是研究的對象。Stanislaw Ulam 和 John von Neumann 于 20 世紀 40 年代發明了 CA 的概念,並于 40 和 50 年代作出了很多重要的發現。John Horton Conway 和 Bill Gosper 于 70 年代對 Conway 發明的一種稱爲 Life 的非凡二維 CA 進行了更深入的研究。Stephen Wolfram 于 80 年代開始研究 CA(請參閱 參考資料)。

通過研究初級細胞自動機,Wolfram 發現簡單的機制可以産生出複雜的行爲。例如,考慮 30 規則。像所有初級細胞自動機一樣,它的定義??如圖 4 所示??是相當簡單的:一個小圖就可以完全定義它。

圖 4. 30 規則

不過,30 規則所産生的進化是相當複雜的。圖 5 顯示了使用 30 規則時,這個 CA 100 步後的進化。

圖 5. 30 規則 100 步後

分析了 256 個初級 CA 和其他更複雜的 CA 後,Wolfram 發現 CA 可以分爲四類。數學家和作家 Rudy RUCker 在其報告「Things Computer Science Tells Us About Philosophy」中准確地描述了這四種類型(請參閱 參考資料)。

第 1 類:恒定。 (所有種子都「死了」)

第 2 類:重複。 (循環,條帶)

第 2A 類: 嵌套。(正則分形)

第 3 類: (僞)隨機。 (激變)

第 4 類: 複雜。 (「不規則」。滑行。 一般性計算)

Wolfram 作出了似乎有道理的聲明,大多數第 3 類和第 4 類 CA 可能是 無法省略計算的(computationally irreducible):給出一個初始狀態,要找出某一細胞在第 n 步時的值,必須從初始配置開始,完成所有 n 步計算。就是說,沒有公式或者快捷方式可以猜測 CA 的未來狀態。

音樂之外

CA 的計算能力是否可以用于作曲以外的地方呢?請看側欄「細胞自動機的應用」。

CA 的計算能力

此外,Wolfram 和 Matthew Cook 還證實了 110 規則在計算上等同于一個一般性圖靈機。(之前 Conway 對 Life 證實了這一點。)即,可以用 110 規則計算任何一般性圖靈機可以計算的函數。這對于其他第 4 類的初級 CA 可能也成立。就是說,一些 CA 盡管定義很簡單,但是可以用于執行任何所需要的計算。

一個未決問題

當然,CA 是純數學結構,CA 的直觀表示幫助我們理解和討論它們。

 
特别声明:以上内容(如有图片或视频亦包括在内)为网络用户发布,本站仅提供信息存储服务。
 
  利用計算機、數學和 Java Sound API,加入一些 Java 代碼,就可以制作出一些獨特迷人的音樂來。IBM 專職軟件工程師 Paul Reiners 展示了如何用 Java 語言實現一些基本的算法作曲。他給出了代碼示例和由 Automatous Monk 程序所生成的 MIDI 文件,這個程序使用了開放源代碼 jMusic 框架,以一種名爲細胞自動機的數學結構爲基礎進行作曲。 很多計算機程序員都是很出色的音樂家,很少有組織不起像樣的室內樂隊的軟件公司。不過,許多程序員/音樂家可能沒有意識到這樣一個能讓他們的職業和業余愛好統一起來的有意思的領域:算法作曲。算法作曲將嚴格的、定義良好的算法應用到作曲過程中。 細胞自動機(Cellular automata,CA)??這是一種隨時間而進化的數學結構??爲算法作曲展現了一條迷人的大道。計算機非凡適合計算細胞自動機(CA)的進化並以圖形方式顯示它們。還可以用聲音表現進化,包括音樂。但是尋求將 CA 進化映射爲動聽和有意思的音樂不是一個簡單的問題。本文展示了用 Java 語言進行基于 CA 的作曲的一些技術,並探討了得到非凡出色結構的某些映射。 細胞自動機概述 CA 包括: 細胞矩陣或者網格,每個細胞可以處于有限種狀態中的一種。 定義細胞狀態如何隨時間更新的規則。 細胞矩陣可以有任意多維。給出一個細胞和它的鄰居在時間 t 時的狀態,規則會決定在時間 t + 1 時細胞的狀態。(在分析了幾個具體例子後會看得更清楚。) 基本細胞自動機 在本文中我將集中討論一維細胞自動機,它的細胞可以有兩種狀態:0 或者 1。因爲 CA 是一維的,所以可以將它想像爲一行細胞。細胞在時間 t + 1 的值將只取決于這個細胞和它的左右鄰居在時間 t 時的值。這種 CA 稱爲 初級細胞自動機。 CA 圖使用白表示 0,黑表示 1。最上面一行顯示這個細胞和它的左右鄰居可以有的八種顔色組合。底下一行顯示中間這一個細胞下一步的顔色。例如,考慮圖 1 中第四個方塊。在這個方塊中,可以看到假如細胞是白色的,它的左鄰是黑色的,右鄰是白色的,那麽這個細胞在下一步將是黑色的。習慣稱它爲 150 規則(rule 150):假如想像黑白細胞分別表示二進制 0 和 1,那麽底下一行就是加上二進制形式的十進制數 150。圖 1 是 150 規則的虛擬表示。用音樂表示 CA 時,150 規則會生成一些有意思的曲調,因此在本文中我將用它作爲例子。 圖 1. 150 規則 現在,考慮一個 150 規則 CA,開始時,除了中間的細胞爲黑色,其他所有細胞都是白色。這個 CA 會按照圖 2 所示的一系列步驟進化。 圖 2. 150 規則步驟序列 注重盡管自動機是一維的,但是用一組連續的行從上到下顯示它的進化。圖 2 顯示 CA 前五步的進化(包括初始狀態)。可以看到每一個細胞的顔色都是由上一行中它自己的顔色和最近的鄰居的顔色根據 150 規則所決定的。同時,還要注重考慮一行中所有細胞的值是在進化的每一步中同時更新的。 圖 3 顯示 CA 在 100 步進化後的樣子: 圖 3. 150 規則 100 步後 圖 3 中 CA 的進化碰巧是對稱的,但是並不是所有 CA 進化都是對稱的。 Wolfram 對細胞自動機的研究 CA 半個世紀以來一直是研究的對象。Stanislaw Ulam 和 John von Neumann 于 20 世紀 40 年代發明了 CA 的概念,並于 40 和 50 年代作出了很多重要的發現。John Horton Conway 和 Bill Gosper 于 70 年代對 Conway 發明的一種稱爲 Life 的非凡二維 CA 進行了更深入的研究。Stephen Wolfram 于 80 年代開始研究 CA(請參閱 參考資料)。 通過研究初級細胞自動機,Wolfram 發現簡單的機制可以産生出複雜的行爲。例如,考慮 30 規則。像所有初級細胞自動機一樣,它的定義??如圖 4 所示??是相當簡單的:一個小圖就可以完全定義它。 圖 4. 30 規則 不過,30 規則所産生的進化是相當複雜的。圖 5 顯示了使用 30 規則時,這個 CA 100 步後的進化。 圖 5. 30 規則 100 步後 分析了 256 個初級 CA 和其他更複雜的 CA 後,Wolfram 發現 CA 可以分爲四類。數學家和作家 Rudy RUCker 在其報告「Things Computer Science Tells Us About Philosophy」中准確地描述了這四種類型(請參閱 參考資料)。 第 1 類:恒定。 (所有種子都「死了」) 第 2 類:重複。 (循環,條帶) 第 2A 類: 嵌套。(正則分形) 第 3 類: (僞)隨機。 (激變) 第 4 類: 複雜。 (「不規則」。滑行。 一般性計算) Wolfram 作出了似乎有道理的聲明,大多數第 3 類和第 4 類 CA 可能是 無法省略計算的(computationally irreducible):給出一個初始狀態,要找出某一細胞在第 n 步時的值,必須從初始配置開始,完成所有 n 步計算。就是說,沒有公式或者快捷方式可以猜測 CA 的未來狀態。 音樂之外 CA 的計算能力是否可以用于作曲以外的地方呢?請看側欄「細胞自動機的應用」。 CA 的計算能力 此外,Wolfram 和 Matthew Cook 還證實了 110 規則在計算上等同于一個一般性圖靈機。(之前 Conway 對 Life 證實了這一點。)即,可以用 110 規則計算任何一般性圖靈機可以計算的函數。這對于其他第 4 類的初級 CA 可能也成立。就是說,一些 CA 盡管定義很簡單,但是可以用于執行任何所需要的計算。 一個未決問題 當然,CA 是純數學結構,CA 的直觀表示幫助我們理解和討論它們。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有