refs #335, improved audio setup

* changed volume methods from QList<qint32> to qint32 (DBus compliance)
* methods for changed devices
* command parser for audio
* volume display in status bar (pseudo mute)
This commit is contained in:
Klaus Basan
2014-11-05 16:49:49 +01:00
committed by Roland Winklmeier
parent 3fd1f3c8c4
commit 1ea330cc06
11 changed files with 228 additions and 65 deletions

View File

@@ -50,18 +50,23 @@ namespace BlackGui
// based on audio context
Q_ASSERT(this->getIContextAudio());
bool connected = false;
if (this->getIContextAudio())
{
this->initAudioDeviceLists();
connected = this->connect(this->getIContextAudio(), &IContextAudio::audioTestCompleted, this, &CAudioSetupComponent::ps_audioTestUpdate);
Q_ASSERT(connected);
connected = this->connect(this->ui->cb_SetupAudioInputDevice, SIGNAL(currentIndexChanged(int)), this, SLOT(ps_audioDeviceSelected(int)));
// the connects depend on initAudioDeviceLists
bool connected = this->connect(this->ui->cb_SetupAudioInputDevice, SIGNAL(currentIndexChanged(int)), this, SLOT(ps_audioDeviceSelected(int)));
Q_ASSERT(connected);
connected = this->connect(this->ui->cb_SetupAudioOutputDevice, SIGNAL(currentIndexChanged(int)), this, SLOT(ps_audioDeviceSelected(int)));
Q_ASSERT(connected);
this->connect(this->ui->pb_SetupAudioMicrophoneTest, &QPushButton::clicked, this, &CAudioSetupComponent::ps_startAudioTest);
this->connect(this->ui->pb_SetupAudioSquelchTest, &QPushButton::clicked, this, &CAudioSetupComponent::ps_startAudioTest);
// context
this->connect(this->getIContextAudio(), &IContextAudio::audioTestCompleted, this, &CAudioSetupComponent::ps_audioTestUpdate);
this->connect(this->getIContextAudio(), &IContextAudio::changedAudioDevices, this, &CAudioSetupComponent::ps_onAudioDevicesChanged);
this->connect(this->getIContextAudio(), &IContextAudio::changedSelectedAudioDevices, this, &CAudioSetupComponent::ps_onCurrentAudioDevicesChanged);
}
this->reloadSettings();
}
@@ -92,33 +97,9 @@ namespace BlackGui
*/
void CAudioSetupComponent::initAudioDeviceLists()
{
if (!this->getIContextAudio()) return;
this->ui->cb_SetupAudioOutputDevice->clear();
this->ui->cb_SetupAudioInputDevice->clear();
foreach(CAudioDevice device, this->getIContextAudio()->getAudioDevices())
{
if (device.getType() == CAudioDevice::InputDevice)
{
this->ui->cb_SetupAudioInputDevice->addItem(device.toQString(true));
}
else if (device.getType() == CAudioDevice::OutputDevice)
{
this->ui->cb_SetupAudioOutputDevice->addItem(device.toQString(true));
}
}
foreach(CAudioDevice device, this->getIContextAudio()->getCurrentAudioDevices())
{
if (device.getType() == CAudioDevice::InputDevice)
{
this->ui->cb_SetupAudioInputDevice->setCurrentText(device.toQString(true));
}
else if (device.getType() == CAudioDevice::OutputDevice)
{
this->ui->cb_SetupAudioOutputDevice->setCurrentText(device.toQString(true));
}
}
if (!this->getIContextAudio()) { return; }
this->ps_onAudioDevicesChanged(this->getIContextAudio()->getAudioDevices());
this->ps_onCurrentAudioDevicesChanged(this->getIContextAudio()->getCurrentAudioDevices());
}
/*
@@ -236,6 +217,38 @@ namespace BlackGui
}
}
void CAudioSetupComponent::ps_onCurrentAudioDevicesChanged(const BlackMisc::Audio::CAudioDeviceList &devices)
{
foreach(CAudioDevice device, devices)
{
if (device.getType() == CAudioDevice::InputDevice)
{
this->ui->cb_SetupAudioInputDevice->setCurrentText(device.toQString(true));
}
else if (device.getType() == CAudioDevice::OutputDevice)
{
this->ui->cb_SetupAudioOutputDevice->setCurrentText(device.toQString(true));
}
}
}
void CAudioSetupComponent::ps_onAudioDevicesChanged(const BlackMisc::Audio::CAudioDeviceList &devices)
{
this->ui->cb_SetupAudioOutputDevice->clear();
this->ui->cb_SetupAudioInputDevice->clear();
foreach(CAudioDevice device, devices)
{
if (device.getType() == CAudioDevice::InputDevice)
{
this->ui->cb_SetupAudioInputDevice->addItem(device.toQString(true));
}
else if (device.getType() == CAudioDevice::OutputDevice)
{
this->ui->cb_SetupAudioOutputDevice->addItem(device.toQString(true));
}
}
}
} // namespace
} // namespace

View File

@@ -65,6 +65,12 @@ namespace BlackGui
*/
void ps_audioDeviceSelected(int index);
//! Current audio devices changed
void ps_onCurrentAudioDevicesChanged(const Audio::CAudioDeviceList &devices);
//! Audio devices changed
void ps_onAudioDevicesChanged(const Audio::CAudioDeviceList &devices);
private:
//! Audio test modes
enum AudioTest

