LMMS
Loading...
Searching...
No Matches
juce_AudioDeviceManager.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
26//==============================================================================
67{
68public:
69 //==============================================================================
77
79 ~AudioDeviceManager() override;
80
81 //==============================================================================
91 {
98
103
109 double sampleRate = 0;
110
115 int bufferSize = 0;
116
123
129
136
142
143 bool operator== (const AudioDeviceSetup&) const;
144 bool operator!= (const AudioDeviceSetup&) const;
145 };
146
147
148 //==============================================================================
182 String initialise (int numInputChannelsNeeded,
183 int numOutputChannelsNeeded,
184 const XmlElement* savedState,
185 bool selectDefaultDeviceOnFailure,
186 const String& preferredDefaultDeviceName = String(),
187 const AudioDeviceSetup* preferredSetupOptions = nullptr);
188
190 String initialiseWithDefaultDevices (int numInputChannelsNeeded,
191 int numOutputChannelsNeeded);
192
201 std::unique_ptr<XmlElement> createStateXml() const;
202
203 //==============================================================================
208
215
239 String setAudioDeviceSetup (const AudioDeviceSetup& newSetup, bool treatAsChosenDevice);
240
241
244
249
254 AudioIODeviceType* getCurrentDeviceTypeObject() const;
255
263 void setCurrentAudioDeviceType (const String& type, bool treatAsChosenDevice);
264
269 void closeAudioDevice();
270
279 void restartLastAudioDevice();
280
281 //==============================================================================
294 void addAudioCallback (AudioIODeviceCallback* newCallback);
295
303 void removeAudioCallback (AudioIODeviceCallback* callback);
304
305 //==============================================================================
310 double getCpuUsage() const;
311
312 //==============================================================================
332 void setMidiInputDeviceEnabled (const String& deviceIdentifier, bool enabled);
333
338 bool isMidiInputDeviceEnabled (const String& deviceIdentifier) const;
339
350 void addMidiInputDeviceCallback (const String& deviceIdentifier,
352
354 void removeMidiInputDeviceCallback (const String& deviceIdentifier,
356
357 //==============================================================================
370 void setDefaultMidiOutputDevice (const String& deviceIdentifier);
371
377
384
385 //==============================================================================
387 const OwnedArray<AudioIODeviceType>& getAvailableDeviceTypes();
388
397 virtual void createAudioDeviceTypes (OwnedArray<AudioIODeviceType>& types);
398
400 void addAudioDeviceType (std::unique_ptr<AudioIODeviceType> newDeviceType);
401
403 void removeAudioDeviceType (AudioIODeviceType* deviceTypeToRemove);
404
405 //==============================================================================
411 void playTestSound();
412
413 //==============================================================================
424 {
425 LevelMeter() noexcept;
426 double getCurrentLevel() const noexcept;
427
429
430 private:
431 friend class AudioDeviceManager;
432
434 void updateLevel (const float* const*, int numChannels, int numSamples) noexcept;
435 };
436
443
450
451 //==============================================================================
457
463
464 //==============================================================================
471 int getXRunCount() const noexcept;
472
473 //==============================================================================
474 #ifndef DOXYGEN
475 [[deprecated ("Use setMidiInputDeviceEnabled instead.")]]
476 void setMidiInputEnabled (const String&, bool);
477 [[deprecated ("Use isMidiInputDeviceEnabled instead.")]]
478 bool isMidiInputEnabled (const String&) const;
479 [[deprecated ("Use addMidiInputDeviceCallback instead.")]]
480 void addMidiInputCallback (const String&, MidiInputCallback*);
481 [[deprecated ("Use removeMidiInputDeviceCallback instead.")]]
482 void removeMidiInputCallback (const String&, MidiInputCallback*);
483 [[deprecated ("Use setDefaultMidiOutputDevice instead.")]]
484 void setDefaultMidiOutput (const String&);
485 [[deprecated ("Use getDefaultMidiOutputIdentifier instead.")]]
487 #endif
488
489private:
490 //==============================================================================
493
495 std::unique_ptr<AudioIODevice> currentAudioDevice;
499 std::unique_ptr<XmlElement> lastExplicitSettings;
500 mutable bool listNeedsScanning = true;
502
508
510 std::vector<std::unique_ptr<MidiInput>> enabledMidiInputs;
512
514 std::unique_ptr<MidiOutput> defaultMidiOutput;
516
517 std::unique_ptr<AudioBuffer<float>> testSound;
519
521
524
525 //==============================================================================
526 class CallbackHandler;
527 std::unique_ptr<CallbackHandler> callbackHandler;
528
529 void audioDeviceIOCallbackInt (const float** inputChannelData,
530 int totalNumInputChannels,
531 float** outputChannelData,
532 int totalNumOutputChannels,
533 int numSamples,
534 const AudioIODeviceCallbackContext& context);
537 void audioDeviceErrorInt (const String&);
540
541 String restartDevice (int blockSizeToUse, double sampleRateToUse,
542 const BigInteger& ins, const BigInteger& outs);
543 void stopDevice();
544
545 void updateXml();
546
547 void updateCurrentSetup();
549 void scanDevicesIfNeeded();
550 void deleteCurrentDevice();
551 double chooseBestSampleRate (double preferred) const;
552 int chooseBestBufferSize (int preferred) const;
554 String initialiseDefault (const String& preferredDefaultDeviceName, const AudioDeviceSetup*);
555 String initialiseFromXML (const XmlElement&, bool selectDefaultDeviceOnFailure,
556 const String& preferredDefaultDeviceName, const AudioDeviceSetup*);
557
558 AudioIODeviceType* findType (const String& inputName, const String& outputName);
559 AudioIODeviceType* findType (const String& typeName);
561
563};
564
565} // namespace juce
#define noexcept
Definition DistrhoDefines.h:72
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
Definition juce_Array.h:56
Definition juce_AudioSampleBuffer.h:34
const String & getDefaultMidiOutputName() const noexcept
Definition juce_AudioDeviceManager.h:486
MidiOutput * getDefaultMidiOutput() const noexcept
Definition juce_AudioDeviceManager.h:383
LevelMeter::Ptr getInputLevelGetter() noexcept
Definition juce_AudioDeviceManager.h:442
CriticalSection & getMidiCallbackLock() noexcept
Definition juce_AudioDeviceManager.h:462
AudioDeviceManager()
Definition juce_AudioDeviceManager.cpp:113
String preferredDeviceName
Definition juce_AudioDeviceManager.h:498
int numInputChansNeeded
Definition juce_AudioDeviceManager.h:497
void handleIncomingMidiMessageInt(MidiInput *, const MidiMessage &)
Definition juce_AudioDeviceManager.cpp:1074
Array< MidiDeviceInfo > midiDeviceInfosFromXml
Definition juce_AudioDeviceManager.h:509
AudioDeviceSetup getAudioDeviceSetup() const
Definition juce_AudioDeviceManager.cpp:563
void insertDefaultDeviceNames(AudioDeviceSetup &) const
Definition juce_AudioDeviceManager.cpp:503
const String & getDefaultMidiOutputIdentifier() const noexcept
Definition juce_AudioDeviceManager.h:376
std::vector< std::unique_ptr< MidiInput > > enabledMidiInputs
Definition juce_AudioDeviceManager.h:510
String restartDevice(int blockSizeToUse, double sampleRateToUse, const BigInteger &ins, const BigInteger &outs)
void createDeviceTypesIfNeeded()
Definition juce_AudioDeviceManager.cpp:125
void audioDeviceStoppedInt()
Definition juce_AudioDeviceManager.cpp:990
String setAudioDeviceSetup(const AudioDeviceSetup &newSetup, bool treatAsChosenDevice)
Definition juce_AudioDeviceManager.cpp:635
LevelMeter::Ptr getOutputLevelGetter() noexcept
Definition juce_AudioDeviceManager.h:449
void audioDeviceIOCallbackInt(const float **inputChannelData, int totalNumInputChannels, float **outputChannelData, int totalNumOutputChannels, int numSamples, const AudioIODeviceCallbackContext &context)
Definition juce_AudioDeviceManager.cpp:904
AudioDeviceSetup currentSetup
Definition juce_AudioDeviceManager.h:494
AudioIODevice * getCurrentAudioDevice() const noexcept
Definition juce_AudioDeviceManager.h:243
MidiDeviceInfo defaultMidiOutputDeviceInfo
Definition juce_AudioDeviceManager.h:513
String getCurrentAudioDeviceType() const
Definition juce_AudioDeviceManager.h:248
void stopDevice()
Definition juce_AudioDeviceManager.cpp:780
void audioDeviceErrorInt(const String &)
Definition juce_AudioDeviceManager.cpp:1002
void deleteCurrentDevice()
Definition juce_AudioDeviceManager.cpp:573
std::unique_ptr< AudioIODevice > currentAudioDevice
Definition juce_AudioDeviceManager.h:495
std::unique_ptr< CallbackHandler > callbackHandler
Definition juce_AudioDeviceManager.h:527
void audioDeviceAboutToStartInt(AudioIODevice *)
Definition juce_AudioDeviceManager.cpp:973
CriticalSection audioCallbackLock
Definition juce_AudioDeviceManager.h:515
void audioDeviceListChanged()
Definition juce_AudioDeviceManager.cpp:181
void pickCurrentDeviceTypeWithDevices()
Definition juce_AudioDeviceManager.cpp:144
OwnedArray< AudioDeviceSetup > lastDeviceTypeConfigs
Definition juce_AudioDeviceManager.h:492
Array< MidiCallbackInfo > midiCallbacks
Definition juce_AudioDeviceManager.h:511
AudioBuffer< float > tempBuffer
Definition juce_AudioDeviceManager.h:501
LevelMeter::Ptr outputLevelGetter
Definition juce_AudioDeviceManager.h:523
OwnedArray< AudioIODeviceType > availableDeviceTypes
Definition juce_AudioDeviceManager.h:491
void updateCurrentSetup()
Definition juce_AudioDeviceManager.cpp:170
std::unique_ptr< MidiOutput > defaultMidiOutput
Definition juce_AudioDeviceManager.h:514
int numOutputChansNeeded
Definition juce_AudioDeviceManager.h:497
void scanDevicesIfNeeded()
Definition juce_AudioDeviceManager.cpp:527
String initialise(int numInputChannelsNeeded, int numOutputChannelsNeeded, const XmlElement *savedState, bool selectDefaultDeviceOnFailure, const String &preferredDefaultDeviceName=String(), const AudioDeviceSetup *preferredSetupOptions=nullptr)
Definition juce_AudioDeviceManager.cpp:286
CriticalSection & getAudioCallbackLock() noexcept
Definition juce_AudioDeviceManager.h:456
LevelMeter::Ptr inputLevelGetter
Definition juce_AudioDeviceManager.h:522
String currentDeviceType
Definition juce_AudioDeviceManager.h:498
std::unique_ptr< XmlElement > lastExplicitSettings
Definition juce_AudioDeviceManager.h:499
String initialiseWithDefaultDevices(int numInputChannelsNeeded, int numOutputChannelsNeeded)
Definition juce_AudioDeviceManager.cpp:494
AudioIODeviceType * findType(const String &inputName, const String &outputName)
Definition juce_AudioDeviceManager.cpp:551
String initialiseDefault(const String &preferredDefaultDeviceName, const AudioDeviceSetup *)
Definition juce_AudioDeviceManager.cpp:307
int testSoundPosition
Definition juce_AudioDeviceManager.h:518
Array< AudioIODeviceCallback * > callbacks
Definition juce_AudioDeviceManager.h:496
void updateXml()
Definition juce_AudioDeviceManager.cpp:814
std::unique_ptr< AudioBuffer< float > > testSound
Definition juce_AudioDeviceManager.h:517
int chooseBestBufferSize(int preferred) const
Definition juce_AudioDeviceManager.cpp:770
CriticalSection midiCallbackLock
Definition juce_AudioDeviceManager.h:515
AudioProcessLoadMeasurer loadMeasurer
Definition juce_AudioDeviceManager.h:520
double chooseBestSampleRate(double preferred) const
Definition juce_AudioDeviceManager.cpp:740
bool listNeedsScanning
Definition juce_AudioDeviceManager.h:500
String initialiseFromXML(const XmlElement &, bool selectDefaultDeviceOnFailure, const String &preferredDefaultDeviceName, const AudioDeviceSetup *)
Definition juce_AudioDeviceManager.cpp:385
std::unique_ptr< XmlElement > createStateXml() const
Definition juce_AudioDeviceManager.cpp:518
Definition juce_AudioIODevice.h:51
Definition juce_AudioIODevice.h:164
Definition juce_AudioIODeviceType.h:62
Definition juce_AudioProcessLoadMeasurer.h:34
Definition juce_BigInteger.h:39
ChangeBroadcaster() noexcept
Definition juce_ChangeBroadcaster.cpp:26
Definition juce_CriticalSection.h:43
Definition juce_MidiDevices.h:195
Definition juce_MidiDevices.h:82
Definition juce_MidiMessage.h:35
Definition juce_MidiDevices.h:246
Definition juce_OwnedArray.h:51
Definition juce_ReferenceCountedObject.h:247
Definition juce_String.h:53
Definition juce_XmlElement.h:83
#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)
#define JUCE_API
Definition juce_StandardHeader.h:152
Definition carla_juce.cpp:31
Definition juce_Atomic.h:42
Definition juce_AudioDeviceManager.h:91
String outputDeviceName
Definition juce_AudioDeviceManager.h:97
bool useDefaultInputChannels
Definition juce_AudioDeviceManager.h:128
String inputDeviceName
Definition juce_AudioDeviceManager.h:102
BigInteger outputChannels
Definition juce_AudioDeviceManager.h:135
double sampleRate
Definition juce_AudioDeviceManager.h:109
BigInteger inputChannels
Definition juce_AudioDeviceManager.h:122
int bufferSize
Definition juce_AudioDeviceManager.h:115
bool useDefaultOutputChannels
Definition juce_AudioDeviceManager.h:141
Definition juce_AudioDeviceManager.h:424
double getCurrentLevel() const noexcept
Definition juce_AudioDeviceManager.cpp:1166
LevelMeter() noexcept
Definition juce_AudioDeviceManager.cpp:1128
ReferenceCountedObjectPtr< LevelMeter > Ptr
Definition juce_AudioDeviceManager.h:428
friend class AudioDeviceManager
Definition juce_AudioDeviceManager.h:431
Atomic< float > level
Definition juce_AudioDeviceManager.h:433
Definition juce_AudioDeviceManager.h:504
String deviceIdentifier
Definition juce_AudioDeviceManager.h:505
MidiInputCallback * callback
Definition juce_AudioDeviceManager.h:506
Definition juce_AudioIODevice.h:30
Definition juce_MidiDevices.h:37
RECT const char void(* callback)(const char *droppath))) SWELL_API_DEFINE(BOOL
Definition swell-functions.h:1004
int result
Definition process.c:1455
#define const
Definition zconf.h:137