У меня есть несколько объектов MediaPlayer, которые я хочу увеличивать или уменьшать их громкость отдельно в пределах панелей поиска.
Я могу без проблем изменять прогоны панелей поискано громкость не меняется с помощью приведенного ниже кода:
Во-первых:
sound1 = LoopMediaPlayer.create(context, R.raw.sound_1)
sound2 = LoopMediaPlayer.create(context, R.raw.sound_2)
private val MAX_VOLUME = 100
функция volumeControl для управления громкостью с помощью кнопок поиска:
private fun volumeControl(mediaPlayer: LoopMediaPlayer, seekBarId: Int) {
// Seek bar
val volumeSeekbar = view?.findViewById(seekBarId) as SeekBar
// Get Current Volume
val currentVolume = volumeSeekbar.progress.toDouble()
// Calculate the volume
val volume =
(1 - ln(MAX_VOLUME - currentVolume) / ln(MAX_VOLUME.toDouble())).toFloat()
volumeSeekbar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onStopTrackingTouch(arg0: SeekBar) {}
override fun onStartTrackingTouch(arg0: SeekBar) {}
override fun onProgressChanged(
arg0: SeekBar, progress: Int,
arg2: Boolean
) {
mediaPlayer.setVolume(volume, volume)
}
})
}
А потом я звоню:
if (!sound1.isPlaying) {
sound1.start()
volumeControl(sound1, R.id.seekbar_1)
}
Кстати, LoopMediaPlayer - это класс, который имеет собственный метод setVolume, такой как класс MediaPlayer.
Редактировать: теперь он работает с кодом ниже, как я хотел, когда яизменить ход панели поиска, но когда звук закончится и начнется снова ( в цикле с методом setPextMediaPlayer MediaPlayer ), громкость возвращается в исходное положение. Я имею в виду, что даже если я установлю прогресс выполнения seekbar на 0, он начинает с прогресса 50, когда звук начинается снова.
Код:
private fun volumeControl(view: View?, mediaPlayer: LoopMediaPlayer, seekBarId: Int) {
// // Seek bar
val volumeSeekbar = view?.findViewById(seekBarId) as SeekBar
volumeSeekbar.max = MAX_VOLUME.toInt()
volumeSeekbar.progress = 50
volumeSeekbar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onStopTrackingTouch(arg0: SeekBar) {}
override fun onStartTrackingTouch(arg0: SeekBar) {}
override fun onProgressChanged(
seekBar: SeekBar, progress: Int,
fromUser: Boolean
) {
val currentVolume = volumeSeekbar.progress.toFloat()
val volume = currentVolume / MAX_VOLUME
mediaPlayer.setVolume(volume, volume)
}
})
}