我正在尝试构建一款简单的软件,以在Unity中连接到Windows上的MIDI输出设备并发送MIDI数据。
为了避免重复造轮子,我开始使用支持.NET 2.0的C# Midi Toolkit CodeProject。
我的问题是,在Unity编辑器中它运行良好,但是在独立的Windows版本中失败了。
以下是基本的连接/播放声音代码:
为了避免重复造轮子,我开始使用支持.NET 2.0的C# Midi Toolkit CodeProject。
我的问题是,在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。 - Iłya Bursov