LMMS
Loading...
Searching...
No Matches
MidiJack.h
Go to the documentation of this file.
1/*
2 * MidiJack.h - MIDI client for Jack
3 *
4 * Copyright (c) 2015 Shane Ambler <develop/at/shaneware.biz>
5 *
6 * This file is part of LMMS - https://lmms.io
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public
19 * License along with this program (see COPYING); if not, write to the
20 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301 USA.
22 *
23 */
24
25#ifndef LMMS_MIDI_JACK_H
26#define LMMS_MIDI_JACK_H
27
28#include "lmmsconfig.h"
29
30#ifdef LMMS_HAVE_JACK
31#ifndef LMMS_HAVE_WEAKJACK
32#include <jack/jack.h>
33#include <jack/midiport.h>
34#else
35#include <weak_libjack.h>
36#endif
37
38#include <QThread>
39
40#include "MidiClient.h"
41
42
43namespace lmms
44{
45
46constexpr size_t JACK_MIDI_BUFFER_MAX = 64; /* events */
47
48class AudioJack;
49
50class MidiJack : public QThread, public MidiClientRaw
51{
52 Q_OBJECT
53public:
54 MidiJack();
55 ~MidiJack() override;
56
58
59 static QString probeDevice();
60
61 inline static QString name()
62 {
63 return( QT_TRANSLATE_NOOP( "MidiSetupWidget",
64 "Jack-MIDI" ) );
65 }
66
67 void JackMidiWrite(jack_nframes_t nframes);
68 void JackMidiRead(jack_nframes_t nframes);
69
70
71 inline static QString configSection()
72 {
73 return "MidiJack";
74 }
75
76
77protected:
78 void sendByte( const unsigned char c ) override;
79 void run() override;
80
81
82private:
85 jack_port_t *m_input_port;
86 jack_port_t *m_output_port;
88
90 void lock();
91 void unlock();
92
93 void getPortInfo( const QString& sPortName, int& nClient, int& nPort );
94
95 volatile bool m_quit;
96
97};
98
99
100} // namespace lmms
101
102#endif // LMMS_HAVE_JACK
103
104#endif // LMMS_MIDI_JACK_H
Definition AudioJack.h:60
MidiClientRaw()=default
static QString name()
Definition MidiJack.h:61
~MidiJack() override
Definition MidiJack.cpp:119
void sendByte(const unsigned char c) override
Definition MidiJack.cpp:212
uint8_t m_jack_buffer[JACK_MIDI_BUFFER_MAX *4]
Definition MidiJack.h:87
jack_port_t * m_output_port
Definition MidiJack.h:86
void JackMidiWrite(jack_nframes_t nframes)
Definition MidiJack.cpp:218
void run() override
Definition MidiJack.cpp:223
jack_client_t * jackClient()
Definition MidiJack.cpp:158
static QString configSection()
Definition MidiJack.h:71
void JackMidiOutEvent(uint8_t *buf, uint8_t len)
void JackMidiRead(jack_nframes_t nframes)
Definition MidiJack.cpp:180
jack_port_t * m_input_port
Definition MidiJack.h:85
AudioJack * m_jackAudio
Definition MidiJack.h:83
jack_client_t * m_jackClient
Definition MidiJack.h:84
volatile bool m_quit
Definition MidiJack.h:95
MidiJack()
Definition MidiJack.cpp:64
void getPortInfo(const QString &sPortName, int &nClient, int &nPort)
static QString probeDevice()
Definition MidiJack.cpp:169
struct _jack_client jack_client_t
Definition jack-enum-test-func.cpp:69
uint32_t jack_nframes_t
Definition jack-enum-test-func.cpp:38
unsigned char uint8_t
Definition mid.cpp:98
Definition AudioAlsa.cpp:35
constexpr size_t JACK_MIDI_BUFFER_MAX
Definition MidiJack.h:46
return c
Definition crypt.c:175