22 #include <QNetworkInterface>
24 #include "netmidioutput.h"
29 static QString DEFAULT_PUBLIC_NAME(QLatin1String(
"MIDI Out"));
31 class NetMIDIOutput::NetMIDIOutputPrivate
37 QHostAddress m_groupAddress;
38 QString m_currentOutput;
39 QStringList m_outputDevices;
40 QStringList m_excludedNames;
41 QNetworkInterface m_iface;
43 NetMIDIOutputPrivate() :
46 m_publicName(DEFAULT_PUBLIC_NAME),
47 m_groupAddress(QHostAddress(STR_ADDRESS))
49 for(
int i=MULTICAST_PORT; i<LAST_PORT; ++i) {
50 m_outputDevices << QString::number(i);
54 ~NetMIDIOutputPrivate()
59 void initialize(QSettings* settings)
62 settings->beginGroup(
"Network");
63 QString ifaceName = settings->value(
"interface", QString()).toString();
64 QString address = settings->value(
"address", STR_ADDRESS).toString();
66 if (!ifaceName.isEmpty()) {
67 m_iface = QNetworkInterface::interfaceFromName(ifaceName);
69 if (!address.isEmpty()) {
70 m_groupAddress.setAddress(address);
75 void open(QString portName)
77 int p = m_outputDevices.indexOf(portName);
80 m_socket =
new QUdpSocket();
81 m_port = MULTICAST_PORT + p;
82 m_currentOutput = portName;
83 if (m_iface.isValid()) {
84 m_socket->setMulticastInterface(m_iface);
94 m_currentOutput.clear();
97 void sendMessage(
int m0)
105 void sendMessage(
int m0,
int m1)
114 void sendMessage(
int m0,
int m1,
int m2)
124 void sendMessage(
const QByteArray& message )
127 qDebug() <<
"udp socket is null";
130 m_socket->writeDatagram(message, m_groupAddress, m_port);
134 NetMIDIOutput::NetMIDIOutput(
QObject *parent) : MIDIOutput(parent),
135 d(new NetMIDIOutputPrivate)
138 NetMIDIOutput::~NetMIDIOutput()
143 void NetMIDIOutput::initialize(QSettings *settings)
145 d->initialize(settings);
148 QString NetMIDIOutput::backendName()
150 return QLatin1String(
"Network");
153 QString NetMIDIOutput::publicName()
155 return d->m_publicName;
158 void NetMIDIOutput::setPublicName(QString name)
160 d->m_publicName = name;
163 QStringList NetMIDIOutput::connections(
bool advanced)
166 return d->m_outputDevices;
169 void NetMIDIOutput::setExcludedConnections(QStringList conns)
174 void NetMIDIOutput::open(QString name)
179 void NetMIDIOutput::close()
184 QString NetMIDIOutput::currentConnection()
186 return d->m_currentOutput;
189 void NetMIDIOutput::sendNoteOff(
int chan,
int note,
int vel)
191 d->sendMessage(MIDI_STATUS_NOTEOFF + chan, note, vel);
194 void NetMIDIOutput::sendNoteOn(
int chan,
int note,
int vel)
196 d->sendMessage(MIDI_STATUS_NOTEON + chan, note, vel);
199 void NetMIDIOutput::sendKeyPressure(
int chan,
int note,
int value)
201 d->sendMessage(MIDI_STATUS_KEYPRESURE + chan, note, value);
204 void NetMIDIOutput::sendController(
int chan,
int control,
int value)
206 d->sendMessage(MIDI_STATUS_CONTROLCHANGE + chan, control, value);
209 void NetMIDIOutput::sendProgram(
int chan,
int program)
211 d->sendMessage(MIDI_STATUS_PROGRAMCHANGE + chan, program);
214 void NetMIDIOutput::sendChannelPressure(
int chan,
int value)
216 d->sendMessage(MIDI_STATUS_CHANNELPRESSURE + chan, value);
219 void NetMIDIOutput::sendPitchBend(
int chan,
int value)
221 d->sendMessage(MIDI_STATUS_PITCHBEND + chan, MIDI_LSB(value), MIDI_MSB(value));
224 void NetMIDIOutput::sendSysex(
const QByteArray &data)
226 d->sendMessage(data);
229 void NetMIDIOutput::sendSystemMsg(
const int status)
231 d->sendMessage(status);
The QObject class is the base class of all Qt objects.