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