Infinite Monkey

110405065
·
(修改过)
·
IPFS
「很簡單,超越李白的兩條路是:一、把超越他的那些詩寫出來;二、把所有的詩都寫出來!」——《詩雲》

大綱

這幾天突然想到「無限猴子定理」裡面的猴子好像也算一種生成式藝術,於是就做了一個會無限敲打字機的猴子,看牠在幾個字時能敲出「art」。

程式碼 + 作品展示🔗:openprocessing.org/s...

YouTube 錄製版本(有音效)🔗:youtu.be/nBWxZZDTg8E...

————————————————————————————————————————————

躺在床上時的發想

「無限猴子定理」是和機率相關的一個數學理論,大概意思如下

假使讓一隻猴子使用打字機隨機打字,只要時間足夠,則猴子必然能打出任何給定的文字,甚至是莎士比亞的著作。

理論中猴子「隨機打字生成作品」的行為讓我聯想到之前有了解到過的 Chance Music,進而想到,欸那麼猴子的行為或許也是一種生成式藝術⋯⋯?於是我就以無限猴子定理為主題,創作了本週的小作品。

初步構想

一開始的構想是正方形圖案中,中央有個猴子圖案,猴子的臉中央會是字數的計數器,而他打出來的字則會繞成一個圓圈,猴子會持續打字,直到打出「art」後才會停下來。

*定理中是打出莎士比亞的作品,不過如果真的以莎士比亞作品為指定文字的話,我的一生過完恐怕猴子都還沒打出來⋯⋯於是最終選用「art」作為指定文字(只有 3 個字母,期望值為 26^3 = 打 17576 次字),也可以讓我們看看,先不論真正的藝術「作品」,猴子在完全不懂文字 / 藝術的情況下,要花多長的時間才能以及能否產出「藝術」。

非常潦草的草圖

順帶一提,由於生成的文字可能會出現破萬個,全部都留在畫面中的話畫面可能會爆掉,所以最終我決定為顯示的字數設置上限,猴子會持續無盡地生成文字,不過顯示畫面上永遠只會出現 maxLength 長度的文字(超過的話最早的字母就會被移除)。

Coding 時間!

上週做「I Have No Eye Deer」的時候我是先畫圖再寫寫程式,不過這週對於怎麼畫一隻猴子實在很沒想法⋯⋯於是就先寫程式了!

這次的程式主要有幾個部分:

  • 生成文字(生成、控制長度、檢驗是否出現 “art” )

  • 動畫效果(設定每輪迴圈的延遲、打字線動畫)

  • 圖片(載入猴子圖片、調整大小、顏色與位置)

  • 音效(打字機音效、結束時的「叮~」)

首先生成文字的方面不是很困難,使用基礎的語法、功能就可以順利地完成。不過生成文字呈現的部分和原本構想的還是有些小出入,原本構想中文字應該是環形呈現,不過最終(為了方便XP)改成了普通地一行字,只能說理想很豐滿,現實很骨感,之後有空再來試試把文字排成環形⋯⋯

再來是動畫效果的部分,由於我的主函式是一個 while 迴圈,不能放在 draw()裡(不然每次都會重跑一次整個 while 迴圈),因此無法使用 frameRate 來做動畫效果,而需要使用 setTimeout 這個工具,雖然是第一次嘗試使用,但在 GPT 大神ㄉ幫助下一樣很順利愉快的完成了XDD。

接著圖片的部分,剛好上禮拜「I Have No Eye Deer」也有把圖片重新著色的相關程式,所以參考之前的程式碼就能順利完成這次的程式了!不過這次也有加入一點小調整,這週學到了可以用 HSB 顏色系統,生成在指定色系內的隨機顏色,於是這週便嘗試使用了一下,不過我發現在使用 HSB 系統生成隨機顏色過後,我還是需要再轉回 RGB 系統,不然我原本背景的顏色設定會跑掉。(或其實我好像也可以直接把整個作品的顏色系統都改成用 HSB,不過因為重新著色的程式碼是依上週 rgb 系統為基礎修改的,所以這次整體還是以使用 RGB 為主。)

