38std::unique_ptr<QPlatformAudioDevices> QPlatformAudioDevices::create()
41 return std::make_unique<QDarwinAudioDevices>();
43#if defined(Q_OS_WINDOWS)
44 return std::make_unique<QWindowsAudioDevices>();
46#if defined(Q_OS_ANDROID)
47 return std::make_unique<QAndroidAudioDevices>();
49#if QT_CONFIG(pipewire)
50 using namespace Qt::Literals;
51 QByteArray requestedBackend = qgetenv(
"QT_AUDIO_BACKEND");
52 const bool pipewireRequested = requestedBackend ==
"pipewire"_ba;
53 const bool considerPipewire = requestedBackend.isNull() || pipewireRequested;
55 if (considerPipewire && QtPipeWire::QAudioDevices::isSupported())
56 return std::make_unique<QtPipeWire::QAudioDevices>();
58 if (pipewireRequested)
59 qDebug() <<
"PipeWire audio backend requested. not available. Using default backend";
62#if QT_CONFIG(pulseaudio)
63 return std::make_unique<QPulseAudioDevices>();
66 return std::make_unique<QAlsaAudioDevices>();
69 return std::make_unique<QQnxAudioDevices>();
72 return std::make_unique<QWasmAudioDevices>();
74 return std::make_unique<QPlatformAudioDevices>();
77QPlatformAudioDevices::QPlatformAudioDevices()
79 qRegisterMetaType<PrivateTag>();
82QPlatformAudioDevices::~QPlatformAudioDevices() =
default;
84QList<QAudioDevice> QPlatformAudioDevices::audioInputs()
const
86 return m_audioInputs.ensure([
this]() {
87 return findAudioInputs();
91QList<QAudioDevice> QPlatformAudioDevices::audioOutputs()
const
93 return m_audioOutputs.ensure([
this]() {
94 return findAudioOutputs();
98void QPlatformAudioDevices::onAudioInputsChanged()
100 m_audioInputs.reset();
101 emit audioInputsChanged(PrivateTag{});
104void QPlatformAudioDevices::onAudioOutputsChanged()
106 m_audioOutputs.reset();
107 emit audioOutputsChanged(PrivateTag{});
110void QPlatformAudioDevices::updateAudioInputsCache()
112 if (m_audioInputs.update(findAudioInputs()))
113 emit audioInputsChanged(PrivateTag{});
116void QPlatformAudioDevices::updateAudioOutputsCache()
118 if (m_audioOutputs.update(findAudioOutputs()))
119 emit audioOutputsChanged(PrivateTag{});
122QPlatformAudioSource *QPlatformAudioDevices::createAudioSource(
const QAudioDevice &,
123 const QAudioFormat &, QObject *)
127QPlatformAudioSink *QPlatformAudioDevices::createAudioSink(
const QAudioDevice &,
128 const QAudioFormat &, QObject *)
133QPlatformAudioSource *QPlatformAudioDevices::audioInputDevice(QAudioFormat format,
134 const QAudioDevice &deviceInfo,
137 QAudioDevice device = deviceInfo;
139 device = QMediaDevices::defaultAudioInput();
144 if (format == QAudioFormat{})
145 format = device.preferredFormat();
147 return createAudioSource(device, format, parent);
150QPlatformAudioSink *QPlatformAudioDevices::audioOutputDevice(QAudioFormat format,
151 const QAudioDevice &deviceInfo,
154 QAudioDevice device = deviceInfo;
156 device = QMediaDevices::defaultAudioOutput();
161 if (format == QAudioFormat{})
162 format = device.preferredFormat();
164 return createAudioSink(device, format, parent);
169#include "moc_qplatformaudiodevices_p.cpp"