Как управлять громкостью нескольких объектов MediaPlayer отдельно с помощью кнопок поиска - PullRequest
0 голосов
/ 24 октября 2019

У меня есть несколько объектов 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)
    }
})
}
...