View File

@@ -23,8 +23,16 @@ namespace BlackGui
ui(new Ui::CAudioVolumeComponent)
{
ui->setupUi(this);
bool c = connect(this->ui->pb_ShowWinMixer, &QPushButton::pressed, this, &CAudioVolumeComponent::ps_onWindowsMixer);
bool c = connect(this->ui->pb_ShowWinMixer, &QPushButton::pressed, this, &CAudioVolumeComponent::ps_onWindowsMixerRequested);
Q_ASSERT(c);
c = connect(this->ui->hs_VolumeCom1, &QSlider::sliderReleased, this, &CAudioVolumeComponent::ps_changeVolume);
Q_ASSERT(c);
c = connect(this->ui->hs_VolumeCom2, &QSlider::sliderReleased, this, &CAudioVolumeComponent::ps_changeVolume);
Q_ASSERT(c);
Q_UNUSED(c);
}
CAudioVolumeComponent::~CAudioVolumeComponent()
@@ -32,8 +40,13 @@ namespace BlackGui
void CAudioVolumeComponent::runtimeHasBeenSet()
{
// from audio context
bool c = connect(this->getIContextAudio(), &IContextAudio::changedMute, this, &CAudioVolumeComponent::ps_onMuteChanged);
Q_ASSERT(c);
connect(this->getIContextAudio(), &IContextAudio::changedAudioVolumes, this, &CAudioVolumeComponent::ps_onVolumesChanged);
Q_ASSERT(c);
// to audio audio context
c = connect(this->ui->pb_Mute, &QPushButton::toggled, this->getIContextAudio(), &IContextAudio::setMute);
Q_ASSERT(c);
}
@@ -44,15 +57,24 @@ namespace BlackGui
this->ui->pb_Mute->setChecked(muted);
}
void CAudioVolumeComponent::ps_onVolumeChanged(QList<qint32> volumes)
void CAudioVolumeComponent::ps_onVolumesChanged(qint32 com1Volume, qint32 com2Volume)
{
Q_ASSERT(volumes.length() == 2);
if (volumes.length() != 2) return;
this->ui->hs_VolumeCom1->setValue(volumes.at(0));
this->ui->hs_VolumeCom2->setValue(volumes.at(1));
this->ui->hs_VolumeCom1->setValue(com1Volume);
this->ui->hs_VolumeCom2->setValue(com2Volume);
this->ui->hs_VolumeCom1->setToolTip(QString::number(com1Volume));
this->ui->hs_VolumeCom2->setToolTip(QString::number(com2Volume));
}
void CAudioVolumeComponent::ps_onWindowsMixer()
void CAudioVolumeComponent::ps_changeVolume()
{
qint32 v1 = this->ui->hs_VolumeCom1->value();
qint32 v2 = this->ui->hs_VolumeCom2->value();
this->ui->hs_VolumeCom1->setToolTip(QString::number(v1));
this->ui->hs_VolumeCom2->setToolTip(QString::number(v2));
this->getIContextAudio()->setVolumes(v1, v2);
}
void CAudioVolumeComponent::ps_onWindowsMixerRequested()
{
BlackMisc::Audio::startWindowsMixer();
}

View File

@@ -44,11 +44,14 @@ namespace BlackGui
//! Mute toggle
void ps_onMuteChanged(bool muted);
//! Volumes changed
void ps_onVolumeChanged(QList<qint32> volumes);
//! Volumes changed (elsewhere)
void ps_onVolumesChanged(qint32 com1Volume, qint32 com2Volume);
//! Change values because of volume GUI controls
void ps_changeVolume();
//! Requested windows mixer
void ps_onWindowsMixer();
void ps_onWindowsMixerRequested();
private:
QScopedPointer<Ui::CAudioVolumeComponent> ui;

View File

@@ -170,13 +170,9 @@ namespace BlackGui
}
}
void CInfoBarStatusComponent::ps_onVolumesChanged(QList<qint32> volumes)
void CInfoBarStatusComponent::ps_onVolumesChanged(qint32 com1Volume, qint32 com2Volume)
{
Q_ASSERT(volumes.count() == 2);
if (volumes.count() != 2) { return; }
qint32 v1 = volumes.at(0);
qint32 v2 = volumes.at(1);
bool pseudoMute = (v1 < 1 && v2 < 1);
bool pseudoMute = (com1Volume < 1 && com2Volume < 1);
this->ps_onMuteChanged(pseudoMute);
}
@@ -184,5 +180,5 @@ namespace BlackGui
{
this->ui->led_Audio->setOn(!muted);
}
}
}
} // namespace
} // namespace

View File

@@ -63,7 +63,7 @@ namespace BlackGui
void ps_customAudioContextMenuRequested(const QPoint &position);
//! Volumes changed 0..100
void ps_onVolumesChanged(QList<qint32> volumes);
void ps_onVolumesChanged(qint32 com1Volume, qint32 com2Volume);
//! Mute changed
void ps_onMuteChanged(bool muted);