Проблемы с воспроизведением двух сырых файлов одновременно через два MediaPlayers - PullRequest
0 голосов
/ 27 мая 2019

Я разрабатываю Voip-приложение, и у меня есть крайний случай, когда я хочу воспроизвести два необработанных файла одновременно.

Когда мне поступает входящий звонок из моего приложения, я создаю новыйМедиаплеер и проигрывайте пользовательскую мелодию звонка.Когда я получаю вскоре после входящего GSM-вызова, я создаю новый медиаплеер и играю стук, чтобы дать пользователю обратную связь, что также есть входящий GSM-вызов.В то же время я хочу, чтобы пользовательская мелодия продолжала воспроизводиться.

private fun setAudioAttributesForFile(audioUsage: Int): AudioAttributes {
    return AudioAttributes.Builder()
            .setUsage(audioUsage)
            .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
            .build()
}

private fun startRingtone(fileToPlay: Int): MediaPlayer {
    return MediaPlayer().apply {
        reset()
        if (fileToPlay == R.raw.ring {
            setAudioAttributes(setAudioAttributesForFile(AudioAttributes.USAGE_NOTIFICATION_RINGTONE))
        } else {
            setAudioAttributes(setAudioAttributesForFile(AudioAttributes.USAGE_MEDIA))
        }
        isLooping = true
        Main.get().resources.openRawResourceFd(fileToPlay).use {
            setDataSource(
                    it.fileDescriptor,
                    it.startOffset,
                    it.length
            )
        }
        setOnPreparedListener { start() }
        prepareAsync()
    }
}

Проблема, с которой я столкнулся с этим кодом, состоит в том, что, как только воспроизводится стук, мелодия отключается системой, и как толькокогда звук стука останавливается, рингтон продолжается.

Что я тоже пробовал:

  1. Использование только AudioAttributes.USAGE_NOTIFICATION_RINGTONE.Как только начинает звучать стук, оба медиаплеера отключаются.

  2. Если я оставлю вызов setAudioAttributes() и заменим эти четыре строки на

if (fileToPlay == R.raw.ring) {
    setAudioAttributesForFile(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
} else {
    setAudioAttributesForFile(AudioAttributes.USAGE_MEDIA)
}

тогда я могу воспроизвести эти два файла одновременно.Проблема заключается в том, что файл мелодии звонка не отображается как мелодия звонка, а отображается только как файл мультимедиа.Поэтому, когда я увеличиваю и уменьшаю громкость мелодии звонка, флаг не показывает, что это мелодия звонка.

Можно ли воспроизвести один звук в качестве мелодии звонка, а другой - поверх обычного звука мультимедиа?

Заранее спасибо.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 27 мая 2019

Используйте пул звуков, если хотите воспроизводить оба звука одновременно.

...