Tag: midi

如何处理多个相同的MIDI USB设备

我的c#应用程序必须使用多个相同的USB MIDI接口,这些接口都来自同一制造商。 在设备管理器中,所有设备都显示相同的驱动程序名称/ CLSID – 只有PNPDeviceID不同。 当我列出所有MIDI输入/输出(使用MIDI-dot-net)时,它们显示如下: ACME-MIDI:端口1 1- ACME-MIDI:端口1 2- ACME-MIDI:端口1 不幸的是,对于同一设备,这些名称并不总是相同。 设备1的端口有时显示为“ACME-MIDI:端口1”,有时显示为“1-ACME:端口1”(例如,它们在重启后更改)。 我用不同的方法试图找到什么名称属于哪个设备(SetupDi,WMI,Win32_PnPSignedDriver,…),但我得到设备ID 或它报告的端口名称,但我无法找到报告的MIDI端口使用设备ID或驱动程序键命名(ACME-MIDI:端口n)。 有什么建议? 更新 我仍在寻找一种解决方案,列出给定端口上MIDI接口的输入/输出端口(例如使用Windows API)。 看起来这很棘手,这就是我为此开始赏金的原因。

如何在c#中将midi转换为wav / mp3?

我开始了一个小项目,包括使用MIDI文件。 我一直在想,是否有任何C#或VB.Net代码可以实现MIDI和WAV文件之间的转换?

如何获得MIDI事件的准确时间

我正在尝试读取一个MIDI文件,我想在C#中确定它的NoteOn事件的确切时间。 我试图使用绝对时间,但输出类似于256632。 这个号码是多少? 这是我的代码行返回时间: (note as NoteOnEvent).AbsoluteTime

从C#中的MIDI端口获取信号

我为我的生日买了一个MIDI键盘。 我找到了一个程序(MidiPiano),它从MIDI输入中获取信号并将其转换为音乐,但我更愿意自己写一个。 我在哪里可以找到执行此类任务的文档? MIDI协议有很好的文档,但不是MIDI端口。 我从CodeProject(Project MIDI和C#MIDI Toolkit)检查了两个项目,但花了很多时间没有接近我的目标。 对项目的引用会很好,但是请只有C#。

使用NAudio从MIDI文件中读取音符

任务是使用NAudio库从MIDI文件中获取所有音符和时间。 到目前为止,我从文件中获取所有笔记,但我无法得到他们的时间。 Note noteOn = new Note(); //custom class Note MidiFile midi = new MidiFile(open.FileName); List tempo = new List(); for (int i = 0; i < midi.Events.Count(); i++) { foreach (MidiEvent note in midi.Events[i]) { TempoEvent tempoE; try { tempoE = (TempoEvent)note; tempo.Add(tempoE); } catch { } if (note.CommandCode == MidiCommandCode.NoteOn) { var t_note […]

使用C#播放MIDI声音的最佳方式

我正在尝试重建一个旧的节拍器应用程序,该应用程序最初使用C ++中的MFC编写,使用C#在.NET编写。 我遇到的一个问题是播放用于表示节拍器“点击”的midi文件。 我在网上发现了一些关于在.NET中播放MIDI文章,但是大多数文章似乎依赖于有人拼凑在一起并提供的自定义库。 我并不反对使用这些,但我宁愿自己理解这是如何完成的,因为它似乎应该是一个非常微不足道的练习。 那么,我错过了什么吗? 或者在.NET应用程序中使用MIDI是否很困难?