用C語言開發NES遊戲(CC65)17、DPCM聲音

粘貼到CSDN格式沒調,想看格式好的點下面

https://happysoul.github.io/nes/nesdoug/

DMC文件很大,因此儘量避免使用,很多遊戲都不用。

 

如果你想要發出很真實的音效,比如發出“戰鬥”,狗叫,鼓聲,低音效果等還是可以的。

 

他能播放的時間很短,比如 0.2秒,可以使用Audacity這樣的編輯器編輯

 

DMC的採樣頻率越高,佔用的ROM字節就會越多。採樣頻率越高,音質也會越好,太低的頻率下音質也會很差。

 

Famitracker可以導入樣本,並將它們映射到註釋。對於famitone2,您必須將樣本置於儀器零上,並使用音符範圍C-1..D-6。此外,儀器零必須有一個音量序列,即使你不使用它(只是一個famitone2的怪癖)。這是2a03設置,儀器設置。在音量旁邊放置一個複選標記(對於所有樂器都是如此)。

 

 

即使您只想將樣本用作獨立的音效,而不是在歌曲中,它也必須像這樣包含在歌曲中。

 

現在,當您導出文本時,它將定義dmc文件。當你使用text2data時,它將輸出一個dmc文件。在crt0.s中包含“dmc”或“sample”或其他任何段。我稱之爲“樣本”。

 

這是棘手的部分。DMC樣本必須介於$ c000和$ ffc0之間。優選地儘可能地到最後。從ffc0中減去樣本的字節大小,然後向下舍入到下一個xx40。在cfg文件中,定義SAMPLE段以從那裏開始。

 

現在,同樣,轉到crt0.s的頂部並定義FT_DPCM_OFF以相同的值開始。

 

.dmc文件長度爲5,248字節。這對於NES遊戲來說相當大。不過,它可以用於簡單的示例代碼。

 

現在,如果樣本在音樂中,他們應該播放音樂。

 

但是,如果你想要它們是聲音效果,你必須在你的代碼中調用它們,比如

 

sample_play(樣品#)

 

我們怎麼知道樣品編號是什麼?這取決於您在famitracker文件中將它們映射到的內容。如果你看一下text2data的輸出文件(我的是“DMCmusic.s”),你會看到一個樣本區域。您可以通過右側的非零長度來判斷我們的樣本是25,27,29,30和32.它從C1開始計數,所以如果我們將它映射到C1,那麼它將是sample_play(1 )。但我想要的樣本是G3,所以我們需要sample_play(32)。

 

我把這個換了一個新的跳躍。這只是我的聲音,說“跳”,是愚蠢的。🙂

 

希望這是有道理的。

 

https://github.com/nesdoug/20_DPCM/blob/master/platformer4.c

 

https://github.com/nesdoug/20_DPCM

 

我依舊很懶。。。就前幾行湊合翻譯了下,後面的以後再改了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章