我有这个问题:
我想在C,linux中创建一个midi合成器。由于我没有USB MIDI键盘,因此我考虑使用VMPK之类的虚拟Midi设备。我在一本书中找到了这段代码,该书还解释了如何使用portmidi库:

#include <stdio.h>
#include <portmidi.h>
#include <porttime.h>

int main() {
int cnt,i,dev;
PmError retval;
const PmDeviceInfo *info;
PmEvent msg[32];
PortMidiStream *mstream;
Pm_Initialize();
cnt = Pm_CountDevices();
if(cnt) {
          for(i=0; i < cnt; i++){
              info = Pm_GetDeviceInfo(i);
              if(info->input)
              printf("%d: %s \n", i, info->name);
          }
          printf("choose device: ");
          scanf("%d", &dev);
          Pt_Start(1, NULL, NULL);
          retval = Pm_OpenInput(&mstream, dev, NULL, 512L, NULL,NULL);
          if(retval != pmNoError)
          printf("error: %s \n", Pm_GetErrorText(retval));
          else {
                 while(Pt_Time(NULL) < 60000){
                 if(Pm_Poll(mstream)) {
                     cnt = Pm_Read(mstream, msg, 32);
                     for(i=0; i<cnt; i++) {
                          printf("status:%d, byte1=%d, "
                          "byte2=%d, time=%.3f\n",
                          Pm_MessageStatus(msg[i].message),
                          Pm_MessageData1(msg[i].message),
                          Pm_MessageData2(msg[i].message),
                          msg[i].timestamp/1000.);
                   }
               }
            }
        }
       Pm_Close(mstream);
   }
}

  else printf("No MIDI devices found\n");
 Pm_Terminate();
 return 0;
}

简而言之,一旦程序与MIDI输入设备连接,它就会侦听60条来自它们的所有消息(作为Midi协议(protocol)打印状态字节和两个数据字节)

当我启动VMPK时,该程序似乎将VMPK显示为midi输入,名称为“out”。
Program output
我还检查了“JACK音频连接”程序,以验证VMPK是否作为MIDI输入设备显示出来。
JACK audio output

我不明白为什么当我从VMPK键盘上按下某个键时,我没有从程序中收到任何消息...

我试图更改VMPK配置,但是没有任何更改。

VMPK configuration menu

也许我在VMPK配置中做错了。

欢迎任何帮助。

我预先感谢您的到来

最佳答案

好的,我发现了问题。正如我所说,我设置了VMPK严重不足。如果以此方式设置,则可以检测MIDI输入
linux - Pm_Read()无法读取VMPK输入-LMLPHP

这是programm的输出:
linux - Pm_Read()无法读取VMPK输入-LMLPHP

关于linux - Pm_Read()无法读取VMPK输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62249015/

10-10 16:13