Android SoundPool未播放wav格式的声音
当我点击按钮时,我正在尝试播放原始资源文件中的.wav格式的声音,但当我点击按钮时,什么也没有发生,并且没有logcat错误 My MainActivity.kt:Android SoundPool未播放wav格式的声音,android,kotlin,soundpool,Android,Kotlin,Soundpool,当我点击按钮时,我正在尝试播放原始资源文件中的.wav格式的声音,但当我点击按钮时,什么也没有发生,并且没有logcat错误 My MainActivity.kt: package com.example.exampleofmusicapp import android.media.AudioAttributes import android.media.AudioManager import android.media.SoundPool
package com.example.exampleofmusicapp
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
class MainActivity : AppCompatActivity() {
lateinit var soundPool: SoundPool
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
var audioAttrs: AudioAttributes = AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build()
soundPool = SoundPool.Builder()
.setMaxStreams(2)
.setAudioAttributes(audioAttrs)
.build()
}
else{
soundPool = SoundPool(2, AudioManager.STREAM_MUSIC, 0)
}
}
fun playSound1(view: View) {
val sound1 = soundPool.load(this, R.raw.sound1, 1)
soundPool.play(sound1, 1.0f, 1.0f, 1, 0, 1.0f)
}
}
编辑:我在emulator 2和真实设备中尝试过这一点,但它不起作用。将声音文件加载到内存需要时间,因此将
val sound1
更改为var sound1
,使其全局化,并在onCreate
方法末尾实例化,如下所示:
class MainActivity : AppCompatActivity() {
lateinit var soundPool: SoundPool
var sound1 : Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
var audioAttrs: AudioAttributes = AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build()
soundPool = SoundPool.Builder()
.setMaxStreams(2)
.setAudioAttributes(audioAttrs)
.build()
}
else{
soundPool = SoundPool(2, AudioManager.STREAM_MUSIC, 0)
}
sound1 = soundPool.load(this, R.raw.sound1, 1)
}
fun playSound1(view: View) {
if(sound1 != 0) {
soundPool.play(sound1, 1.0f, 1.0f, 1, 0, 1.0f)
}
}
}
然后您可以检查sound1
值,如果它不等于0
,则它将完全加载。您还可以使用SoundPool
的setOnLoadCompleteListener
方法来检查这一点