Элементы SoundPool, случайно воспроизводимые / не воспроизводимые при срабатывании - PullRequest
0 голосов
/ 01 октября 2019

У меня есть несколько звуков в SoundPool, которые мне нужно воспроизвести. Иногда, когда они должны играть, вместо звука, который должен воспроизводиться, звучит низкий звук щелчка. Иногда они играют просто отлично.

Вот код, который я использую для SoundPool:

open class PingSoundPool(context: Context) {

open var mAttributes = AudioAttributes.Builder()
    .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
    .setUsage(AudioAttributes.USAGE_GAME)
    .build()

open var mSoundPool = SoundPool.Builder()
    .setMaxStreams(9)
    .setAudioAttributes(mAttributes)
    .build()

open var babping = mSoundPool.load(context, R.raw.ab830ping, 1)
open var aaping = mSoundPool.load(context, R.raw.a220ping, 1)
open var abbping = mSoundPool.load(context, R.raw.bb233ping, 1)
open var abping = mSoundPool.load(context, R.raw.b247ping, 1)
[and others]

open fun loadPings(note: Int) {
println(note.toString())
if (note == 0) {}
if(note == 1)
    mSoundPool.play(acping, 2.55f, 2.55f, 1, 0, 1f)
if(note == 2)
mSoundPool.play(adbping, 2.5f, 2.5f, 1, 0, 1f)
if(note == 3)
    mSoundPool.play(adping, 2.45f, 2.45f, 1, 0, 1f)
if(note == 4)
    mSoundPool.play(aebping, 2.4f, 2.4f, 1, 0, 1f)
[and so on]
}

Теперь я делаю это доступным в своей деятельности:

companion object {
lateinit var pingSoundPool: PingSoundPool
}

И вПри создании я делаю pingSoundPool = PingSoundPool(this)

Таким образом, я должен иметь возможность воспроизводить любой из этих звуков с FullscreenActivity.pingSoundPool.loadPings(note: Int) - как указано выше, иногда это работает, иногда нет, даже для повторений одного и того жезвук.

Одно замечание состоит в том, что println(note.toString()) печатает Int, соответствующий той ноте, которая должна быть воспроизведена, независимо от того, действительно ли нота может быть услышана. Однако каждый раз, когда нота фактически воспроизводится, за этим номером следует W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by client; transfer 4, track 44100 Hz, output 48000 Hz - все это появляется в logcat в Android Studio.

Это происходит как в эмуляторе, так и на реальных устройствах.

Есть идеи?

1 Ответ

0 голосов
/ 03 октября 2019

Решение таково: том принимает значения только от 0.0f до 1.0f. Я попытался установить их все на 1.0f, и теперь он работает нормально.

if(note == 4) mSoundPool.play(aebping, 2.4f, 2.4f, 1, 0, 1f) // wrong
if(note == 4) mSoundPool.play(aebping, 1.0f, 1.0f, 1, 0, 1f) // right
...