過(guò)去兩年,一位開(kāi)發(fā)者一頭扎進(jìn)Game Boy Advance和rp2040的音頻合成世界里,不斷打磨自己的振蕩器代碼。目標(biāo)很純粹:在性能摳到極點(diǎn)的硬件上,用最少的指令跑出波形。
他給整件事定下的總原則是“全用整數(shù),不管浮點(diǎn)”。即使手邊有FPU,整數(shù)在溢出回繞上的簡(jiǎn)潔性依然讓振蕩器實(shí)現(xiàn)輕松許多。所有運(yùn)算都基于32位值,這剛好是GBA的原生寄存器寬度,也是他實(shí)踐多年得出的甜區(qū)。
![]()
選擇32位相位還有一個(gè)聽(tīng)感上的隱性好處:它能把人耳可聽(tīng)范圍內(nèi)所有音高的精度都罩住。相位位數(shù)一降,低頻段的音準(zhǔn)就會(huì)開(kāi)始走樣——很多demoscene創(chuàng)作者能通過(guò)技巧繞過(guò)去,但作曲時(shí)就得時(shí)刻記著這個(gè)限制。一旦你上了32位,這件事完全不用操心,再往64位走收益就極微了。
所有振蕩器的起點(diǎn),都來(lái)自一個(gè)鋸齒波。這個(gè)鋸齒波只有兩個(gè)要素:當(dāng)前相位,以及每個(gè)采樣點(diǎn)加到相位上的步長(zhǎng)。步長(zhǎng)由頻率、采樣率和32位最大值決定:把目標(biāo)頻率乘以0x100000000再除以采樣率,就得到每一步的累加值。每生成一個(gè)采樣,相位加上步長(zhǎng),然后把相位值直接輸出為int32——一個(gè)單調(diào)上升的鋸齒波就出來(lái)了。
走到匯編層面,過(guò)程更干脆:循環(huán)里就三條指令,加相位、存相位、減計(jì)數(shù)。每完成一次加法,只要相位溢出了0xFFFFFFFF,就代表一個(gè)完整振蕩周期過(guò)去了。如果步長(zhǎng)剛好等于0x80000000,波形恰好每個(gè)兩個(gè)采樣振蕩一次,正好卡在采樣率一半的奈奎斯特頻率上。
步長(zhǎng)一旦超過(guò)0x80000000,有趣的變化就發(fā)生了:輸出波形并不會(huì)“更快”,而是開(kāi)始反向滾動(dòng),原本的上升鋸齒會(huì)翻轉(zhuǎn)為下降鋸齒。放在數(shù)學(xué)上解釋?zhuān)@是數(shù)字溢出回繞帶來(lái)的自然折疊效應(yīng),但在低算力合成里,它變成了一個(gè)幾乎零成本的波形變體。
不過(guò),這些棱角分明的波形都會(huì)帶出一個(gè)問(wèn)題:混疊。尖銳的跳變?cè)陬l譜里制造出聽(tīng)感不太舒服的額外頻率。業(yè)界修復(fù)混疊的方法之一是PolyBLEP(多項(xiàng)式帶限階躍函數(shù)),在轉(zhuǎn)換點(diǎn)做一小段修正,就能大幅減少雜音。
然而,開(kāi)發(fā)者在這段代碼里完全沒(méi)去碰PolyBLEP。原因非常直白:他要的是“不計(jì)一切代價(jià)的快”。在GBA這類(lèi)極度受限的設(shè)備上,接受混疊、繼續(xù)前行是必須做下的決定。想用便宜方案獲得干凈聲音時(shí),他更傾向于用相位調(diào)制在正弦波之間繞行——這條路雖然沒(méi)這些基本波形便宜,但也不會(huì)太遠(yuǎn)。
八年前構(gòu)建第一個(gè)合成器時(shí),他就發(fā)現(xiàn),極簡(jiǎn)架構(gòu)的音頻引擎本身就能驅(qū)動(dòng)出人意料的表達(dá)力。把一個(gè)上升鋸齒的加法循環(huán)跑在匯編里,再把反向下折的波形直接當(dāng)作變種使用,就足以在游戲中搭出厚實(shí)的聲音基底。
這樣一來(lái),振蕩器設(shè)計(jì)回歸到一個(gè)很本真的張力上:你是要更干凈的頻響,還是要更輕更快的執(zhí)行周期?在這枚32位相位循環(huán)里,他的答案毫無(wú)含糊——先把速度推滿(mǎn),音色瑕疵留到其他手段里再去補(bǔ)。
他還在籌備一份后續(xù)分享,專(zhuān)門(mén)講講相位調(diào)制如何用極低開(kāi)銷(xiāo)合成出干凈的聲音。至于那個(gè)“快速的PolyBLEP版本”,也許有一天會(huì)做,但目前并不在待辦清單里。眼下,這套用32位整數(shù)堆出來(lái)的振蕩器,已經(jīng)能讓一塊掌機(jī)芯片跑出足夠強(qiáng)烈的節(jié)奏。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶(hù)上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.