装配中的 Windows 音频

Posted

技术标签:

【中文标题】装配中的 Windows 音频【英文标题】:Audio for Windows in Assembly 【发布时间】:2012-09-26 20:22:38 【问题描述】:

我正在考虑在 8086 ASM 中使用 VGA 进行图形制作游戏,但在继续进行任何操作之前,我想确保我可以将音频输入到我的项目中。我怀疑 PC 扬声器是否足够。

我正在寻找一种在 Windows 的 8086 中编程音乐的方法。现代声卡中是否有某种标准可以直接访问,还是必须使用 Windows API?我现在不确定要寻找什么,因此欢迎提出任何建议。

【问题讨论】:

如果您想直接访问硬件,您必须启动到 DOS(或类似系统)或在 DOSBox 等模拟器中运行您的程序。 DOSBox 支持 SoundBlaster 仿真(SoundBlaster 在过去是一种流行的声卡)。如果您以 VGA 和 SoundBlaster 为目标并在 DOSBox 中运行,您的程序应该可以工作。 您的目标是哪个 Windows 版本?至少在较旧的实模式 Windows 版本(最高 3.0)中,您可以直接写入例如。 Sound Blaster 和 Gravis Ultrasound 端口,但我不知道更新的版本。根据 8086 标志,您的目标似乎是从 1.0 到 3.0 的 Windows 版本。从 3.1 开始的 Windows 版本仅在保护模式下运行,因此需要 286 或更新的处理器。如果您指的是通用 Intel x86 架构,请使用 x86 标签。 8086标签特指8086。 这可以工作,但我希望有一种方法可以在现代机器上运行它而无需仿真。所以是的,nrz,我想我在某种程度上确实是指 x86,尽管我将使用 8086(我很确定它会运行,因为它是相同的架构,对吧?)。听上去,如果我想在现代机器上运行 ASM,我真的无法直接在 ASM 中编写音频,对吧? 您也可以在较新的机器上使用 DosBox,它应该可以工作。所以你可以写例如。一个针对 8088/8086、286 或 386 的 DOS 程序集(在 DOS 中使用 HIMEM.SYS,32 位寻址和 32 位寄存器通常使您的生活更轻松,应该在 DosBox 中工作)然后运行它多斯盒。我没有要测试的 Windows 机器,但至少在 Linux DosBox 中,用 asm 编写的 DOS 程序适用于 HIMEM.SYS 环境下的 DOS 工作。在受保护模式的操作系统中,您通常不能直接在用户级应用程序中写入和读取端口。见pdos.csail.mit.edu/6.828/2008/readings/i386/s08_03.htm。 是的。如果您想在没有仿真(或虚拟机)的情况下运行,并且想直接访问硬件,则必须将 PC 引导至 DOS 等古老的操作系统。 【参考方案1】:

与最终融合为 (S)VGA 的显示器不同,声卡从未达到相同的兼容性。有不同的 Sound Blasters、Gravis Ultrasound 等。如今,现代硬件通常与那些不兼容,如果没有适当的 DOS 驱动程序或不知道支持的内存区域、端口、格式和协议,您就无法在 DOS 中将它们编程为 Sound Blaster。

我只能建议为像 DosBox 这样的 PC/DOS 模拟器编写这样的程序,它模拟 Sound Blaster 和 (S)VGA。应该可以的。

或者,您可以编写一个普通的 Windows 程序,使用 Win32 API 进行输入、绘图和声音。

【讨论】:

以上是关于装配中的 Windows 音频的主要内容,如果未能解决你的问题,请参考以下文章

Windows 核心音频 API 中的 ERoles 枚举值代表啥?它们是相互排斥的吗?

WebRTC Windows Native音频中的Core Audio API

WebRTC Windows Native音频中的Core Audio API

在 Windows 7/8/Store C++ 中播放内存中的压缩音频

插孔音频连接套件 + Windows 音频

Windows UWP 应用程序中的 MediaElement 不播放音频