OpenShot Audio Library | OpenShotAudio  0.6.0
juce_AudioIODevice.h
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 
23 namespace juce
24 {
25 
26 class AudioIODevice;
27 
34 {
38  const uint64_t* hostTimeNs = nullptr;
39 };
40 
41 //==============================================================================
54 class JUCE_API AudioIODeviceCallback
55 {
56 public:
58  virtual ~AudioIODeviceCallback() = default;
59 
100  virtual void audioDeviceIOCallbackWithContext (const float* const* inputChannelData,
101  int numInputChannels,
102  float* const* outputChannelData,
103  int numOutputChannels,
104  int numSamples,
105  const AudioIODeviceCallbackContext& context);
106 
121  virtual void audioDeviceAboutToStart (AudioIODevice* device) = 0;
122 
124  virtual void audioDeviceStopped() = 0;
125 
130  virtual void audioDeviceError (const String& errorMessage);
131 };
132 
133 //==============================================================================
150 class JUCE_API AudioIODevice
151 {
152 public:
154  virtual ~AudioIODevice();
155 
156  //==============================================================================
158  const String& getName() const noexcept { return name; }
159 
164  const String& getTypeName() const noexcept { return typeName; }
165 
166  //==============================================================================
171 
176 
177  //==============================================================================
183  virtual std::optional<BigInteger> getDefaultOutputChannels() const { return {}; }
184 
190  virtual std::optional<BigInteger> getDefaultInputChannels() const { return {}; }
191 
192  //==============================================================================
197 
202 
207  virtual int getDefaultBufferSize() = 0;
208 
209  //==============================================================================
224  virtual String open (const BigInteger& inputChannels,
225  const BigInteger& outputChannels,
226  double sampleRate,
227  int bufferSizeSamples) = 0;
228 
230  virtual void close() = 0;
231 
237  virtual bool isOpen() = 0;
238 
246  virtual void start (AudioIODeviceCallback* callback) = 0;
247 
253  virtual void stop() = 0;
254 
260  virtual bool isPlaying() = 0;
261 
263  virtual String getLastError() = 0;
264 
265  //==============================================================================
270  virtual int getCurrentBufferSizeSamples() = 0;
271 
276  virtual double getCurrentSampleRate() = 0;
277 
282  virtual int getCurrentBitDepth() = 0;
283 
288  virtual BigInteger getActiveOutputChannels() const = 0;
289 
294  virtual BigInteger getActiveInputChannels() const = 0;
295 
301  virtual int getOutputLatencyInSamples() = 0;
302 
308  virtual int getInputLatencyInSamples() = 0;
309 
311  virtual AudioWorkgroup getWorkgroup() const { return {}; }
312 
313  //==============================================================================
319  virtual bool hasControlPanel() const;
320 
325  virtual bool showControlPanel();
326 
331  virtual bool setAudioPreprocessingEnabled (bool shouldBeEnabled);
332 
333  //==============================================================================
344  virtual int getXRunCount() const noexcept;
345 
346  //==============================================================================
347 protected:
349  AudioIODevice (const String& deviceName,
350  const String& typeName);
351 
353  String name, typeName;
354 };
355 
356 } // namespace juce
virtual ~AudioIODeviceCallback()=default
virtual void audioDeviceAboutToStart(AudioIODevice *device)=0
virtual void audioDeviceStopped()=0
virtual double getCurrentSampleRate()=0
const String & getName() const noexcept
virtual int getCurrentBitDepth()=0
virtual void close()=0
virtual bool isPlaying()=0
virtual StringArray getOutputChannelNames()=0
virtual StringArray getInputChannelNames()=0
virtual AudioWorkgroup getWorkgroup() const
virtual BigInteger getActiveInputChannels() const =0
virtual void stop()=0
virtual BigInteger getActiveOutputChannels() const =0
virtual Array< double > getAvailableSampleRates()=0
virtual int getInputLatencyInSamples()=0
const String & getTypeName() const noexcept
virtual int getCurrentBufferSizeSamples()=0
virtual std::optional< BigInteger > getDefaultInputChannels() const
virtual Array< int > getAvailableBufferSizes()=0
virtual int getDefaultBufferSize()=0
virtual void start(AudioIODeviceCallback *callback)=0
virtual String getLastError()=0
virtual std::optional< BigInteger > getDefaultOutputChannels() const
virtual String open(const BigInteger &inputChannels, const BigInteger &outputChannels, double sampleRate, int bufferSizeSamples)=0
virtual int getOutputLatencyInSamples()=0
virtual bool isOpen()=0