diff --git a/app/src/main/kotlin/com/tutpro/baresip/AudioActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/AudioActivity.kt index 40bcc035..a1dcc4f6 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/AudioActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/AudioActivity.kt @@ -15,6 +15,7 @@ import com.tutpro.baresip.databinding.ActivityAudioBinding class AudioActivity : AppCompatActivity() { private lateinit var binding: ActivityAudioBinding + private lateinit var micGain: EditText private lateinit var opusBitRate: EditText private lateinit var opusPacketLoss: EditText private lateinit var aec: CheckBox @@ -24,6 +25,7 @@ class AudioActivity : AppCompatActivity() { private var save = false private var restart = false private var callVolume = BaresipService.callVolume + private var oldMicGain = "" private var oldAudioModules = mutableMapOf() private var oldOpusBitrate = "" private var oldOpusPacketLoss = "" @@ -74,6 +76,10 @@ class AudioActivity : AppCompatActivity() { } } + micGain = binding.MicGain + oldMicGain = Config.variable("augain") + micGain.setText(oldMicGain) + speakerPhone = binding.SpeakerPhone speakerPhone.isChecked = BaresipService.speakerPhone @@ -126,7 +132,7 @@ class AudioActivity : AppCompatActivity() { aec.isChecked = oldAec audioDelay = binding.AudioDelay - audioDelay.setText(BaresipService.audioDelay.toString()) + audioDelay.setText("${BaresipService.audioDelay}") val toneCountrySpinner = binding.ToneCountrySpinner val toneCountryKeys = arrayListOf("bg", "br", "de", "cz", "es", "fi", "fr", "uk", "jp", "no", "nz", "se", "ru", "us") @@ -179,6 +185,36 @@ class AudioActivity : AppCompatActivity() { save = true } + var gain = micGain.text.toString().trim() + if (!gain.contains(".")) + gain = "$gain.0" + if (gain != oldMicGain) { + if (!checkMicGain(gain)) { + Utils.alertView(this, getString(R.string.notice), + "${getString(R.string.invalid_microphone_gain)}: $gain.") + micGain.setText(oldMicGain) + return false + } + if (gain == "1.0") { + Api.module_unload("augain") + Config.removeVariableValue("module", "augain.so") + Config.replaceVariable("augain", "1.0") + } else { + if (oldMicGain == "1.0") { + if (Api.module_load("augain") != 0) { + Utils.alertView(this, getString(R.string.error), + getString(R.string.failed_to_load_module)) + micGain.setText(oldMicGain) + return false + } + Config.addVariable("module", "augain.so") + } + Config.replaceVariable("augain", gain) + Api.cmd_exec("augain $gain") + } + save = true + } + if (speakerPhone.isChecked != BaresipService.speakerPhone) { BaresipService.speakerPhone = speakerPhone.isChecked Config.replaceVariable("speaker_phone", @@ -235,12 +271,16 @@ class AudioActivity : AppCompatActivity() { if (aec.isChecked != oldAec) { if (aec.isChecked) { - Config.replaceVariable("module", "webrtc_aecm.so") - if (Api.module_load("webrtc_aecm.so") != 0) { - Utils.alertView(this, getString(R.string.error), + Config.addVariable("module", "webrtc_aecm.so") + if (gain != "1.0") { + restart = true + } else { + if (Api.module_load("webrtc_aecm.so") != 0) { + Utils.alertView(this, getString(R.string.error), getString(R.string.failed_to_load_module)) - aec.isChecked = false - return false + aec.isChecked = false + return false + } } } else { Api.module_unload("webrtc_aecm.so") @@ -298,6 +338,11 @@ class AudioActivity : AppCompatActivity() { Utils.alertView(this, getString(R.string.default_call_volume), getString(R.string.default_call_volume_help)) } + binding.MicGainTitle.setOnClickListener { + Utils.alertView(this, getString(R.string.microphone_gain), + getString(R.string.microphone_gain_help) + ) + } binding.SpeakerPhoneTitle.setOnClickListener { Utils.alertView(this, getString(R.string.speaker_phone), getString(R.string.speaker_phone_help)) @@ -328,6 +373,16 @@ class AudioActivity : AppCompatActivity() { } } + private fun checkMicGain(micGain: String): Boolean { + val number = + try { + micGain.toDouble() + } catch (e: NumberFormatException) { + return false + } + return number >= 1.0 + } + private fun checkOpusBitRate(opusBitRate: String): Boolean { val number = opusBitRate.toIntOrNull() ?: return false return (number >= 6000) && (number <= 510000) diff --git a/app/src/main/kotlin/com/tutpro/baresip/Config.kt b/app/src/main/kotlin/com/tutpro/baresip/Config.kt index 78766c9e..efe6feaa 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Config.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Config.kt @@ -157,6 +157,12 @@ object Config { if ("webrtc_aecm.so" in previousModules) config = "${config}module webrtc_aecm.so\n" + val micGain = previousVariable("augain") + config = if (micGain == "" || micGain == "1.0") + "${config}augain 1.0\n" + else + "${config}module augain.so\naugain $micGain\n" + val opusBitRate = previousVariable("opus_bitrate") config = if (opusBitRate == "") "${config}opus_bitrate 28000\n" diff --git a/app/src/main/res/layout/activity_audio.xml b/app/src/main/res/layout/activity_audio.xml index d5941e79..df47cf96 100644 --- a/app/src/main/res/layout/activity_audio.xml +++ b/app/src/main/res/layout/activity_audio.xml @@ -40,6 +40,36 @@ + + + + + + + Jos merkitty, kaiun poistossa käytetään laajennettua suodatinta. + Mikrofonin äänikerroin + Kertoo mikrofonin äänen voimakkuuden tällä desimaaliluvulla. + Minimikerroin on 1.0 (tehdasasetus), mikä ei muuta mikrofonin äänen voimakkuutta. Suuremmat + arvot voivat vaikuttaa negatiivisesti äänen laatuun. + Virheellinen mikrofonin äänikerroin + 1.0 Opus-koodekin bittinopeus Opus-koodekin käyttämä keskimääräinen enimmäisnopeus. Mahdollisia arvoja ovat diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5eb46d60..f61f702a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -344,6 +344,12 @@ If checked, echo cancellation is attempted on call audio. AEC Extended Filter If checked, echo cancellation is using extended filter. + Microphone Gain + Multiply microphone volume by this decimal number. Minimum + value is 1.0 (factory default) that disables microphone gain. Larger values may negatively + affect audio quality. + Invalid Microphone Gain value + 1.0 Opus Bit Rate Average maximum bit rate used by Opus audio stream. Valid values are 6000-510000. Factory default is 28000.