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.