c# - 无法使用 NAudio 和 teVirtualMIDI 发送 MIDI 音符
问题描述
我正在尝试使用 NAudio 将 Midi Note On 消息发送到 DAW 软件,并使用由 teVirtualMIDI 创建的虚拟端口。我能够在 Ableton Live 10 中看到由 teVirtualMIDI 创建的“设备”,但在 Live 中未能成功接收任何信息。我的声音被调高了,我从来没有看到 Live 的 Midi 仪表移动。代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using NAudio.Midi;
using TobiasErichsen.teVirtualMIDI;
namespace BDBConsole_1_0
{
public class BDBMidiClient
{
public static ConsoleKeyInfo cKi;
public static TeVirtualMIDI port;
static MidiOut midiOut;
int midiOutIndex;
//public static List<MidiEvent> noteEvent;
static void Main(string[] args)
{
CreateMidiPort();
}
public static void CreateMidiPort()
{
TeVirtualMIDI.logging(TeVirtualMIDI.TE_VM_LOGGING_MISC | TeVirtualMIDI.TE_VM_LOGGING_RX | TeVirtualMIDI.TE_VM_LOGGING_TX);
string portName = "BDB Client";
//port = new TeVirtualMIDI(portName, 65535, TeVirtualMIDI.TE_VM_FLAGS_INSTANTIATE_BOTH);
port = new TeVirtualMIDI(portName);
Console.WriteLine("New Midi Port Opened...");
Console.ReadKey();
EnumerateMidiOutDevices();
Thread thread = new Thread(new ThreadStart(SendNextMidiOutMessage));
thread.Start();
//SendNextMidiOutMessage();
}
public static void EnumerateMidiOutDevices()
{
int noOutDevices = MidiOut.NumberOfDevices;
Console.WriteLine("No. of Midi Out Devices..." + noOutDevices);
Console.ReadKey();
string deviceOutOne = MidiOut.DeviceInfo(1).ProductName;
Console.WriteLine("Device One..." + deviceOutOne);
Console.ReadKey();
}
public static void SendNextMidiOutMessage()
{
midiOut = new MidiOut(deviceNo: 0);
//events = new List<MidiEvent>();
int channel = 1;
int note = 64;
var noteOnEvent = new NoteOnEvent(0, channel, note, 127, 1000);
try
{
//while (true) loop here before
do
{
Console.WriteLine("Send Midi Note...");
cKi = Console.ReadKey();
midiOut.Send(noteOnEvent.GetAsShortMessage());
Console.WriteLine("Note Sent...");
cKi = Console.ReadKey();
} while (cKi.Key != ConsoleKey.Escape);
port.shutdown();
Console.WriteLine("Midi Port Closed...");
Console.ReadKey();
}
catch (Exception ex)
{
Console.WriteLine("thread aborting: " + ex.Message);
}
}
}
}
对此的任何帮助将不胜感激!
解决方案
推荐阅读
- rust - 无法使用异步演员
- python - 基于python中的模式从文本文件中提取文本
- ruby-on-rails - 通过更新增加模型属性!方法
- c++ - 无法使用 CXX 支持编译 BerkeleyDB
- javascript - 从收据模板创建 base64 图像
- ruby - 3 和 5 的倍数与方法和严格方案
- sharepoint - Dataverse / PowerApps:是否可以为相关性搜索启用 SharePoint 文档系统表?
- c# - asp.net Web 应用程序处理全局变量
- javascript - 打开深层链接后显示“应用未安装”反馈消息的最佳方式?
- java - 尝试用项目填充 TextView 时 JavaFX 抛出空指针异常