[Android] New equalizer: add band listener and snapping
Nicolas Pomepuy
git at videolan.org
Fri Jul 25 11:46:42 UTC 2025
vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Fri Jun 6 08:12:22 2025 +0200| [b30c120e32de2f431de36b68bf4021b5b336c0e6] | committer: Nicolas Pomepuy
New equalizer: add band listener and snapping
> https://code.videolan.org/videolan/vlc-android/commit/b30c120e32de2f431de36b68bf4021b5b336c0e6
---
.../vlc/gui/dialogs/EqualizerFragmentDialog.kt | 65 +++++++++++++++++++++-
1 file changed, 63 insertions(+), 2 deletions(-)
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/dialogs/EqualizerFragmentDialog.kt b/application/vlc-android/src/org/videolan/vlc/gui/dialogs/EqualizerFragmentDialog.kt
index 8132ed07fc..d80e3361a2 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/dialogs/EqualizerFragmentDialog.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/dialogs/EqualizerFragmentDialog.kt
@@ -49,6 +49,8 @@ import org.videolan.vlc.PlaybackService
import org.videolan.vlc.R
import org.videolan.vlc.databinding.DialogEqualizerBinding
import org.videolan.vlc.gui.view.EqualizerBar
+import org.videolan.vlc.interfaces.OnEqualizerBarChangeListener
+import kotlin.math.absoluteValue
import kotlin.math.roundToInt
@@ -195,8 +197,7 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment() {
bar.layoutParams = params
eqBandsViews.add(bar)
bar.setSliderId(View.generateViewId())
- //todo
-// bar.setListener(BandListener(i))
+ bar.setListener(BandListener(i))
}
for (i in 0 until bandCount) {
if (i > 0) eqBandsViews[i].nextFocusLeftId = eqBandsViews[i - 1].getSliderId()
@@ -324,6 +325,66 @@ class EqualizerFragmentDialog : VLCBottomSheetDialogFragment() {
}
}
+ /**
+ * Band listener
+ *
+ * @property index the band index
+ * @constructor Create empty Band listener
+ */
+ private inner class BandListener(private val index: Int) : OnEqualizerBarChangeListener {
+
+ private var oldBands: MutableList<Int> = ArrayList()
+
+
+ override fun onProgressChanged(value: Float, fromUser: Boolean) {
+ if (!fromUser)
+ return
+ equalizer.setAmp(index, value)
+ if (!binding.equalizerButton.isChecked)
+ binding.equalizerButton.isChecked = true
+
+ val pos = getCurrentPosition()
+ if (getEqualizerType(pos) == TYPE_PRESET) {
+ state.update(getCurrentPosition(), false)
+ } else if (getEqualizerType(pos) == TYPE_CUSTOM) {
+ state.update(pos, false)
+ }
+
+ /**
+ * Snap bands
+ */
+ if (binding.snapBands.isChecked && oldBands.isNotEmpty()) {
+ val delta = eqBandsViews[index].getProgress() - oldBands[index]
+ for (i in eqBandsViews.indices) {
+ if (i == index) {
+ continue
+ }
+ eqBandsViews[i].setProgress((oldBands[i] + delta / ((i - index).absoluteValue.let { it * it * it } + 1)).coerceIn(0, EqualizerBar.RANGE * 2))
+
+ if (binding.equalizerButton.isChecked) {
+
+ equalizer.setAmp(i, eqBandsViews[i].getValue())
+ }
+
+ }
+ }
+
+ if (binding.equalizerButton.isChecked) PlaybackService.equalizer.value = equalizer
+
+ }
+
+ override fun onStartTrackingTouch() {
+ oldBands.clear()
+ for (eqBandsView in eqBandsViews) {
+ oldBands.add(eqBandsView.getProgress())
+ }
+ }
+
+ override fun onStopTrackingTouch() {
+ oldBands.clear()
+ }
+ }
+
}
More information about the Android
mailing list