SoundPool 项目随机 playing/not 触发时播放

SoundPool items randomly playing/not playing when triggered

我需要播放 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]
}

现在我可以在 activity:

中访问它
companion object {
lateinit var pingSoundPool: PingSoundPool
}

在 onCreate 中我做 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 - 所有这些都出现在 Android Studio 的 logcat.

这发生在模拟器和真实设备上。

有什么想法吗?

解决方案是这样的:体积只接受从 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