如何使用 DirectMusic API 编译遗留源代码?

问题描述 投票:0回答:1

我有一些使用旧 DirectMusic API 的遗留源代码。源代码取决于

dmusici.h
dmusicc.h
dmusicf.h
头文件,以及其他旧版 DirectX 头文件。

令人惊讶的是,当前适用于 Windows 11 的 Microsoft SDK 包含大多数旧的 DirectX API,包括带有 DirectMusic API Core 的标头

dmusicc.h
。但是缺少
dmusici.h
dmusicf.h
头文件。

是否还有办法编译这些旧的遗留代码,或者我是否必须移植所有缺失的 API,因为它们丢失了?

更令人惊讶的是,2003 年编译的可执行版本在 Windows 11 上仍然运行得很好(除了我的 4k 显示器上的分辨率问题)。这意味着包含 DirectMusic API 实现的实际 DLL 仍然必须位于某个地方。也许这些丢失的头文件已以某种方式与其他头文件合并?虽然,当我搜索包含这些头文件的函数签名之一的文件时,我找不到任何东西。

c++ c windows directx directx-9
1个回答
0
投票

这里的故事又长又乱,所以我会尝试总结一下。

“DirectMusic”品牌的技术实际上是三个不同的东西:

  • DirectMusic“核心”MIDI
  • DirectMusic 性能层
  • DirectMusic 制作工具

DirectMusic 的游戏采用始终受到限制,这确实说明了业界在短时间内将 General MIDI 视为游戏音乐解决方案的情况——Origin 的 George Sanger(又名“胖子”)是 DirectMusic 的大力支持者有很多原因。然而,最终“数字音频”成为游戏音频的事实上的标准,而 MIDI 成为一个非常小众的东西(就像之前的 FM 合成一样)。

同时,音频专业人士利用 DirectMusic“核心”API 来访问带时间戳的 MIDI。曾经有一段时间,Windows Vista 发布时没有任何 DirectMusic API(Beta 2 和 RC 没有),这给专业音频应用程序开发人员带来了很大的焦虑。

最终,DirectMusic“核心”API 已更新为支持 x64,包括软件合成器、Windows SDK 中作为平台核心部分提供的标头,这就是您所看到的。

dmusic.dll
dmsynth.dll
dmloader.dll
dswave.dll
    
dls1.h
dls2.h
dmdls.h
dmerror.h
dmksctrl.h
dmusbuff.h
dmusicc.h
dmusics.h

同时,DirectMusic 性能层仅为 32 位 x86,已完全弃用,并且二进制文件移至仅适用于应用程序兼容性的“Windows 功能”。这就是为什么您在任何现代 SDK 中都找不到这些标头/库,并且文档最多也很少。它也可能存在许多安全问题。

DirectMusic Producer 在此之前很久就已被弃用并删除。

最后一个包含 DirectMusic Performance Layer 标头的 SDK 是 DirectX SDK(2007 年 8 月)。

dmstyle.dll
dmscript.dll
dmcompos.dll
dmband.dll
dmime.dll
    
dmplugin.h
dmusicf.h
dmusici.h
© www.soinside.com 2019 - 2024. All rights reserved.