我正在GBDK为GameBoy制作游戏,我试图在游戏中添加声音。 GBDK有一个从一组值中播放声音的功能,唯一的问题是,当它播放声音时,脚本的其余部分会冻结。有没有办法可以让它们同时运行?
答案 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_REG
,NR11_REG
,NR12_REG
等。
另外,尝试查看示例程序sound.c
,它不能为我编译。我可以编辑它以包含更多信息。
回答@franklin的问题:
这引出了一个问题,游戏玩家如何同时玩游戏和声音?
他们通常不会播放样本。例如,如果你看看神奇宝贝黄色,皮卡丘的哭声是通过样本回放来完成的。但是在播放时,没有别的事情可做。另一方面,像普通背景音乐这样的东西是使用另一个audio hardware完成的(抱歉,不是非常详细的维基链接)。类似地,虽然使用噪声通道(也用于样本回放)完成移动声音效果 ,但它们实际上不是采样音频。因此,游戏可以继续运行。