C++ - RtMidi 不向输出端口发送任何内容

C++ - RtMidi send nothing to out ports

我正在开发一个使用 RtMidi 与 MIDI 应用程序通信的程序。

编译、打开输入和输出端口、读取输入端口也可以,但是当我用输出端口发送消息时,没有任何反应。 也不例外,终端没有消息,一切似乎都正常,但其他应用程序永远不会收到 MIDI 消息。

$uname
Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt7-1 (2015-03-01) x86_64 GNU/Linux

音频服务器是 ALSA 1.0.28。

$猫/proc/asound/version
高级 Linux 声音架构驱动版本 k3.16.0-4-amd64.

MidiConnection::MidiConnection(QString Name, QObject *Object) : QThread(Object)
{
/*...*/
midiIn = new RtMidiIn(RtMidi::UNSPECIFIED, "Mecanique");
midiIn->openPort(0, Name.toStdString());

midiOut = new RtMidiOut(RtMidi::UNSPECIFIED, "Mecanique");
midiOut->openPort(0, Name.toStdString());
/*...*/
}

void MidiConnection::sendMessage(QVector<unsigned char> message)
{
std::vector<unsigned char> tempVector = message.toStdVector();
midiOut->sendMessage(&tempVector);
}

当我测试时,tempVector 包含正确的字节(关于 MIDI 规范是正确的)(见下面的答案)。

找到解决办法:这段代码完全正确,是给函数sendMessage()的数据有误。执行开始时,矢量中包含大于 127 的值。结果,似乎 ALSA 在没有强行关闭它的情况下不会更多地监听连接。

感谢您的建议!