diff options
author | Stefan Hacker <dd0t@users.sourceforge.net> | 2012-08-04 06:46:55 +0400 |
---|---|---|
committer | Stefan Hacker <dd0t@users.sourceforge.net> | 2012-08-04 06:46:55 +0400 |
commit | c0886998794dd98d61b3a7bd13b1b78b0a13dafd (patch) | |
tree | 061a930505a95dac2589d9ef2adf78904f2af38d | |
parent | f8c1b92f703497a757fb65a3d50e460406c1a7c7 (diff) |
Redesign idle action configuration and add a mute idle action.
-rw-r--r-- | src/mumble/AudioConfigDialog.cpp | 33 | ||||
-rw-r--r-- | src/mumble/AudioConfigDialog.h | 2 | ||||
-rw-r--r-- | src/mumble/AudioInput.cpp | 15 | ||||
-rw-r--r-- | src/mumble/AudioInput.h | 1 | ||||
-rw-r--r-- | src/mumble/AudioInput.ui | 185 | ||||
-rw-r--r-- | src/mumble/Settings.cpp | 14 | ||||
-rw-r--r-- | src/mumble/Settings.h | 5 | ||||
-rw-r--r-- | src/mumble/main.cpp | 12 |
8 files changed, 174 insertions, 93 deletions
diff --git a/src/mumble/AudioConfigDialog.cpp b/src/mumble/AudioConfigDialog.cpp index fb386f02b..41a3f0f4a 100644 --- a/src/mumble/AudioConfigDialog.cpp +++ b/src/mumble/AudioConfigDialog.cpp @@ -84,6 +84,7 @@ AudioInputDialog::AudioInputDialog(Settings &st) : ConfigWidget(st) { on_qcbPushClick_clicked(g.s.bTxAudioCue); on_Tick_timeout(); + on_qcbIdleAction_currentIndexChanged(g.s.iaeIdleAction); } QString AudioInputDialog::title() const { @@ -133,7 +134,10 @@ void AudioInputDialog::load(const Settings &r) { loadSlider(qsNoise, 14); loadSlider(qsAmp, 20000 - r.iMinLoudness); - loadSlider(qsIdle, r.iIdleTime); + + // Idle auto actions + qsbIdle->setValue(r.iIdleTime / 60); + loadComboBox(qcbIdleAction, r.iaeIdleAction); int echo = 0; if (r.bEcho) @@ -155,7 +159,10 @@ void AudioInputDialog::save() const { s.uiDoublePush = qsDoublePush->value() * 1000; s.uiPTTHold = qsPTTHold->value(); s.atTransmit = static_cast<Settings::AudioTransmit>(qcbTransmit->currentIndex()); - s.iIdleTime = qsIdle->value(); + + // Idle auto actions + s.iIdleTime = qsbIdle->value() * 60; + s.iaeIdleAction = static_cast<Settings::IdleAction>(qcbIdleAction->currentIndex()); s.bShowPTTButtonWindow = qcbPushWindow->isChecked(); s.bTxAudioCue = qcbPushClick->isChecked(); @@ -184,8 +191,10 @@ bool AudioInputDialog::expert(bool b) { qlFrames->setVisible(b); qswTransmit->setVisible(b); qliIdle->setVisible(b); - qsIdle->setVisible(b); + qsbIdle->setVisible(b); + qcbIdleAction->setVisible(b); qlIdle->setVisible(b); + qlIdle2->setVisible(b); return true; } @@ -237,13 +246,6 @@ void AudioInputDialog::on_qsAmp_valueChanged(int v) { qlAmp->setText(QString::fromLatin1("%1").arg(d, 0, 'f', 2)); } -void AudioInputDialog::on_qsIdle_valueChanged(int v) { - if (v > 0) - qlIdle->setText(tr("%1 min").arg(v / 60)); - else - qlIdle->setText(tr("Off")); -} - void AudioInputDialog::updateBitrate() { if (! qsQuality || ! qsFrames || ! qlBitrate) return; @@ -394,6 +396,17 @@ void AudioInputDialog::on_Tick_timeout() { abSpeech->update(); } + +void AudioInputDialog::on_qcbIdleAction_currentIndexChanged(int v) { + const Settings::IdleAction action = static_cast<Settings::IdleAction>(v); + + const bool enabled = (action != Settings::Nothing); + + qlIdle->setEnabled(enabled); + qlIdle2->setEnabled(enabled); + qsbIdle->setEnabled(enabled); +} + AudioOutputDialog::AudioOutputDialog(Settings &st) : ConfigWidget(st) { setupUi(this); diff --git a/src/mumble/AudioConfigDialog.h b/src/mumble/AudioConfigDialog.h index b171396d0..f0e62c13d 100644 --- a/src/mumble/AudioConfigDialog.h +++ b/src/mumble/AudioConfigDialog.h @@ -70,10 +70,10 @@ class AudioInputDialog : public ConfigWidget, public Ui::AudioInput { void on_qsDoublePush_valueChanged(int v); void on_qsPTTHold_valueChanged(int v); void on_qsNoise_valueChanged(int v); - void on_qsIdle_valueChanged(int v); void on_qcbTransmit_currentIndexChanged(int v); void on_qcbSystem_currentIndexChanged(int); void on_Tick_timeout(); + void on_qcbIdleAction_currentIndexChanged(int v); }; class AudioOutputDialog : public ConfigWidget, public Ui::AudioOutput { diff --git a/src/mumble/AudioInput.cpp b/src/mumble/AudioInput.cpp index ace4a105f..eb6bb59be 100644 --- a/src/mumble/AudioInput.cpp +++ b/src/mumble/AudioInput.cpp @@ -156,6 +156,7 @@ AudioInput::AudioInput() : opusBuffer(g.s.iFramesPerPacket * (SAMPLE_RATE / 100) bRunning = true; connect(this, SIGNAL(doDeaf()), g.mw->qaAudioDeaf, SLOT(trigger()), Qt::QueuedConnection); + connect(this, SIGNAL(doMute()), g.mw->qaAudioMute, SLOT(trigger()), Qt::QueuedConnection); } AudioInput::~AudioInput() { @@ -820,10 +821,18 @@ void AudioInput::encodeAudioFrame() { if (! bIsSpeech && ! bPreviousVoice) { iBitrate = 0; - if (g.s.iIdleTime && ! g.s.bDeaf && ((tIdle.elapsed() / 1000000ULL) > g.s.iIdleTime)) { - emit doDeaf(); - tIdle.restart(); + + if (g.s.iaeIdleAction != Settings::Nothing && ((tIdle.elapsed() / 1000000ULL) > g.s.iIdleTime)) { + + if (g.s.iaeIdleAction == Settings::Deafen && !g.s.bDeaf) { + tIdle.restart(); + emit doDeaf(); + } else if (g.s.iaeIdleAction == Settings::Mute && !g.s.bMute) { + tIdle.restart(); + emit doMute(); + } } + spx_int32_t increment = 0; speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_AGC_INCREMENT, &increment); return; diff --git a/src/mumble/AudioInput.h b/src/mumble/AudioInput.h index c928dc8ed..b6cce4169 100644 --- a/src/mumble/AudioInput.h +++ b/src/mumble/AudioInput.h @@ -155,6 +155,7 @@ class AudioInput : public QThread { static void adjustBandwidth(int bitspersec, int &bitrate, int &frames); signals: void doDeaf(); + void doMute(); public: bool bResetProcessor; diff --git a/src/mumble/AudioInput.ui b/src/mumble/AudioInput.ui index d8a332ac6..fc1d4354b 100644 --- a/src/mumble/AudioInput.ui +++ b/src/mumble/AudioInput.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>533</width> - <height>735</height> + <height>676</height> </rect> </property> <property name="windowTitle"> @@ -680,79 +680,37 @@ <string>Misc</string> </property> <layout class="QGridLayout" name="_2"> - <item row="1" column="0"> - <widget class="QCheckBox" name="qcbPushClick"> + <item row="2" column="5"> + <widget class="QPushButton" name="qpbPushClickBrowseOff"> <property name="toolTip"> - <string>Audible audio cue when starting or stopping to transmit</string> - </property> - <property name="whatsThis"> - <string><b>This enables transmission audio cues.</b><br />Setting this will give you a short audio beep when you start and stop transmitting.</string> + <string>Browse for off audio file</string> </property> <property name="text"> - <string>Audio cue</string> - </property> - </widget> - </item> - <item row="11" column="5" colspan="2"> - <widget class="QSlider" name="qsIdle"> - <property name="toolTip"> - <string>How long to remain idle before auto-deafen.</string> - </property> - <property name="whatsThis"> - <string>This sets an idle timer. If the timer expires without any audio being sent to the server, you are muted and deafened.</string> - </property> - <property name="maximum"> - <number>1800</number> - </property> - <property name="singleStep"> - <number>60</number> - </property> - <property name="pageStep"> - <number>300</number> - </property> - <property name="value"> - <number>1800</number> - </property> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - </widget> - </item> - <item row="1" column="5"> - <widget class="QLineEdit" name="qlePushClickPathOn"> - <property name="toolTip"> - <string>Gets played when starting to transmit</string> + <string>B&rowse...</string> </property> </widget> </item> - <item row="1" column="3"> - <widget class="QLabel" name="qlPushClickOn"> + <item row="2" column="3"> + <widget class="QLabel" name="qlPushClickOff"> <property name="text"> - <string>On</string> + <string>Off</string> </property> <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> </widget> </item> - <item row="2" column="5"> - <widget class="QLineEdit" name="qlePushClickPathOff"> - <property name="toolTip"> - <string>Gets played when stopping to transmit</string> - </property> - </widget> - </item> - <item row="2" column="3"> - <widget class="QLabel" name="qlPushClickOff"> + <item row="1" column="3"> + <widget class="QLabel" name="qlPushClickOn"> <property name="text"> - <string>Off</string> + <string>On</string> </property> <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> </widget> </item> - <item row="1" column="7"> + <item row="1" column="6"> <widget class="QPushButton" name="qpbPushClickPreview"> <property name="toolTip"> <string>Preview the audio cues</string> @@ -765,7 +723,7 @@ </property> </widget> </item> - <item row="2" column="7"> + <item row="2" column="6"> <widget class="QPushButton" name="qpbPushClickReset"> <property name="toolTip"> <string>Reset audio cue to default</string> @@ -778,43 +736,116 @@ </property> </widget> </item> - <item row="11" column="0"> - <widget class="QLabel" name="qliIdle"> + <item row="1" column="5"> + <widget class="QPushButton" name="qpbPushClickBrowseOn"> + <property name="toolTip"> + <string>Browse for on audio file</string> + </property> <property name="text"> - <string>Idle AutoDeafen</string> + <string>&Browse...</string> </property> </widget> </item> - <item row="11" column="7"> - <widget class="QLabel" name="qlIdle"> - <property name="minimumSize"> - <size> - <width>30</width> - <height>0</height> - </size> + <item row="1" column="4"> + <widget class="QLineEdit" name="qlePushClickPathOn"> + <property name="toolTip"> + <string>Gets played when starting to transmit</string> </property> - <property name="text"> - <string/> + </widget> + </item> + <item row="2" column="4"> + <widget class="QLineEdit" name="qlePushClickPathOff"> + <property name="toolTip"> + <string>Gets played when stopping to transmit</string> </property> </widget> </item> - <item row="2" column="6"> - <widget class="QPushButton" name="qpbPushClickBrowseOff"> + <item row="1" column="0"> + <widget class="QCheckBox" name="qcbPushClick"> <property name="toolTip"> - <string>Browse for off audio file</string> + <string>Audible audio cue when starting or stopping to transmit</string> + </property> + <property name="whatsThis"> + <string><b>This enables transmission audio cues.</b><br />Setting this will give you a short audio beep when you start and stop transmitting.</string> </property> <property name="text"> - <string>B&rowse...</string> + <string>Audio cue</string> </property> </widget> </item> - <item row="1" column="6"> - <widget class="QPushButton" name="qpbPushClickBrowseOn"> - <property name="toolTip"> - <string>Browse for on audio file</string> - </property> + <item row="3" column="4"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLabel" name="qlIdle2"> + <property name="text"> + <string>after</string> + </property> + </widget> + </item> + <item> + <widget class="QSpinBox" name="qsbIdle"> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>5000</number> + </property> + <property name="value"> + <number>5</number> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="qlIdle"> + <property name="minimumSize"> + <size> + <width>30</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string>Minutes do</string> + </property> + </widget> + </item> + </layout> + </item> + <item row="3" column="5"> + <widget class="QComboBox" name="qcbIdleAction"> + <item> + <property name="text"> + <string>Nothing</string> + </property> + </item> + <item> + <property name="text"> + <string>Deafen</string> + </property> + </item> + <item> + <property name="text"> + <string>Mute</string> + </property> + </item> + </widget> + </item> + <item row="3" column="0" colspan="2"> + <widget class="QLabel" name="qliIdle"> <property name="text"> - <string>&Browse...</string> + <string>Idle action</string> </property> </widget> </item> diff --git a/src/mumble/Settings.cpp b/src/mumble/Settings.cpp index fddc6dae4..2c4910b64 100644 --- a/src/mumble/Settings.cpp +++ b/src/mumble/Settings.cpp @@ -268,7 +268,11 @@ Settings::Settings() { iJitterBufferSize = 1; iFramesPerPacket = 2; iNoiseSuppress = -30; - iIdleTime = 0; + + // Idle auto actions + iIdleTime = 5 * 60; + iaeIdleAction = Nothing; + vsVAD = Amplitude; fVADmin = 0.80f; fVADmax = 0.98f; @@ -549,7 +553,11 @@ void Settings::load(QSettings* settings_ptr) { SAVELOAD(iNoiseSuppress, "audio/noisesupress"); SAVELOAD(iVoiceHold, "audio/voicehold"); SAVELOAD(iOutputDelay, "audio/outputdelay"); + + // Idle auto actions SAVELOAD(iIdleTime, "audio/idletime"); + LOADENUM(iaeIdleAction, "audio/idleaction"); + SAVELOAD(fAudioMinDistance, "audio/mindistance"); SAVELOAD(fAudioMaxDistance, "audio/maxdistance"); SAVELOAD(fAudioMaxDistVolume, "audio/maxdistancevolume"); @@ -830,7 +838,11 @@ void Settings::save() { SAVELOAD(iNoiseSuppress, "audio/noisesupress"); SAVELOAD(iVoiceHold, "audio/voicehold"); SAVELOAD(iOutputDelay, "audio/outputdelay"); + + // Idle auto actions SAVELOAD(iIdleTime, "audio/idletime"); + SAVELOAD(iaeIdleAction, "audio/idleaction"); + SAVELOAD(fAudioMinDistance, "audio/mindistance"); SAVELOAD(fAudioMaxDistance, "audio/maxdistance"); SAVELOAD(fAudioMaxDistVolume, "audio/maxdistancevolume"); diff --git a/src/mumble/Settings.h b/src/mumble/Settings.h index 47383f92c..52b512ef2 100644 --- a/src/mumble/Settings.h +++ b/src/mumble/Settings.h @@ -164,6 +164,7 @@ struct Settings { enum ChannelDrag { Ask, DoNothing, Move }; enum ServerShow { ShowPopulated, ShowReachable, ShowAll }; enum TalkState { Passive, Talking, Whispering, Shouting }; + enum IdleAction { Nothing, Deafen, Mute }; typedef QPair<QList<QSslCertificate>, QSslKey> KeyPair; AudioTransmit atTransmit; @@ -187,7 +188,11 @@ struct Settings { int iTTSVolume, iTTSThreshold; int iQuality, iMinLoudness, iVoiceHold, iJitterBufferSize; int iNoiseSuppress; + + // Idle auto actions unsigned int iIdleTime; + IdleAction iaeIdleAction; + VADSource vsVAD; float fVADmin, fVADmax; int iFramesPerPacket; diff --git a/src/mumble/main.cpp b/src/mumble/main.cpp index 490be718a..cca72fc33 100644 --- a/src/mumble/main.cpp +++ b/src/mumble/main.cpp @@ -397,6 +397,16 @@ int main(int argc, char **argv) { if (g.s.uiUpdateCounter == 0) { // Previous version was an pre 1.2.3 release or this is the first run runaudiowizard = true; + + } else if (g.s.uiUpdateCounter == 1) { + // Previous versions used old idle action style, convert it + + if (g.s.iIdleTime == 5 * 60) { // New default + g.s.iaeIdleAction = Settings::Nothing; + } else { + g.s.iIdleTime = 60 * qRound(g.s.iIdleTime / 60.); // Round to minutes + g.s.iaeIdleAction = Settings::Deafen; // Old behavior + } } if (runaudiowizard) { @@ -405,7 +415,7 @@ int main(int argc, char **argv) { delete aw; } - g.s.uiUpdateCounter = 1; + g.s.uiUpdateCounter = 2; if (! CertWizard::validateCert(g.s.kpCertificate)) { QDir qd(QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation)); |