如何读取MIDI脚部控制器的初始状态
How to read the initial state of a MIDI Foot Controller?
我知道MIDI允许我通过捕捉指示控制更改的MIDI消息来读取MIDI脚部控制器的状态。但是,如果用户还没有触摸/更改控件,该怎么办?我还能读取状态/值吗?怎么做?
这是我使用OSX CoreMDI 捕获Midi消息的代码
void initMidi()
{
MIDIClientRef midiClient;
MIDIPortRef inputPort;
OSStatus status;
MIDIEndpointRef src;
status = MIDIClientCreate(CFSTR("testing"), NULL, NULL, &midiClient);
if (status != noErr)
NSLog(@"Error creating MIDI client: %d", status);
status = MIDIInputPortCreate(midiClient, CFSTR("Input"), midiInputCallback, NULL, &inputPort);
if (status != noErr)
NSLog(@"Error creating MIDI input port: %d", status);
ItemCount numOfDevices = MIDIGetNumberOfDevices();
// just try to connect to every device
for (ItemCount i = 0; i < numOfDevices; i++) {
src = MIDIGetSource(i);
status = MIDIPortConnectSource(inputPort, src, NULL);
}
}
void midiInputCallback(const MIDIPacketList *list,
void *procRef,
void *srcRef)
{
for (UInt32 i = 0; i < list->numPackets; i++) {
const MIDIPacket *packet = &list->packet[i];
for (UInt16 j = 0, size = 0; j < packet->length; j += size) {
UInt8 status = packet->data[j];
if (status < 0xC0) size = 3;
else if (status < 0xE0) size = 2;
else if (status < 0xF0) size = 3;
else if (status < 0xF3) size = 3;
else if (status == 0xF3) size = 2;
else size = 1;
switch (status & 0xF0) {
case 0xb0:
NSLog(@"MIDI Control Changed: %d %d", packet->data[j + 1], packet->data[j + 2]);
break;
}
}
}
}
如果您没有重置设备,也没有更改控件,那么您的程序在收到消息之前不会知道控件的状态。
某些设备可能具有特定于供应商的命令,用于读取控件的当前状态或转储整个状态。
简短的答案是-否-在事件发生之前,您无法知道
如果您将IN和OUT连接到允许通过SysEx消息(特定于制造商)进行询问的控制器,则其他答案是正确的
为了更有帮助:所有控制器(您想要使用)的默认状态应在启动时为OFF例如,俯仰弯曲=居中,调制=零,维持=关闭等…
自20世纪80年代以来,这一直是比赛的状态,所以这不是一个真正的问题如果你在启动应用程序之前(踩在踏板上),你将在发布的那一刻同步
祝好运
相关文章:
- 对于四轴飞行器,PID中I控制器的理想值应该是多少
- 如何集成 HID USB 控制器?
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 更高效地在微控制器上对C++进行基准测试
- 如何修复 Arduino LED 串控制器的代码?
- 如何在 Windows 中通过 SSL 端口枚举域控制器
- 如何使用 c++ 在命令行中创建一个简单的字符控制器?
- 为什么玩家控制器"own"偏航俯仰和滚动,但角色"owns"它的位置?
- 在虚幻引擎中使用运动控制器组件,C++而不是蓝图
- 哗啦��错误:无法识别任何一组可以驱动指定关节的控制器
- 微控制器的首次 gcc 链接器脚本编译但不运行
- 对控制器类的 WorkerScript 访问
- SDL 2 无法打开控制器,但已识别操纵杆
- 将信号从工作线程类连接到控制器类 - QThreads
- 在OMNet上实现SDN控制器
- SDL2_pollevent() 控制器 dpad 连续保持?
- C++微控制器全局类/辛格尔顿?
- 工作器/控制器多线程和接口类
- 我在微控制器STM32F373发现中点亮LED的问题
- 如何读取MIDI脚部控制器的初始状态