diff --git a/interface/resources/qml/hifi/audio/Audio.qml b/interface/resources/qml/hifi/audio/Audio.qml index 0abd166b06..5a2ee86c09 100644 --- a/interface/resources/qml/hifi/audio/Audio.qml +++ b/interface/resources/qml/hifi/audio/Audio.qml @@ -70,6 +70,7 @@ Rectangle { } property bool showPeaks: true; + function enablePeakValues() { Audio.devices.input.peakValuesEnabled = true; Audio.devices.input.peakValuesEnabledChanged.connect(function(enabled) { @@ -78,6 +79,7 @@ Rectangle { } }); } + function disablePeakValues() { root.showPeaks = false; Audio.devices.input.peakValuesEnabled = false; @@ -202,12 +204,13 @@ Rectangle { } } } - InputLevel { + InputPeak { id: inputLevel anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter visible: (bar.currentIndex === 1 && selectedHMD && isVR) || - (bar.currentIndex === 0 && selectedDesktop && !isVR); + (bar.currentIndex === 0 && selectedDesktop && !isVR) && + Audio.devices.input.peakValuesAvailable; } } } diff --git a/interface/src/scripting/AudioDevices.cpp b/interface/src/scripting/AudioDevices.cpp index c79db91dfc..a130b46877 100644 --- a/interface/src/scripting/AudioDevices.cpp +++ b/interface/src/scripting/AudioDevices.cpp @@ -105,14 +105,14 @@ AudioDeviceList::~AudioDeviceList() { auto& settingHMD = getSetting(true, _mode); auto& settingDesktop = getSetting(false, _mode); // store the selected device - foreach(AudioDevice adevice, _devices) { - if (adevice.selectedDesktop) { - qDebug() << "Saving Desktop for" << _mode << "name" << adevice.info.deviceName(); - settingDesktop.set(adevice.info.deviceName()); + foreach(std::shared_ptr adevice, _devices) { + if (adevice->selectedDesktop) { + qDebug() << "Saving Desktop for" << _mode << "name" << adevice->info.deviceName(); + settingDesktop.set(adevice->info.deviceName()); } - if (adevice.selectedHMD) { - qDebug() << "Saving HMD for" << _mode << "name" << adevice.info.deviceName(); - settingHMD.set(adevice.info.deviceName()); + if (adevice->selectedHMD) { + qDebug() << "Saving HMD for" << _mode << "name" << adevice->info.deviceName(); + settingHMD.set(adevice->info.deviceName()); } } } @@ -123,18 +123,30 @@ QVariant AudioDeviceList::data(const QModelIndex& index, int role) const { } if (role == DeviceNameRole) { - return _devices.at(index.row()).display; + return _devices.at(index.row())->display; } else if (role == SelectedDesktopRole) { - return _devices.at(index.row()).selectedDesktop; + return _devices.at(index.row())->selectedDesktop; } else if (role == SelectedHMDRole) { - return _devices.at(index.row()).selectedHMD; - } else if (role == DeviceInfoRole) { - return QVariant::fromValue(_devices.at(index.row()).info); + return _devices.at(index.row())->selectedHMD; + } else if (role == InfoRole) { + return QVariant::fromValue(_devices.at(index.row())->info); } else { return QVariant(); } } +QVariant AudioInputDeviceList::data(const QModelIndex& index, int role) const { + if (!index.isValid() || index.row() >= rowCount()) { + return QVariant(); + } + + if (role == PeakRole) { + return std::static_pointer_cast(_devices.at(index.row()))->peak; + } else { + return AudioDeviceList::data(index, role); + } +} + void AudioDeviceList::resetDevice(bool contextIsHMD) { auto client = DependencyManager::get().data(); QString deviceName = getTargetDevice(contextIsHMD, _mode); @@ -175,11 +187,11 @@ void AudioDeviceList::onDeviceChanged(const QAudioDeviceInfo& device, bool isHMD selectedDevice = device; for (auto i = 0; i < _devices.size(); ++i) { - AudioDevice& device = _devices[i]; - bool &isSelected = isHMD ? device.selectedHMD : device.selectedDesktop; - if (isSelected && device.info != selectedDevice) { + std::shared_ptr device = _devices[i]; + bool &isSelected = isHMD ? device->selectedHMD : device->selectedDesktop; + if (isSelected && device->info != selectedDevice) { isSelected = false; - } else if (device.info == selectedDevice) { + } else if (device->info == selectedDevice) { isSelected = true; } } @@ -211,7 +223,7 @@ void AudioDeviceList::onDevicesChanged(const QList& devices, b isSelected = (device.info.deviceName() == savedDeviceName); } qDebug() << "adding audio device:" << device.display << device.selectedDesktop << device.selectedHMD << _mode; - _devices.push_back(device); + _devices.push_back(newDevice(device)); } endResetModel(); diff --git a/interface/src/scripting/AudioDevices.h b/interface/src/scripting/AudioDevices.h index 162092f358..36f1653e38 100644 --- a/interface/src/scripting/AudioDevices.h +++ b/interface/src/scripting/AudioDevices.h @@ -33,8 +33,8 @@ class AudioDeviceList : public QAbstractListModel { Q_OBJECT public: - AudioDeviceList(QAudio::Mode mode = QAudio::AudioOutput) : _mode(mode) {} - ~AudioDeviceList() = default; + AudioDeviceList(QAudio::Mode mode = QAudio::AudioOutput); + virtual ~AudioDeviceList(); virtual std::shared_ptr newDevice(const AudioDevice& device) { return std::make_shared(device); }