【发布时间】:2018-08-07 22:27:41
【问题描述】:
我正在尝试构建简单的软件以在 Unity 中连接到 Windows 上的 MIDI 输出设备并发送 MIDI 数据。
为了避免重新发明轮子,我首先在支持 .NET 2.0 的 CodeProject 上使用 C# Midi Toolkit。
我遇到的问题是它在 Unity 编辑器中运行良好,但随后 在独立 Windows 构建中失败。
这是基本的连接/播放声音代码:
// Log devices
int deviceCount = OutputDevice.DeviceCount;
for (int i = 0; i < deviceCount; i++)
{
Debug.Log(string.Format("Detected MIDI Device with ID {0}:{1}", i, OutputDevice.GetDeviceCapabilities(i).name));
}
deviceID = 1;
Debug.Log(string.Format("Connected to {0}", deviceID));
// Connect to device
device = new OutputDevice(deviceID);
// Play Middle C
device.Send(new ChannelMessage(ChannelCommand.NoteOn, 0, note, 127));
在独立构建中我得到以下异常:
OutputDeviceException: 指定的设备句柄无效。
我查看了源代码并注意到该库正在使用 Win32 处理 winmm.dll,我认为这可能与它有关,但不确定从这里去哪里。
谁能提供有关如何解决此问题的任何见解?我可能会看看专门为 Unity 构建的替代方案,但我有兴趣了解为什么这样的东西一开始就行不通。
【问题讨论】:
-
你为什么用
deviceID = 1看起来例子用的是0 -
0 是 Microsoft GS Wavetable Synth,我正在尝试连接到设备 ID 为 1 的单独环回 MIDI 接口。使用您看到的日志记录代码确认独立和编辑器中的情况在顶部
-
哪个语句失败?
-
OutputDevice 的构造函数,这是我正在使用的库也尝试连接到提供的设备 ID 的地方
-
你试过使用NAudio吗?