Added 'Audio Delay' Audio Setting

This commit is contained in:
Juha Heinanen
2023-04-14 11:58:30 +03:00
parent 260be14b8c
commit 306b25c2af
8 changed files with 101 additions and 36 deletions

View File

@ -18,6 +18,7 @@ class AudioActivity : AppCompatActivity() {
private lateinit var opusBitRate: EditText
private lateinit var opusPacketLoss: EditText
private lateinit var aec: CheckBox
private lateinit var audioDelay: EditText
private var save = false
private var reload = false
@ -26,6 +27,7 @@ class AudioActivity : AppCompatActivity() {
private var oldOpusBitrate = ""
private var oldOpusPacketLoss = ""
private var oldAec = false
private var oldAudioDelay = BaresipService.audioDelay.toString()
private val audioModules = listOf("opus", "amr", "g722", "g7221", "g726", "g729", "g711")
private val onBackPressedCallback = object : OnBackPressedCallback(true) {
@ -121,6 +123,9 @@ class AudioActivity : AppCompatActivity() {
oldAec = aecCv.contains("webrtc_aecm.so")
aec.isChecked = oldAec
audioDelay = binding.AudioDelay
audioDelay.setText(oldAudioDelay)
bindTitles()
onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
@ -219,6 +224,19 @@ class AudioActivity : AppCompatActivity() {
save = true
}
val audioDelay = audioDelay.text.toString().trim()
if (audioDelay != oldAudioDelay) {
if (!checkAudioDelay(audioDelay)) {
Utils.alertView(this, getString(R.string.notice),
String.format(getString(R.string.invalid_audio_delay), audioDelay))
return false
}
Config.removeVariable("audio_delay")
Config.addLine("audio_delay $audioDelay")
BaresipService.audioDelay = audioDelay.toLong()
save = true
}
if (save) Config.save()
if (reload) Api.reload_config()
@ -265,6 +283,10 @@ class AudioActivity : AppCompatActivity() {
Utils.alertView(this, getString(R.string.aec),
getString(R.string.aec_help))
}
binding.AudioDelayTitle.setOnClickListener {
Utils.alertView(this, getString(R.string.audio_delay),
getString(R.string.audio_delay_help))
}
}
private fun checkOpusBitRate(opusBitRate: String): Boolean {
@ -277,4 +299,8 @@ class AudioActivity : AppCompatActivity() {
return (number >= 0) && (number <= 100)
}
private fun checkAudioDelay(audioDelay: String): Boolean {
val number = audioDelay.toIntOrNull() ?: return false
return (number >= 100) && (number <= 3000)
}
}

View File

@ -1474,6 +1474,7 @@ class BaresipService: Service() {
var isConfigInitialized = false
var libraryLoaded = false
var callVolume = 0
var audioDelay = if (VERSION.SDK_INT < 31) 1500L else 100L
var dynDns = false
var filesPath = ""
var pName = ""

View File

@ -75,6 +75,10 @@ object Config {
BaresipService.callVolume = variable("call_volume")[0].toInt()
}
if (config.contains("audio_delay")) {
BaresipService.audioDelay = variable("audio_delay")[0].toLong()
}
if (config.contains("net_af"))
BaresipService.addressFamily = variable("net_af")[0]

View File

@ -1886,45 +1886,27 @@ class MainActivity : AppCompatActivity() {
hangupButton.visibility = View.VISIBLE
hangupButton.isEnabled = true
if (Build.VERSION.SDK_INT < 31) {
Log.d(TAG, "Setting audio mode to MODE_IN_COMMUNICATION")
am.mode = AudioManager.MODE_IN_COMMUNICATION
callRunnable = Runnable {
callRunnable = null
if (!call(ua, uri)) {
callButton.visibility = View.VISIBLE
callButton.isEnabled = true
hangupButton.visibility = View.INVISIBLE
hangupButton.isEnabled = false
}
}
callHandler.postDelayed(callRunnable!!, 1500)
runCall(ua, uri)
} else {
audioModeChangedListener = AudioManager.OnModeChangedListener { mode ->
if (mode == AudioManager.MODE_IN_COMMUNICATION) {
Log.d(TAG, "Audio mode changed to MODE_IN_COMMUNICATION using " +
"device ${am.communicationDevice!!.type}")
if (audioModeChangedListener != null) {
am.removeOnModeChangedListener(audioModeChangedListener!!)
audioModeChangedListener = null
}
if (!call(ua, uri)) {
callButton.visibility = View.VISIBLE
callButton.isEnabled = true
hangupButton.visibility = View.INVISIBLE
hangupButton.isEnabled = false
}
} else {
Log.d(TAG, "Audio mode changed to mode ${am.mode} using " +
"device ${am.communicationDevice!!.type}")
}
}
if (am.mode == AudioManager.MODE_IN_COMMUNICATION) {
if (!call(ua, uri)) {
callButton.visibility = View.VISIBLE
callButton.isEnabled = true
hangupButton.visibility = View.INVISIBLE
hangupButton.isEnabled = false
}
runCall(ua, uri)
} else {
audioModeChangedListener = AudioManager.OnModeChangedListener { mode ->
if (mode == AudioManager.MODE_IN_COMMUNICATION) {
Log.d(TAG, "Audio mode changed to MODE_IN_COMMUNICATION using " +
"device ${am.communicationDevice!!.type}")
if (audioModeChangedListener != null) {
am.removeOnModeChangedListener(audioModeChangedListener!!)
audioModeChangedListener = null
}
runCall(ua, uri)
} else {
Log.d(TAG, "Audio mode changed to mode ${am.mode} using " +
"device ${am.communicationDevice!!.type}")
}
}
am.addOnModeChangedListener(mainExecutor, audioModeChangedListener!!)
Log.d(TAG, "Setting audio mode to MODE_IN_COMMUNICATION")
am.mode = AudioManager.MODE_IN_COMMUNICATION
@ -1939,6 +1921,20 @@ class MainActivity : AppCompatActivity() {
}
}
private fun runCall(ua: UserAgent, uri: String) {
callRunnable = Runnable {
callRunnable = null
if (!call(ua, uri)) {
am.mode = AudioManager.MODE_NORMAL
callButton.visibility = View.VISIBLE
callButton.isEnabled = true
hangupButton.visibility = View.INVISIBLE
hangupButton.isEnabled = false
}
}
callHandler.postDelayed(callRunnable!!, BaresipService.audioDelay)
}
private fun showCall(ua: UserAgent, showCall: Call? = null) {
val call = showCall ?: ua.currentCall()
if (call == null) {

View File

@ -146,6 +146,36 @@
</CheckBox>
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/AudioDelayTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:textSize="18sp"
android:text="@string/audio_delay" >
</TextView>
<EditText
android:id="@+id/AudioDelay"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_centerVertical="true"
android:layout_toEndOf="@+id/AudioDelayTitle"
android:layout_marginStart="10dp"
android:textSize="18sp"
android:scrollHorizontally="true"
android:inputType="number"
android:hint="@string/_0"
android:textColorHint="@color/colorSecondaryDark"
android:importantForAutofill="no" >
</EditText>
</RelativeLayout>
</LinearLayout>
</ScrollView>

View File

@ -232,7 +232,7 @@
android:id="@+id/AudioSettingsTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
android:layout_marginBottom="18dp"
android:textSize="18sp"
android:textStyle="bold"
android:text="@string/audio_settings" >

View File

@ -377,6 +377,10 @@
ei ole käytössä.</string>
<string name="invalid_opus_bitrate">Virheellinen Opus-koodekin bittinopeus</string>
<string name="invalid_opus_packet_loss">Virheellinen Opus-koodekin odotettu pakettihäviö</string>
<string name="audio_delay">Audioviive</string>
<string name="audio_delay_help">Audion odotusviive (millisekunneissa) soitetun puhelun alkaessa.
Aseta korkeampi arvo, jos et kuule vastaajan ääntä heti, kun puhelu alkaa.</string>
<string name="invalid_audio_delay">Virheellinen audioviive \'%1$s\'. Sallittu arvo on välillä 1003000.</string>
<string name="default_call_volume">Oletus äänen voimakkuus</string>
<string name="default_call_volume_help">Jos valittu, puhelun äänen voimakkuus
asteikolla 110.

View File

@ -354,6 +354,10 @@
<string name="_0" translatable="false">0</string>
<string name="invalid_opus_bitrate">Invalid Opus bitrate</string>
<string name="invalid_opus_packet_loss">Invalid Opus Packet Loss Percentage</string>
<string name="audio_delay">Audio Delay</string>
<string name="audio_delay_help">Time (in milliseconds) to wait audio from callee when call is established.
Set to a higher value if you miss audio from callee at the beginning of the call.</string>
<string name="invalid_audio_delay">Invalid Audio Delay \'%1$s\'. Valid values are from 100 to 3000.</string>
<string name="default_call_volume">Default Call Volume</string>
<string name="default_call_volume_help">If set, default call audio volume at scale 110.</string>
<string name="dark_theme">Dark Theme</string>