109 double sampleRate = 0;
128 bool useDefaultInputChannels =
true;
141 bool useDefaultOutputChannels =
true;
182 String initialise (
int numInputChannelsNeeded,
183 int numOutputChannelsNeeded,
185 bool selectDefaultDeviceOnFailure,
190 String initialiseWithDefaultDevices (
int numInputChannelsNeeded,
191 int numOutputChannelsNeeded);
201 std::unique_ptr<XmlElement> createStateXml()
const;
263 void setCurrentAudioDeviceType (
const String& type,
bool treatAsChosenDevice);
272 void closeAudioDevice();
282 void restartLastAudioDevice();
313 double getCpuUsage()
const;
335 void setMidiInputDeviceEnabled (
const String& deviceIdentifier,
bool enabled);
341 bool isMidiInputDeviceEnabled (
const String& deviceIdentifier)
const;
353 void addMidiInputDeviceCallback (
const String& deviceIdentifier,
357 void removeMidiInputDeviceCallback (
const String& deviceIdentifier,
373 void setDefaultMidiOutputDevice (
const String& deviceIdentifier);
403 void addAudioDeviceType (std::unique_ptr<AudioIODeviceType> newDeviceType);
414 void playTestSound();
429 double getCurrentLevel()
const noexcept;
437 void updateLevel (
const float*
const*,
int numChannels,
int numSamples)
noexcept;
474 int getXRunCount() const noexcept;
478 [[deprecated (
"Use setMidiInputDeviceEnabled instead.")]]
479 void setMidiInputEnabled (
const String&,
bool);
480 [[deprecated (
"Use isMidiInputDeviceEnabled instead.")]]
481 bool isMidiInputEnabled (
const String&)
const;
482 [[deprecated (
"Use addMidiInputDeviceCallback instead.")]]
484 [[deprecated (
"Use removeMidiInputDeviceCallback instead.")]]
486 [[deprecated (
"Use setDefaultMidiOutputDevice instead.")]]
487 void setDefaultMidiOutput (
const String&);
488 [[deprecated (
"Use getDefaultMidiOutputIdentifier instead.")]]
489 const String& getDefaultMidiOutputName() const noexcept {
return defaultMidiOutputDeviceInfo.name; }
494 OwnedArray<AudioIODeviceType> availableDeviceTypes;
495 OwnedArray<AudioDeviceSetup> lastDeviceTypeConfigs;
497 AudioDeviceSetup currentSetup;
498 std::unique_ptr<AudioIODevice> currentAudioDevice;
499 Array<AudioIODeviceCallback*> callbacks;
500 int numInputChansNeeded = 0, numOutputChansNeeded = 2;
501 String preferredDeviceName, currentDeviceType;
502 std::unique_ptr<XmlElement> lastExplicitSettings;
503 mutable bool listNeedsScanning =
true;
504 AudioBuffer<float> tempBuffer;
505 MidiDeviceListConnection midiDeviceListConnection = MidiDeviceListConnection::make ([
this]
507 midiDeviceListChanged();
510 struct MidiCallbackInfo
512 String deviceIdentifier;
513 MidiInputCallback* callback;
516 Array<MidiDeviceInfo> midiDeviceInfosFromXml;
517 std::vector<std::unique_ptr<MidiInput>> enabledMidiInputs;
518 Array<MidiCallbackInfo> midiCallbacks;
520 MidiDeviceInfo defaultMidiOutputDeviceInfo;
521 std::unique_ptr<MidiOutput> defaultMidiOutput;
522 CriticalSection audioCallbackLock, midiCallbackLock;
524 std::unique_ptr<AudioBuffer<float>> testSound;
525 int testSoundPosition = 0;
527 AudioProcessLoadMeasurer loadMeasurer;
529 LevelMeter::Ptr inputLevelGetter {
new LevelMeter() },
530 outputLevelGetter {
new LevelMeter() };
533 class CallbackHandler;
534 std::unique_ptr<CallbackHandler> callbackHandler;
536 void audioDeviceIOCallbackInt (
const float*
const* inputChannelData,
537 int totalNumInputChannels,
538 float*
const* outputChannelData,
539 int totalNumOutputChannels,
541 const AudioIODeviceCallbackContext& context);
542 void audioDeviceAboutToStartInt (AudioIODevice*);
543 void audioDeviceStoppedInt();
544 void audioDeviceErrorInt (
const String&);
545 void handleIncomingMidiMessageInt (MidiInput*,
const MidiMessage&);
546 void audioDeviceListChanged();
547 void midiDeviceListChanged();
549 String restartDevice (
int blockSizeToUse,
double sampleRateToUse,
550 const BigInteger& ins,
const BigInteger& outs);
555 void updateCurrentSetup();
556 void createDeviceTypesIfNeeded();
557 void scanDevicesIfNeeded();
558 void deleteCurrentDevice();
559 double chooseBestSampleRate (
double preferred)
const;
560 int chooseBestBufferSize (
int preferred)
const;
561 void insertDefaultDeviceNames (AudioDeviceSetup&)
const;
562 String initialiseDefault (
const String& preferredDefaultDeviceName,
const AudioDeviceSetup*);
563 String initialiseFromXML (
const XmlElement&,
bool selectDefaultDeviceOnFailure,
564 const String& preferredDefaultDeviceName,
const AudioDeviceSetup*);
565 void openLastRequestedMidiDevices (
const Array<MidiDeviceInfo>&,
const MidiDeviceInfo&);
567 AudioIODeviceType* findType (
const String& inputName,
const String& outputName);
568 AudioIODeviceType* findType (
const String& typeName);
569 void pickCurrentDeviceTypeWithDevices();
571 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioDeviceManager)