26 #include <QMidiSystemNotifier> 39 , pCurrentInputDevice(nullptr)
40 , pCurrentOutputDevice(nullptr)
45 auto notifier =
new QMidiSystemNotifier(
this);
80 qml,SLOT(setQmlMidiInputDeviceNames(QVariant)));
82 qml,SLOT(setQmlMidiOutputDeviceNames(QVariant)));
85 connect(qml,SIGNAL(onSelectedMidiInputDeviceNameChanged(QString)),
87 connect(qml,SIGNAL(onSelectedMidiOutputDeviceNameChanged(QString)),
92 qml,SLOT(setQmlSelectedMidiInputDeviceName(QVariant)));
94 qml,SLOT(setQmlSelectedMidiOutputDeviceName(QVariant)));
97 connect(qml,SIGNAL(onAutomaticMidiInputModeChanged(
bool)),
99 connect(qml,SIGNAL(onAutomaticMidiInputModeChanged(
bool)),
100 pConnector,SLOT(setAutoConnectToInput(
bool)));
101 connect(qml,SIGNAL(onAutomaticMidiOutputModeChanged(
bool)),
103 connect(qml,SIGNAL(onAutomaticMidiOutputModeChanged(
bool)),
104 pConnector,SLOT(setAutoConnectToOutput(
bool)));
132 auto hexadec = [](
int i) {
133 QString s=QString(
"%1").arg(i , 0, 16);
134 if (s.length() == 1) s.prepend(
'0');
138 qDebug() <<
"Midi send " << hexadec(event.byte0())
139 << hexadec(event.byte1()) << hexadec(event.byte2());
154 LOGMESSAGE <<
"New Midi input device attached";
170 LOGMESSAGE <<
"New Midi output device attached";
219 QString devname = device->deviceInfo().deviceName();
220 LOGMESSAGE <<
"New Midi Input device connected" << devname;
237 QString devname = device->deviceInfo().deviceName();
238 LOGMESSAGE <<
"New Midi Output device connected" << devname;
255 LOGMESSAGE <<
"Midi Input device disconnected" << info.deviceName();
271 LOGMESSAGE <<
"Midi Output device disconnected" << info.deviceName();
286 QString devName = dev->deviceInfo().deviceName();
287 LOGMESSAGE <<
"Automatically connected to Input" << devName;
288 auto input = qobject_cast<
const QMidiInput*>(dev);
304 QString devName = dev->deviceInfo().deviceName();
305 LOGMESSAGE <<
"Automatically connected to Output" << devName;
306 auto output = qobject_cast<
const QMidiOutput*>(dev);
323 LOGMESSAGE <<
"Automatically disconnected from" << info.deviceName() << mode;
343 QString out(QString::fromLatin1(
"Midi message received. "));
345 out += QString(
"Cmd: %1").arg(m[0]);
347 for (
int i = 1; i < m.size(); ++i) {
348 out += QString(
", Byte%1: %2").arg(QString::number(i), QString::number(m[i]));
407 LOGMESSAGE <<
"Selected input device" << deviceName;
409 auto devices = QMidiDeviceInfo::availableDevices(QMidi::MidiInput);
410 QMidiDeviceInfo info;
411 for (QMidiDeviceInfo &dev : devices)
412 if (dev.deviceName()==deviceName) info=dev;
441 LOGMESSAGE <<
"Selected output device" << deviceName;
443 auto devices = QMidiDeviceInfo::availableDevices(QMidi::MidiOutput);
444 QMidiDeviceInfo info;
445 for (QMidiDeviceInfo &dev : devices)
446 if (dev.deviceName()==deviceName) info=dev;
472 LOGMESSAGE <<
"Setting automatic Input mode =" << autoconnect;
487 LOGMESSAGE <<
"Setting automatic Output mode =" << autoconnect;
502 auto devices = QMidiDeviceInfo::availableDevices(mode);
503 QStringList availableDevices;
504 for (
auto &dev : devices) availableDevices.append(dev.deviceName());
505 availableDevices.prepend(tr(
"Inactive"));
506 availableDevices.prepend(tr(
"[Choose Midi device]"));
507 LOGSTATUS <<
"Update device names:" << availableDevices;
QMidiAutoConnector * pConnector
void outputDeviceDeleted(QMidiDeviceInfo info)
Private slot: Output device deleted (disconnected)
void setModuleName(const QString &name)
Specify the name of the class-specific module.
int getVerbosity()
Get the actual verbosity level.
void disconnectInput()
Disconnect current input device.
void onCurrentOutputDeviceChanged(QVariant device)
void onInputDevicesChanged(QVariant devices)
QMidiOutput * pCurrentOutputDevice
bool init(QObject *qml)
Initialize the Midi wrapper and connect it with Qml.
QMidiInput * pCurrentInputDevice
void outputDeviceCreated(const QMidiOutput *device)
Private slot: Output device created (connected)
void outputDeviceAttached(const QMidiDeviceInfo info)
Private slot: Output device attached.
void acOutputDeviceCreated(const QMidiDevice *dev)
Private slot: Automatically connected output device created.
void receiveMessage(const QMidiMessage &m)
Private slot: Receiving a Midi message from an external Midi device.
void inputDeviceAttached(const QMidiDeviceInfo info)
Private slot: Input device attached.
void inputDeviceDetached(const QMidiDeviceInfo info)
Private slot: Input device detached.
void outputDeviceDetached(const QMidiDeviceInfo info)
Private slot: Output device detached.
void selectInputDevice(QString deviceName)
Select the input device from a given device name.
void setAutomaticInputMode(bool autoconnect)
Midi::setAutomaticInputMode.
void sendMidiMessage(const QMidiMessage &event)
Send a Midi message to the output device.
void acInputDeviceCreated(const QMidiDevice *dev)
Private slot: Automatically connected input device created.
void sendMidiEventToOutputDevice(const QMidiMessage &event)
void updateAvailableDevices(QMidi::Mode mode)
Update the shown available devices.
void setAutomaticOutputMode(bool autoconnect)
Set automatic output mode.
void acDeviceDeleted(const QMidiDeviceInfo info, QMidi::Mode mode)
Private slot: Automatically connected device deleted (disconnected)
void onOutputDevicesChanged(QVariant devices)
void onCurrentInputDeviceChanged(QVariant device)
Midi()
Constructor without functionality.
void inputDeviceDeleted(QMidiDeviceInfo info)
Private slot: Input device deleted (disconnected)
void inputDeviceCreated(const QMidiInput *device)
Private slot: Input device created (connected)
void disconnectOutput()
Disconnect current output device.
void receivedMidiMessage(const QMidiMessage &event)
void selectOutputDevice(QString deviceName)
Select the output device from a given device name.