gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:25:38 27 4
gpt4 key购买 nike

我正在为 GBDK 中的 GameBoy 制作游戏,我正在尝试为游戏添加声音。 GBDK 有一个函数可以播放一组值的声音,唯一的问题是当它播放声音时脚本的其余部分会卡住。有没有办法让它们同时运行?

最佳答案

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


使用“正常”音效

这是一种 WIP - 我对它不太熟悉,但它应该能让你入门。

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

处理 GBSOUND.TXT:

The addresses through which the sound channels can be accessed are:
$Addresses: (Description), (Register shorthand)
$FF10 -- $FF14: Channel 1, Referred to as NR10-NR14
$FF15 is unused, was probably going to be a sweep reg for channel 2
originally
$FF16 -- $FF19: Channel 2, Referred to as NR21-NR24
$FF1A -- $FF1E: Channel 3, Referred to as NR30-NR34
$FF1F is unused, was probably going to be a sweep reg for channel 4
originally
$FF20 -- $FF23: Channel 4, Referred to as NR41-NR44
$FF24 controls the Vin status and volume, Referred to as NR50
$FF25 selects which output each channel goes to, Referred to as NR51
$FF26 is the status register, and also controls the sound circuit's power.
Referred to as NR52
$FF27 -- $FF2F are unused.
$FF30 -- $FF3F is the load register space for the 4-bit samples for channel
3

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

此外,请尝试查看示例程序 sound.c,不幸的是,它无法为我编译。我可能会对其进行编辑以包含更多信息。


回答@franklin的问题:

Which begs the question, how does a gameboy play both the game and sound at the same time?

他们通常不会通过样本回放来做到这一点。例如,如果您看 Pokémon Yellow,皮卡丘的哭声是通过样本回放完成的。但是在播放时,没有其他任何操作。另一方面,正常的背景音乐之类的事情是使用另一个 audio hardware 完成的。 (抱歉,不是很详细的 wiki 链接)。同样,虽然移动音效通过噪声 channel 完成的(也用于采样回放),但它们实际上并不是采样音频。因此,游戏可以继续运行。

关于c - 在 GBDK c 中使用采样音频播放时如何运行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26185173/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com