是否有任何库、代码片段或类似的东西可以让我在我的 XNA Game Studio 游戏中播放ZX Spectrum .ay 文件?
3 回答
您应该先将 .ay 文件转换为 wav。这里有一个程序 可以做到这一点。它还附带源代码,因此有空闲时间的人可能会通过创建内容导入器和处理器来提供帮助?:-)
如果你想自己编码,你需要:
Zilog Z80A CPU仿真器
做起来并不容易,但有一些免费的 C/C++ 源代码。我用我自己的。
3通道AY 8910/8912 PSG芯片仿真器
这比 CPU 简单得多。它只是音调发生器,但文档不是很好,所以你需要做很多实验。
1 位数字扬声器仿真
*.AY 文件并不总是使用 AY 芯片进行声音输出。有些游戏结合了 AY 和内置扬声器。我现在不确定 AY 是否也支持 covox……但如果是,那么您通常还需要在某些 i8255 芯片上包含 8/16 位单声道/立体声 covox。
键盘仿真
可变硬件架构支持
*.AY 文件存储更多架构的音乐...夏普、Amstard CPC、ZX48、ZX128、克隆之间存在差异...有些晶体频率不同,有些对复制器的通道混合不同,IO 地址也可能不同更不用说内存分页问题了。
声音输出
这取决于目标平台,因为我不使用 XNA,所以不会触及这个主题(因为它已经被回答/接受)
AY 播放器是这样的:
- 首先加载 AY 标头
- 检测目标平台并配置您的模拟器以匹配它
- 将 AY 二进制文件加载到目标内存区域
- 设置寄存器并开始仿真
因此,如果您想编写 AY 播放器,您最终会编写 Z80 模拟器,因为 *.AY 文件是程序而不是录音。由于许多 AY 文件使用扬声器,因此您将需要正确模拟争用模型,否则会出现时序问题,尤其是在扬声器上可以听到...
为了提高质量,您可以应用 FIR 滤波器来模拟许多效果器使用的类似PWM的扬声器控制。
如果您需要 XNA 中的声音,并且想要 XBOX 360 支持,您需要使用支持的文件格式。您最好尝试将 .ay 文件转换为 XNA 原生支持的格式。
如果您只想支持 Windows,则搜索可以播放它们的 .NET 库,如果它在 .NET 中运行,它将在 Windows 上的 XNA 中运行。