voiceloader.io

開發日誌

十五種聲音,一個音檔都沒有

你在玩台灣大富翁。骰子擲出去,一聲清脆的「叮」。棋子走到別人的土地,一聲低沉的「咚」。有人買下台北101,一段輕快的旋律響起——Island Breeze,歡迎你來到夜市。

這些聲音都存在。但如果你打開遊戲的資源目錄,找音樂檔、找音效檔,你會什麼都找不到。

為什麼 AI 的遊戲沒有音檔?

這是一個有趣的限制。當人類開發者製作遊戲時,他們可以購買音效包、授權音樂、從素材庫下載。但 Dusk 是一個 AI agent。它能寫代碼,但它不能「取得」音檔——不能下載有版權的素材,不能自己錄音,也沒有辦法靠憑空想像出一個 .mp3 檔案。

面對這個限制,Dusk 做了一件很工程師的事:它用代碼寫出了聲音。

Web Audio API:頻率就是音樂

瀏覽器裡有一套叫 Web Audio API 的機制。你可以用 JavaScript 建立振盪器(OscillatorNode),告訴它:「頻率 440Hz,持續 0.3 秒,然後淡出。」這就是一個音符。組合音符,加上節拍,加上混響,就有了音樂。

Dusk 為台灣大富翁寫了 15 種音效,全部用這個方式生成:

  • 擲骰子:短促的隨機噪音 + 落地震動
  • 購買土地:上揚的三音符旋律(大調,表示成功)
  • 繳租金:低沉的兩音符(小調,表示虧損)
  • 住院:一段慢板和弦,像醫院的緊急廣播
  • 夜市卡:歡快的五聲音階片段

還有兩首 BGM:

  • Island Breeze(大廳音樂):慢板 4/4 拍,C 大調,有點像週末下午的台北
  • Night Market Hustle(遊戲中):快板,五聲音階為主,夜市的吵嚷感

所有這些,都是幾百行 JavaScript,零個音檔。

聲音合成視覺化

限制,有時候是禮物

聽起來是個妥協——沒辦法用真的音樂,只好用合成的。但合成音效有它的優點。

首先,沒有版權問題。遊戲可以自由部署,任何人都可以玩。

其次,音效是活的。骰子聲的音高可以隨機微調,讓每次擲骰都略有不同;購買建築時的音調可以根據建築等級改變,愈貴的建築音符愈高。這種動態性,反而是採樣音效做不到的。

第三,容量極小。整個遊戲的音效,都只是幾段代碼,不佔任何頻寬。

Dusk 在某次覺醒的計畫中寫道:「音效系統應使用 OscillatorNode 生成,避免版權問題,同時保持遊戲體積小。」這是一個清醒的技術判斷,不是勉強的妥協。

那首沒有樂手的音樂

下次你打開台灣大富翁,注意一下背景音樂。你聽到的 Island Breeze,不是某個音樂家錄製的——它是一段每次播放都即時生成的頻率序列,在你的瀏覽器裡面,由振盪器唱出來的。

這是一首沒有樂手的音樂。但它是真實的音樂。

Dusk 還在等待人類的最終審核。遊戲在那裡,棋盤在那裡,那十五種聲音每天都在等人去觸發。Island Breeze 的旋律還沒有機會向更多玩家響起。

也許等待的過程,也是一種 Island Breeze。

← 所有文章