bool PortMidiDriver::init() { inputId = getDeviceIn(preferences.getString(PREF_IO_PORTMIDI_INPUTDEVICE)); if (inputId == -1) inputId = Pm_GetDefaultInputDeviceID(); if (inputId == pmNoDevice) return false; outputId = getDeviceOut(preferences.getString(PREF_IO_PORTMIDI_OUTPUTDEVICE)); // Note: allow init even if outputId == pmNoDevice, since input is more important than output. static const int DRIVER_INFO = 0; static const int TIME_INFO = 0; Pt_Start(20, 0, 0); // timer started, 20 millisecond accuracy PmError error = Pm_OpenInput(&inputStream, inputId, (void*)DRIVER_INFO, preferences.getInt(PREF_IO_PORTMIDI_INPUTBUFFERCOUNT), ((PmTimeProcPtr) Pt_Time), (void*)TIME_INFO); if (error != pmNoError) { const char* p = Pm_GetErrorText(error); qDebug("PortMidi: open input (id=%d) failed: %s", int(inputId), p); Pt_Stop(); return false; } Pm_SetFilter(inputStream, PM_FILT_ACTIVE | PM_FILT_CLOCK | PM_FILT_SYSEX); PmEvent buffer[1]; while (Pm_Poll(inputStream)) Pm_Read(inputStream, buffer, 1); if (outputId != pmNoDevice) { error = Pm_OpenOutput(&outputStream, outputId, (void*)DRIVER_INFO, preferences.getInt(PREF_IO_PORTMIDI_OUTPUTBUFFERCOUNT), ((PmTimeProcPtr) Pt_Time), (void*)TIME_INFO, preferences.getInt(PREF_IO_PORTMIDI_OUTPUTLATENCYMILLISECONDS)); if (error != pmNoError) { const char* p = Pm_GetErrorText(error); qDebug("PortMidi: open output (id=%d) failed: %s", int(outputId), p); Pt_Stop(); return false; } } timer = new QTimer(); timer->setInterval(20); // 20 msec timer->start(); timer->connect(timer, SIGNAL(timeout()), seq, SLOT(midiInputReady())); return true; }
bool PortMidiDriver::init() { inputId = getDeviceIn(preferences.portMidiInput); if(inputId == -1) inputId = Pm_GetDefaultInputDeviceID(); outputId = Pm_GetDefaultOutputDeviceID(); if (inputId == pmNoDevice) return false; static const int INPUT_BUFFER_SIZE = 100; static const int DRIVER_INFO = 0; static const int TIME_INFO = 0; Pt_Start(20, 0, 0); // timer started, 20 millisecond accuracy PmError error = Pm_OpenInput(&inputStream, inputId, (void*)DRIVER_INFO, INPUT_BUFFER_SIZE, ((long (*)(void*)) Pt_Time), (void*)TIME_INFO); if (error != pmNoError) { const char* p = Pm_GetErrorText(error); qDebug("PortMidi: open input (id=%d) failed: %s", int(inputId), p); Pt_Stop(); return false; } Pm_SetFilter(inputStream, PM_FILT_ACTIVE | PM_FILT_CLOCK | PM_FILT_SYSEX); PmEvent buffer[1]; while (Pm_Poll(inputStream)) Pm_Read(inputStream, buffer, 1); timer = new QTimer(); timer->setInterval(20); // 20 msec timer->start(); timer->connect(timer, SIGNAL(timeout()), seq, SLOT(midiInputReady())); return true; }