首页 > 解决方案 > RtMidiIn 在发行版 C++ 中找不到端口

问题描述

我找不到相关的解决方案,所以我最后在这里发布。我有一个非常小的程序,它使用 RTMidi 库将控制器键映射为热键。在调试模式下一切正常,发布应用程序也不会给我任何错误,但 RTMidiIn 类在发布版本中找不到任何端口。

这是我的代码

MidiToMacro::MidiToMacro(QWidget *parent)
: QMainWindow(parent)
{
    m_ui.setupUi(this); 
    RtMidiIn *midiin;
    try 
    {
        midiin = new RtMidiIn(RtMidi::WINDOWS_MM);
    }
catch (RtMidiError &error) {
    m_ui.uiLog->append("midiin initiation failed!");
    error.printMessage();
    exit(EXIT_FAILURE);
}

unsigned int nPorts = midiin->getPortCount();
QString inputCount = QString::number(nPorts);
m_ui.uiLog->append("There are " + inputCount + " MIDI input sources 
available.");
std::string portName;
std::string akai = "Akai MPK49 2";
opened = 1000;

for (unsigned int i = 0; i < nPorts;++i) 
{
    try 
    {
        portName = midiin->getPortName(i);
        if (portName == akai)
        {
            midiin->openPort(i);
            midiin->setCallback(&mycallback, this);
            opened = i;
        }
    }

    catch (RtMidiError &error)
    {
        //not printing an error
        error.printMessage();
        delete midiin;
    }

    QString portnumber = QString::number(i);
    m_ui.uiLog->append("  Input Port #" + portnumber + ": " + QString::fromStdString(portName));
}

if (opened == 1000) 
{
    m_ui.uiLog->append("Error finding Akai Controller!");
}

标签: c++visual-studio

解决方案


忘记在发布的预处理器定义中定义 WINDOWS_MM。


推荐阅读