问题标签 [directmusic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
786 浏览

midi - 使用 DirectMusic 弹奏单个音符

我正在开发的应用程序中使用 DirectMusic 进行 MIDI 播放。有谁知道是否可以使用 DirectMusic 播放单个音符?目前,我正在将表示整个“歌曲”的内存数据结构转换为 MIDI 缓冲区并通过 DirectMusic 播放。我希望能够播放单个音符,而不必为其生成 MIDI 缓冲区、加载它并播放它。DirectMusic甚至可以实现这种类型的事情吗?

这是我第一次进入 DirectMusic 世界,所以希望我不会太不了解它的功能......

0 投票
2 回答
774 浏览

windows - 使用 MME 和 DirectMusic 时的 ANSI 或 OEM 代码页?

我注意到,当从 MME 读取 MIDI 端口名称时,这些名称是使用 ANSI 代码页编码的多字节字符串,我的应用程序默认使用它。从 DirectMusic 驱动程序接收这些名称时,这些名称是使用 OEM 代码页编码的宽字符串。有关代码页的快速复习,请参阅Raymond Chen 的这篇文章。

在我的德语系统上,这意味着当使用当前代码页(原来是 ANSI 代码页)时,我从 MME 获得“Audiogerät”,从 DirectMusic 获得“Audioger ö t”,后者是错误的。当我将该姓氏视为 OEM 编码时,此问题将得到解决。

那么我怎么知道使用哪个代码页来解码这些名称呢?为什么来自 DirectMusic 的名称编码不同?它来自USB驱动程序吗?COM 框架?直接音乐?在读取我的 MIDI 端口名称时,如何确定使用哪个代码页?

有关信息:

  • 我使用MultiByteToWideChar()andWideCharToMultiByte()函数来执行转换,并使用CP_ACPandCP_OEMCP作为要使用的代码页的参数。
  • 我用来midiInGetDeviceCaps()从 MME 子系统获取 MIDI 端口信息...
  • ...并MIDIINCAPS.szPname使用CP_ACP(ANSI)代码页进行转换。
  • 我用来IID_IDirectMusic8::EnumPort()从 DirectMusic 获取端口信息...
  • ...并DMUS_PORTCAPS.wszDescription使用CP_OEMCP代码页进行转换。
0 投票
1 回答
2190 浏览

c++ - DirectMusic,包括

问题是:当我包含<dmusici.h>时,我收到以下错误:

一个例子:

0 投票
0 回答
46 浏览

directx - DirectMusic 在 2 个频道组上同时播放两个 MIdis

有人可以提供示例代码,说明如何在一个 Performance、一个 MusicPort、加载和播放两个 midis(midi 1 中的通道 0-15 并使用另一个通道组播放 midi 2 的 0-15?)我在音乐端口上尝试了 AssignPChannelBlock 和 SetPChannel段,但它会播放第一个 midi 片刻,然后才播放第二个。我找不到任何例子,不幸的是它对我不起作用。

基本上在我的测试中我做了(跳过了一些步骤,但是是默认的)

端口是微软合成器

...

...

...

...

0 投票
1 回答
101 浏览

audio - 如何将使用 DirectMusic 在内部播放 MIDI 的旧游戏转换为将原始 MIDI 输出到默认设备?

我有一个播放 MIDI 文件的旧游戏,其中包含以下内容:

无论用户的配置如何,这都会导致 MS GS Wavetable Synth + 混响。我需要能够将正确的原始 MIDI 输出到默认的 MIDI 设备,对于一些精明的用户来说,它是像 VirtualMidiSynth 或 FluidSynth 这样的软合成器、MT-32 仿真器、OPL3 仿真器,甚至是具有它自己的机载样本,例如真正的 MT-32。在应用程序中选择设备不是必需的——我宁愿让它选择默认/#0 MIDI 设备并将原始 MIDI 发送给它。.mid 文件本身是标准的,可以在其他媒体播放器中完美播放,这些播放器将原始 MIDI 输出到用户选择的设备或默认/#0 设备。