在GBDK c中使用采样音频播放时如何运行代码?

时间:2014-10-03 19:04:14

标签: c audio gameboy

我正在GBDK为Ga​​meBoy制作游戏,我试图在游戏中添加声音。 GBDK有一个从一组值中播放声音的功能,唯一的问题是,当它播放声音时,脚本的其余部分会冻结。有没有办法可以让它们同时运行?

1 个答案:

答案 0 :(得分:2)

使用sampled audio playback时无法运行代码。这是因为它实际上使用完整的CPU来执行此播放。如果你想使用常规的声音效果,你需要在游戏中暂停游戏,或者使用不同的方法。我将尝试总结使用下面的其他播放方法,但它有点复杂,我不是专家。


使用“普通”音效

这是一种在制品 - 我对它不太熟悉,但它应该让你开始。

要使用音效,您需要写入GameBoy音频寄存器。这可以在GBDK的hardware.h中找到,它自动包含在对gb\gb.h的引用中。但(当然)寄存器没有任何文件。此信息可在GB Cribsheet上找到。还有this sound documentation file(不幸的是,它在Windows编码上表现得很奇怪 - 用记事本以外的其他东西打开),还有Devrs.com sound documentation上的其他信息。

使用GBSOUND.TXT:

  

可以访问声道的地址是:
  $地址:(说明),(注册速记)
  $ FF10 - $ FF14:第1频道,简称为NR10-NR14
  $ FF15未使用,可能是第2频道的扫描注册   原本
  $ FF16 - $ FF19:第2频道,简称为NR21-NR24
  $ FF1A - $ FF1E:第3频道,简称NR30-NR34
  $ FF1F未被使用,可能是第4频道的扫描注册   原本
  $ FF20 - $ FF23:第4频道,简称NR41-NR44
  $ FF24控制Vin状态和音量,称为NR50
  $ FF25选择每个通道输入的输出,称为NR51
  $ FF26是状态寄存器,也控制声音电路的功率   简称NR52
  $ FF27 - $ FF2F未使用。
  $ FF30 - $ FF3F是通道
的4位采样的加载寄存器空间   3

在GBDK中,寄存器名为NR10_REGNR11_REGNR12_REG等。

另外,尝试查看示例程序sound.c,它不能为我编译。我可以编辑它以包含更多信息。


回答@franklin的问题:

  

这引出了一个问题,游戏玩家如何同时玩游戏和声音?

他们通常不会播放样本。例如,如果你看看神奇宝贝黄色,皮卡丘的哭声是通过样本回放来完成的。但是在播放时,没有别的事情可做。另一方面,像普通背景音乐这样的东西是使用另一个audio hardware完成的(抱歉,不是非常详细的维基链接)。类似地,虽然使用噪声通道(也用于样本回放)完成移动声音效果 ,但它们实际上不是采样音频。因此,游戏可以继续运行。