mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-30 11:55:35 +08:00
Ref T730, adjusted audio device info/info list,
so it can be used with QAudioDeviceInfo
This commit is contained in:
committed by
Mat Sutcliffe
parent
b9b3675073
commit
835fdc478a
@@ -26,11 +26,43 @@ namespace BlackMisc
|
||||
m_deviceName(name), m_hostName(QHostInfo::localHostName())
|
||||
{ }
|
||||
|
||||
QAudioDeviceInfo CAudioDeviceInfo::toAudioDeviceInfo() const
|
||||
{
|
||||
QList<QAudioDeviceInfo> devices;
|
||||
switch (this->getType())
|
||||
{
|
||||
case InputDevice: devices = QAudioDeviceInfo::availableDevices(QAudio::AudioInput); break;
|
||||
case OutputDevice: devices = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput); break;
|
||||
default:
|
||||
devices = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
|
||||
devices += QAudioDeviceInfo::availableDevices(QAudio::AudioInput);
|
||||
break;
|
||||
}
|
||||
|
||||
for (const QAudioDeviceInfo &d : as_const(devices))
|
||||
{
|
||||
if (d.deviceName() == this->getName()) { return d; }
|
||||
}
|
||||
|
||||
return QAudioDeviceInfo();
|
||||
}
|
||||
|
||||
CAudioDeviceInfo::DeviceType CAudioDeviceInfo::fromQtMode(QAudio::Mode m)
|
||||
{
|
||||
switch (m)
|
||||
{
|
||||
case QAudio::AudioInput: return InputDevice;
|
||||
case QAudio::AudioOutput: return OutputDevice;
|
||||
default: break;
|
||||
}
|
||||
return Unknown;
|
||||
}
|
||||
|
||||
QString CAudioDeviceInfo::convertToQString(bool i18n) const
|
||||
{
|
||||
Q_UNUSED(i18n);
|
||||
Q_UNUSED(i18n)
|
||||
if (m_hostName.isEmpty()) { return m_deviceName; }
|
||||
return m_deviceName % u" [" % this->getHostName() % u']';
|
||||
}
|
||||
} // Voice
|
||||
} // BlackMisc
|
||||
} // ns
|
||||
} // ns
|
||||
|
||||
@@ -11,10 +11,11 @@
|
||||
#ifndef BLACKMISC_AUDIO_AUDIODEVICE_H
|
||||
#define BLACKMISC_AUDIO_AUDIODEVICE_H
|
||||
|
||||
#include "blackmisc/blackmiscexport.h"
|
||||
#include "blackmisc/metaclass.h"
|
||||
#include "blackmisc/valueobject.h"
|
||||
#include "blackmisc/blackmiscexport.h"
|
||||
|
||||
#include <QAudioDeviceInfo>
|
||||
#include <QMetaType>
|
||||
#include <QString>
|
||||
|
||||
@@ -59,7 +60,13 @@ namespace BlackMisc
|
||||
DeviceType getType() const { return m_type; }
|
||||
|
||||
//! Valid audio device object?
|
||||
bool isValid() const { return m_deviceIndex >= -1 && !m_deviceName.isEmpty(); }
|
||||
bool isValid() const { return m_deviceIndex != Unknown && !m_deviceName.isEmpty(); }
|
||||
|
||||
//! To QAudioDeviceInfo
|
||||
QAudioDeviceInfo toAudioDeviceInfo() const;
|
||||
|
||||
//! Convert the Qt type
|
||||
static DeviceType fromQtMode(QAudio::Mode m);
|
||||
|
||||
//! Device index for default device
|
||||
static int defaultDeviceIndex() {return -1;}
|
||||
@@ -83,8 +90,8 @@ namespace BlackMisc
|
||||
QString convertToQString(bool i18n = false) const;
|
||||
|
||||
private:
|
||||
DeviceType m_type; //!< Device type, @see CAudioDeviceInfo::DeviceType
|
||||
int m_deviceIndex; //!< deviceIndex is the number is the reference for the VVL. The device is selected by this index. The managing class needs to take care, that indexes are valid.
|
||||
DeviceType m_type = Unknown; //!< Device type, @see CAudioDeviceInfo::DeviceType
|
||||
int m_deviceIndex = -1; //!< deviceIndex is the number is the reference for the VVL. The device is selected by this index. The managing class needs to take care, that indexes are valid.
|
||||
QString m_deviceName; //!< Device name
|
||||
QString m_hostName; //!< We use a DBus based system. Hence an audio device can reside on a differen computers, this here is its name
|
||||
|
||||
@@ -100,5 +107,6 @@ namespace BlackMisc
|
||||
} // namespace
|
||||
|
||||
Q_DECLARE_METATYPE(BlackMisc::Audio::CAudioDeviceInfo)
|
||||
Q_DECLARE_METATYPE(BlackMisc::Audio::CAudioDeviceInfo::DeviceType)
|
||||
|
||||
#endif // guard
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
#include "blackmisc/range.h"
|
||||
|
||||
#include <QString>
|
||||
#include <QAudioDeviceInfo>
|
||||
#include <QHostInfo>
|
||||
#include <algorithm>
|
||||
#include <tuple>
|
||||
|
||||
@@ -18,7 +20,6 @@ namespace BlackMisc
|
||||
{
|
||||
namespace Audio
|
||||
{
|
||||
|
||||
CAudioDeviceInfoList::CAudioDeviceInfoList() { }
|
||||
|
||||
CAudioDeviceInfoList::CAudioDeviceInfoList(const CSequence &other) :
|
||||
@@ -35,6 +36,23 @@ namespace BlackMisc
|
||||
return this->findBy(&CAudioDeviceInfo::getType, CAudioDeviceInfo::InputDevice);
|
||||
}
|
||||
|
||||
CAudioDeviceInfo CAudioDeviceInfoList::findByName(const QString &name, bool strict) const
|
||||
{
|
||||
for (const CAudioDeviceInfo &d : *this)
|
||||
{
|
||||
if (strict)
|
||||
{
|
||||
if (d.getName() == name) { return d; }
|
||||
}
|
||||
else
|
||||
{
|
||||
if (d.getName().startsWith(name, Qt::CaseInsensitive)) { return d; }
|
||||
if (name.startsWith(d.getName(), Qt::CaseInsensitive)) { return d; }
|
||||
}
|
||||
}
|
||||
return CAudioDeviceInfo();
|
||||
}
|
||||
|
||||
CAudioDeviceInfo CAudioDeviceInfoList::findByDeviceIndex(int deviceIndex)
|
||||
{
|
||||
return this->findBy(&CAudioDeviceInfo::getIndex, deviceIndex).frontOrDefault();
|
||||
@@ -42,10 +60,85 @@ namespace BlackMisc
|
||||
|
||||
int CAudioDeviceInfoList::count(CAudioDeviceInfo::DeviceType type) const
|
||||
{
|
||||
return std::count_if(this->begin(), this->end(), [type](const CAudioDeviceInfo &device)
|
||||
return static_cast<int>(std::count_if(this->begin(), this->end(), [type](const CAudioDeviceInfo & device)
|
||||
{
|
||||
return device.getType() == type;
|
||||
});
|
||||
}));
|
||||
}
|
||||
|
||||
QStringList CAudioDeviceInfoList::getDeviceNames() const
|
||||
{
|
||||
QStringList names;
|
||||
for (const CAudioDeviceInfo &d : *this)
|
||||
{
|
||||
names << d.getName();
|
||||
}
|
||||
return names;
|
||||
}
|
||||
|
||||
CAudioDeviceInfoList CAudioDeviceInfoList::allQtInputDevices()
|
||||
{
|
||||
const QList<QAudioDeviceInfo> inputDevices = QAudioDeviceInfo::availableDevices(QAudio::AudioInput);
|
||||
CAudioDeviceInfoList devices;
|
||||
|
||||
int index = 100;
|
||||
for (const QAudioDeviceInfo &inputDevice : inputDevices)
|
||||
{
|
||||
const CAudioDeviceInfo d(CAudioDeviceInfo::InputDevice, index++, inputDevice.deviceName());
|
||||
devices.push_back(d);
|
||||
}
|
||||
return devices;
|
||||
}
|
||||
|
||||
CAudioDeviceInfoList CAudioDeviceInfoList::allQtOutputDevices()
|
||||
{
|
||||
const QList<QAudioDeviceInfo> outputDevices = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
|
||||
CAudioDeviceInfoList devices;
|
||||
|
||||
int index = 200;
|
||||
for (const QAudioDeviceInfo &outputDevice : outputDevices)
|
||||
{
|
||||
const CAudioDeviceInfo d(CAudioDeviceInfo::OutputDevice, index++, outputDevice.deviceName());
|
||||
devices.push_back(d);
|
||||
}
|
||||
return devices;
|
||||
}
|
||||
|
||||
CAudioDeviceInfoList CAudioDeviceInfoList::allQtDevices()
|
||||
{
|
||||
CAudioDeviceInfoList i = allQtInputDevices();
|
||||
i.push_back(allQtOutputDevices());
|
||||
return i;
|
||||
}
|
||||
|
||||
CAudioDeviceInfo CAudioDeviceInfoList::fromQtInputDevice(const QAudioDeviceInfo &device)
|
||||
{
|
||||
const CAudioDeviceInfoList dl = CAudioDeviceInfoList::allQtInputDevices();
|
||||
for (const CAudioDeviceInfo &d : dl)
|
||||
{
|
||||
if (d.getName() == device.deviceName()) { return d; }
|
||||
}
|
||||
return CAudioDeviceInfo();
|
||||
}
|
||||
|
||||
CAudioDeviceInfo CAudioDeviceInfoList::fromQtOutputDevice(const QAudioDeviceInfo &device)
|
||||
{
|
||||
const CAudioDeviceInfoList dl = CAudioDeviceInfoList::allQtOutputDevices();
|
||||
for (const CAudioDeviceInfo &d : dl)
|
||||
{
|
||||
if (d.getName() == device.deviceName()) { return d; }
|
||||
}
|
||||
return CAudioDeviceInfo();
|
||||
}
|
||||
|
||||
CAudioDeviceInfo CAudioDeviceInfoList::qtDefaultInputDevice()
|
||||
{
|
||||
return fromQtInputDevice(QAudioDeviceInfo::defaultInputDevice());
|
||||
}
|
||||
|
||||
CAudioDeviceInfo CAudioDeviceInfoList::qtDefaultOutputDevice()
|
||||
{
|
||||
return fromQtOutputDevice(QAudioDeviceInfo::defaultOutputDevice());
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "blackmisc/variant.h"
|
||||
|
||||
#include <QMetaType>
|
||||
#include <QStringList>
|
||||
|
||||
namespace BlackMisc
|
||||
{
|
||||
@@ -26,7 +27,7 @@ namespace BlackMisc
|
||||
//! Value object encapsulating a list of audio devices.
|
||||
class BLACKMISC_EXPORT CAudioDeviceInfoList :
|
||||
public CSequence<CAudioDeviceInfo>,
|
||||
public BlackMisc::Mixin::MetaType<CAudioDeviceInfoList>
|
||||
public Mixin::MetaType<CAudioDeviceInfoList>
|
||||
{
|
||||
public:
|
||||
BLACKMISC_DECLARE_USING_MIXIN_METATYPE(CAudioDeviceInfoList)
|
||||
@@ -44,13 +45,28 @@ namespace BlackMisc
|
||||
//! Get output devices in that list
|
||||
CAudioDeviceInfoList getInputDevices() const;
|
||||
|
||||
//! Find by name
|
||||
CAudioDeviceInfo findByName(const QString &name, bool strict = false) const;
|
||||
|
||||
//! Find device by its index
|
||||
CAudioDeviceInfo findByDeviceIndex(int deviceIndex);
|
||||
|
||||
//! Count (as of type)
|
||||
int count(CAudioDeviceInfo::DeviceType type) const;
|
||||
};
|
||||
|
||||
//! All names
|
||||
QStringList getDeviceNames() const;
|
||||
|
||||
//! List based on the Qt devices @{
|
||||
static CAudioDeviceInfoList allQtInputDevices();
|
||||
static CAudioDeviceInfoList allQtOutputDevices();
|
||||
static CAudioDeviceInfoList allQtDevices();
|
||||
static CAudioDeviceInfo fromQtInputDevice(const QAudioDeviceInfo &device);
|
||||
static CAudioDeviceInfo fromQtOutputDevice(const QAudioDeviceInfo &device);
|
||||
static CAudioDeviceInfo qtDefaultInputDevice();
|
||||
static CAudioDeviceInfo qtDefaultOutputDevice();
|
||||
//! @}
|
||||
};
|
||||
} //namespace
|
||||
} // namespace
|
||||
|
||||
|
||||
Reference in New Issue
Block a user