最後是音效的部分,音效大概是我這次整個做下來最頭痛的部分了 QAQ,在 p5.js 中要導入音效照理應該是要用 loadSound(),不過我實際使用後卻一直跑出 Error 提示,去 p5.js 的官網查資料後,點入 loadSound() 頁面結果那一頁也是 404???總之我最後還是沒能成功使用 p5.js 導入音效,轉而使用了 html 的 createAudio 來播放音效。此外,我還發現,在網頁要播音效還不能一進去就自動播放,一定要使用者有按任意按鍵才能播放,不知道有沒有什麼方法能繞開這個限制⋯⋯總之音效這部分我真的做得蠻 trouble 的,不過最後也算是跌跌撞撞地完成了音效的置入!

程式碼連結 + 作品展示🔗:openprocessing.org/s...

(現在可以用 Open Processing 分享了就不再截圖程式碼ㄌ!不過在我的作品在 Open Processing 要播音效還是會有問題⋯⋯所以就先註解掉音效相關的程式碼了,如果想看有音效版本的話可以移駕 YouTube 看看我錄好ㄉ影片!)

YouTube 錄製版本(有音效)🔗:youtu.be/nBWxZZDTg8E...

繪圖

大致完善好程式碼後,趁著程式在跑測試,我便來畫這次的主角——猴子ㄌ,原本想畫可愛一點,但不知道為什麼感覺自己怎麼畫都好奇怪,最後就哎好啦就醬了地完成了。

感覺猴子的頭頂有點禿,於是就幫他加了兩根呆毛,希望有比較可愛@@(並沒有)

小結

這次本以為猴子企劃應該會做很快,結果實際上做得時間比預期地長了非常多(大部分時間是卡在音效的處理⋯⋯),不過這週也探索到了很多自己在 JavaScript 上沒接觸過的新領域,完成後也是很有滿足感!

小題外話,「無限猴子定理」也讓我想到劉慈欣的《詩雲》,故事大綱是高維的外星文明來到了太陽系,人類為了想證明自己有無可取代的價值,便提出人類能創作「詩」(思想上的藝術),並且展示了李白的作品,外星文明不以為然地表示,自己的技術能力無所不能,詩不過是一些符號的排列組合,自己怎麼可能無法創作出更好的作品?然而在窮盡所有方法後,他仍然無法創造出超越李白的詩作,因此最後他決定尋求另一條路:

「很簡單,超越李白的兩條路是:一、把超越他的那些詩寫出來;二、把所有的詩都寫出來!」

他決定將所有詩可能的排列組合窮舉出來,並將整個太陽系轉化為儲存單位,最終,太陽系成為了一片「詩雲」,外星人也終於寫出了「超越李白」的詩作。

「技術」是否能超越「藝術」是《詩雲》裡核心問題,不過從最終結局來看作者的想法應該還是偏向「不能」。李白(外星人)雖然最終成功以整個太陽系為代價寫出了「超越李白」的詩作,但他卻認輸了,因為他沒辦法將所謂的「巔峰之作」從詩雲中檢索出來,即便他有著絕對的技術能力,他仍然無法「鑑賞」藝術。故事末角色們也得出結論,技術或許能觸及藝術的巔峰樣態,但終究無法取代智慧生命的精華與本質。

(我蠻喜歡這個結局的,不過也想小吐槽一下,GAN:當我塑膠?)

最後分享一下我目前為止的執行結果中最有慧根和最沒慧根的兩隻猴子XD

26^3 也才17576,我那時候只想趕快錄完趕快補眠,結果右邊硬生生跑了兩個多小時都還沒跑出結果⋯⋯期間甚至開始懷疑自己的迴圈結束條件是不是有寫錯,最後總共跑了將近 3 小時才終於跑完w(゚Д゚)w




CC BY-NC-ND 4.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!