LMMS
Loading...
Searching...
No Matches
juce_MidiDevices.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 The code included in this file is provided under the terms of the ISC license
11 http://www.isc.org/downloads/software-support-policy/isc-license. Permission
12 To use, copy, modify, and/or distribute this software for any purpose with or
13 without fee is hereby granted provided that the above copyright notice and
14 this permission notice appear in all copies.
15
16 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
17 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
18 DISCLAIMED.
19
20 ==============================================================================
21*/
22
23namespace juce
24{
25//==============================================================================
37{
38 MidiDeviceInfo() = default;
39
40 MidiDeviceInfo (const String& deviceName, const String& deviceIdentifier)
41 : name (deviceName), identifier (deviceIdentifier)
42 {
43 }
44
55
62
63 //==============================================================================
64 bool operator== (const MidiDeviceInfo& other) const noexcept { return name == other.name && identifier == other.identifier; }
65 bool operator!= (const MidiDeviceInfo& other) const noexcept { return ! operator== (other); }
66};
67
68class MidiInputCallback;
69
70//==============================================================================
82{
83public:
84 //==============================================================================
92
95
109 static std::unique_ptr<MidiInput> openDevice (const String& deviceIdentifier, MidiInputCallback* callback);
110
111 #if JUCE_LINUX || JUCE_BSD || JUCE_MAC || JUCE_IOS || DOXYGEN
125 static std::unique_ptr<MidiInput> createNewDevice (const String& deviceName, MidiInputCallback* callback);
126 #endif
127
128 //==============================================================================
130 ~MidiInput();
131
139 void start();
140
145 void stop();
146
149
152
155
157 void setName (const String& newName) noexcept { deviceInfo.name = newName; }
158
159 //==============================================================================
160 #ifndef DOXYGEN
161 [[deprecated ("Use getAvailableDevices instead.")]]
162 static StringArray getDevices();
163 [[deprecated ("Use getDefaultDevice instead.")]]
164 static int getDefaultDeviceIndex();
165 [[deprecated ("Use openDevice that takes a device identifier instead.")]]
166 static std::unique_ptr<MidiInput> openDevice (int, MidiInputCallback*);
167 #endif
168
170 class Pimpl;
171
172private:
173 //==============================================================================
174 explicit MidiInput (const String&, const String&);
175
177
178 std::unique_ptr<Pimpl> internal;
179
181};
182
183//==============================================================================
195{
196public:
198 virtual ~MidiInputCallback() = default;
199
213 const MidiMessage& message) = 0;
214
226 const uint8* messageData,
227 int numBytesSoFar,
228 double timestamp)
229 {
230 ignoreUnused (source, messageData, numBytesSoFar, timestamp);
231 }
232};
233
234//==============================================================================
246{
247public:
248 //==============================================================================
256
259
271 static std::unique_ptr<MidiOutput> openDevice (const String& deviceIdentifier);
272
273 #if JUCE_LINUX || JUCE_BSD || JUCE_MAC || JUCE_IOS || DOXYGEN
286 static std::unique_ptr<MidiOutput> createNewDevice (const String& deviceName);
287 #endif
288
289 //==============================================================================
291 ~MidiOutput() override;
292
295
298
301
303 void setName (const String& newName) noexcept { deviceInfo.name = newName; }
304
305 //==============================================================================
307 void sendMessageNow (const MidiMessage& message);
308
310 void sendBlockOfMessagesNow (const MidiBuffer& buffer);
311
329 void sendBlockOfMessages (const MidiBuffer& buffer,
330 double millisecondCounterToStartAt,
331 double samplesPerSecondForBuffer);
332
334 void clearAllPendingMessages();
335
339 void startBackgroundThread();
340
344 void stopBackgroundThread();
345
350
351 //==============================================================================
352 #ifndef DOXYGEN
353 [[deprecated ("Use getAvailableDevices instead.")]]
354 static StringArray getDevices();
355 [[deprecated ("Use getDefaultDevice instead.")]]
356 static int getDefaultDeviceIndex();
357 [[deprecated ("Use openDevice that takes a device identifier instead.")]]
358 static std::unique_ptr<MidiOutput> openDevice (int);
359 #endif
360
362 class Pimpl;
363
364private:
365 //==============================================================================
367 {
368 PendingMessage (const void* data, int len, double timeStamp)
369 : message (data, len, timeStamp)
370 {
371 }
372
375 };
376
377 //==============================================================================
378 explicit MidiOutput (const String&, const String&);
379 void run() override;
380
382
383 std::unique_ptr<Pimpl> internal;
384
387
389};
390
391} // namespace juce
#define noexcept
Definition DistrhoDefines.h:72
#define final
Definition DistrhoDefines.h:74
static void message(int level, const char *fmt,...)
Definition adplugdb.cpp:120
static void run(LV2_Handle instance, uint32_t n_samples)
Definition bindings_test_plugin.c:112
Definition juce_Array.h:56
Definition juce_CriticalSection.h:43
Definition juce_MidiBuffer.h:145
Definition juce_MidiDevices.h:195
virtual ~MidiInputCallback()=default
virtual void handlePartialSysexMessage(MidiInput *source, const uint8 *messageData, int numBytesSoFar, double timestamp)
Definition juce_MidiDevices.h:225
virtual void handleIncomingMidiMessage(MidiInput *source, const MidiMessage &message)=0
Definition juce_MidiDevices.h:82
std::unique_ptr< Pimpl > internal
Definition juce_MidiDevices.h:178
void setName(const String &newName) noexcept
Definition juce_MidiDevices.h:157
MidiInput(const String &, const String &)
Definition juce_linux_Bela.cpp:530
MidiDeviceInfo deviceInfo
Definition juce_MidiDevices.h:176
static Array< MidiDeviceInfo > getAvailableDevices()
Definition juce_linux_Bela.cpp:539
String getName() const noexcept
Definition juce_MidiDevices.h:154
MidiDeviceInfo getDeviceInfo() const noexcept
Definition juce_MidiDevices.h:148
static MidiDeviceInfo getDefaultDevice()
Definition juce_linux_Bela.cpp:544
static std::unique_ptr< MidiInput > openDevice(const String &deviceIdentifier, MidiInputCallback *callback)
Definition juce_linux_Bela.cpp:549
String getIdentifier() const noexcept
Definition juce_MidiDevices.h:151
Definition juce_MidiMessage.h:35
String getName() const noexcept
Definition juce_MidiDevices.h:300
CriticalSection lock
Definition juce_MidiDevices.h:385
static MidiDeviceInfo getDefaultDevice()
Definition juce_linux_Bela.cpp:593
PendingMessage * firstMessage
Definition juce_MidiDevices.h:386
static std::unique_ptr< MidiOutput > openDevice(const String &deviceIdentifier)
Definition juce_linux_Bela.cpp:594
void setName(const String &newName) noexcept
Definition juce_MidiDevices.h:303
String getIdentifier() const noexcept
Definition juce_MidiDevices.h:297
std::unique_ptr< Pimpl > internal
Definition juce_MidiDevices.h:383
MidiDeviceInfo getDeviceInfo() const noexcept
Definition juce_MidiDevices.h:294
bool isBackgroundThreadRunning() const noexcept
Definition juce_MidiDevices.h:349
MidiOutput(const String &, const String &)
Definition juce_MidiDevices.cpp:26
static Array< MidiDeviceInfo > getAvailableDevices()
Definition juce_linux_Bela.cpp:592
MidiDeviceInfo deviceInfo
Definition juce_MidiDevices.h:381
Definition juce_StringArray.h:35
Definition juce_String.h:53
Thread(const String &threadName, size_t threadStackSize=0)
Definition juce_Thread.cpp:26
bool isThreadRunning() const
Definition juce_Thread.cpp:155
virtual ASIOError stop()=0
virtual ASIOError start()=0
JSAMPIMAGE data
Definition jpeglib.h:945
#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)
#define JUCE_API
Definition juce_StandardHeader.h:152
Definition carla_juce.cpp:31
void ignoreUnused(Types &&...) noexcept
Definition juce_MathsFunctions.h:333
unsigned char uint8
Definition juce_MathsFunctions.h:37
Definition juce_MidiDevices.h:37
MidiDeviceInfo(const String &deviceName, const String &deviceIdentifier)
Definition juce_MidiDevices.h:40
String name
Definition juce_MidiDevices.h:54
String identifier
Definition juce_MidiDevices.h:61
MidiDeviceInfo()=default
Definition juce_MidiDevices.h:367
MidiMessage message
Definition juce_MidiDevices.h:373
PendingMessage(const void *data, int len, double timeStamp)
Definition juce_MidiDevices.h:368
PendingMessage * next
Definition juce_MidiDevices.h:374
RECT const char void(* callback)(const char *droppath))) SWELL_API_DEFINE(BOOL
Definition swell-functions.h:1004
#define const
Definition zconf.h:137