我正在为GameBoy in GBDK制作一个游戏,我正在尝试给游戏添加声音。GBDK有一个函数可以播放来自一系列值的声音,唯一的问题是当它播放声音时,脚本的其余部分会冻结。有什么办法能让他们同时跑吗?
发布于 2014-10-06 17:02:40
在使用音频回放时无法运行代码。这是因为它实际上使用完整的CPU来预置这个回放。如果你想要使用常规的音效,你需要暂停游戏,当他们玩,或使用不同的方法。我将尝试使用下面的其他回放方法进行总结,但这有点复杂,我不是专家。
使用“正常”音效
这是一种WIP -我不是太有经验,但它应该让你开始。
要使用声音效果,您需要写入GameBoy音频寄存器。这可以在GBDK的hardware.h中找到,它自动包含在对gb\gb.h的引用中。但是(当然)登记簿没有任何文件。此信息可在GB纸页上找到。还有这个声音文档文件 (不幸的是,它在windows编码上的行为很奇怪--使用记事本以外的东西打开),还有一些在Devrs.com声音文档上找到的其他信息。
结束GBSOUND.TXT的工作:
可以访问声音通道的地址是: $Addresses:(描述),(注册速记) $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的问题:
这就引出了一个问题,一个游戏男孩如何同时玩游戏和声音?
他们通常不这样做的样品回放。举个例子,如果你看看黄色精灵精灵,皮卡丘的哭声就是用示例回放来完成的。但是在比赛的同时,没有做任何其他的事情。另一方面,像普通背景音乐这样的事情是使用另一个音频硬件来完成的(对不起,不是很详细的wiki链接)。同样,虽然移动声音效果是用噪声通道(也用于示例回放)完成的,但它们实际上并不是采样的音频。因此,游戏可以继续运行。
https://stackoverflow.com/questions/26185173
复制相似问题